Example #1
0
  private void test() throws IOException {
    // Create a context for the synthesizer.
    synth = JSyn.createSynthesizer();
    // Add a tone generator.
    synth.add(channelIn = new ChannelIn());
    // Add an output mixer.
    synth.add(channelOut = new ChannelOut());

    synth.add(minner = new Minimum());
    synth.add(maxxer = new Maximum());
    synth.add(reader = new FixedRateMonoReader());
    synth.add(writer = new FixedRateMonoWriter());

    sample = new FloatSample(44100 * DELAY_SECONDS, 1);

    maxxer.inputB.set(-0.98); // clip
    minner.inputB.set(0.98);

    // Connect the input to the output.
    channelIn.output.connect(minner.inputA);
    minner.output.connect(maxxer.inputA);
    maxxer.output.connect(writer.input);

    reader.output.connect(channelOut.input);

    // Both stereo.
    int numInputChannels = 2;
    int numOutputChannels = 2;
    synth.start(
        44100,
        AudioDeviceManager.USE_DEFAULT_DEVICE,
        numInputChannels,
        AudioDeviceManager.USE_DEFAULT_DEVICE,
        numOutputChannels);

    writer.start();
    channelOut.start();

    // For a long echo, read cursor should be just in front of the write cursor.
    reader.dataQueue.queue(sample, 1000, sample.getNumFrames() - 1000);
    // Loop both forever.
    reader.dataQueue.queueLoop(sample, 0, sample.getNumFrames());
    writer.dataQueue.queueLoop(sample, 0, sample.getNumFrames());
    System.out.println(
        "Start talking. You should hear an echo after " + DELAY_SECONDS + " seconds.");
    // Sleep a while.
    try {
      double time = synth.getCurrentTime();
      // Sleep for a while
      synth.sleepUntil(time + 30.0);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    saveEcho(new File("saved_echo.wav"));
    // Stop everything.
    synth.stop();
  }
Example #2
0
 private void saveEcho(File file) throws IOException {
   WaveFileWriter writer = new WaveFileWriter(file);
   writer.setFrameRate(44100);
   writer.setSamplesPerFrame(1);
   writer.setBitsPerSample(16);
   float[] buffer = new float[sample.getNumFrames()];
   sample.read(buffer);
   for (float v : buffer) {
     writer.write(v);
   }
   writer.close();
 }