@Override public void actionPerformed(final ActionEvent e) { String name = e.getActionCommand(); PitchEstimationAlgorithm newAlgo = PitchEstimationAlgorithm.valueOf(name); algo = newAlgo; if (currentFile != null) { estimationDispatcher.stop(); sourceDispatcher.stop(); startFile(currentFile); } }
@Ignore @Test public void testSilenceWriter() throws UnsupportedAudioFileException, InterruptedException, LineUnavailableException, FileNotFoundException { float sampleRate = 44100; int bufferSize = 1024; int overlap = 0; // available mixers int index = 0; int selectedMixerIndex = 4; for (Mixer.Info mixer : AudioSystem.getMixerInfo()) { System.out.println(index + ": " + Shared.toLocalString(mixer)); index++; } Mixer.Info selectedMixer = AudioSystem.getMixerInfo()[selectedMixerIndex]; System.out.println("Selected mixer: " + Shared.toLocalString(selectedMixer)); // open a line final Mixer mixer = AudioSystem.getMixer(selectedMixer); final AudioFormat format = new AudioFormat(sampleRate, 16, 1, true, true); final DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, format); TargetDataLine line; line = (TargetDataLine) mixer.getLine(dataLineInfo); final int numberOfSamples = bufferSize; line.open(format, numberOfSamples); line.start(); final AudioInputStream stream = new AudioInputStream(line); // create a new dispatcher AudioDispatcher dispatcher = new AudioDispatcher(stream, bufferSize, overlap); WaveformWriter writer = new WaveformWriter(format, "01.file.wav"); // add a processor, handle percussion event. dispatcher.addAudioProcessor(new SilenceDetector()); dispatcher.addAudioProcessor(writer); // run the dispatcher (on the same thread, use start() to run it on // another thread). new Thread(dispatcher).start(); Thread.sleep(3000); dispatcher.removeAudioProcessor(writer); writer = new WaveformWriter(format, "02.file.wav"); dispatcher.addAudioProcessor(writer); Thread.sleep(3000); dispatcher.stop(); }
private void setNewMixer(Mixer mixer) throws LineUnavailableException, UnsupportedAudioFileException { if (dispatcher != null) { dispatcher.stop(); } if (fileName == null) { final AudioFormat format = new AudioFormat(sampleRate, 16, 1, true, false); final DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, format); TargetDataLine line; line = (TargetDataLine) mixer.getLine(dataLineInfo); final int numberOfSamples = bufferSize; line.open(format, numberOfSamples); line.start(); final AudioInputStream stream = new AudioInputStream(line); // create a new dispatcher dispatcher = new AudioDispatcher(stream, bufferSize, overlap); } else { try { File audioFile = new File(fileName); dispatcher = AudioDispatcher.fromFile(audioFile, bufferSize, overlap); AudioFormat format = AudioSystem.getAudioFileFormat(audioFile).getFormat(); dispatcher.addAudioProcessor(new AudioPlayer(format)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } currentMixer = mixer; // add a processor, handle pitch event. dispatcher.addAudioProcessor(new PitchProcessor(algo, sampleRate, bufferSize, this)); dispatcher.addAudioProcessor(fftProcessor); // run the dispatcher (on a new thread). new Thread(dispatcher, "Audio dispatching").start(); }