Я пытаюсь визуализировать БПФ звука при его прослушивании с использованием библиотеки TarsosDSP. Однако при прослушивании звучит громкий щелкающий звук, и я не могу понять, откуда это происходит. Это происходит на P C.
. В моем коде все остается одинаковым, я сузил его до функции FFT.forwardTransform ().
Вот основная схема подключения моего приложения:
Приложение. java:
InputStream audioStreasm = getClass().getResourceAsStream(selectedSound);
InputStream bufferedIn = new BufferedInputStream(audioStreasm);
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(bufferedIn);
JVMAudioInputStream audioStream = new JVMAudioInputStream(audioInputStream);
// create a new dispatcher
dispatcher = new AudioDispatcher(audioStream, bufferSize, overlap);
dispatcher.addAudioProcessor(new FFTProcessor(fftSize, sampleRate));
dispatcher.addAudioProcessor(new AudioPlayer(audioStream.getFormat()));
// run the dispatcher (on a new thread).
new Thread(dispatcher, "Audio dispatching").start();
Файл представляет собой WAV-файл 1,85 МБ. bufferSize - 1536, sampleRate - 44100
и FFTProcessor. java по сути выглядит так:
public class FFTProcessor implements AudioProcessor {
private int sampleRate;
private FFT fft;
private float[] amplitudes;
public FFTProcessor(int fftSize, int sampleRate) {
this.sampleRate = sampleRate;
fft = new FFT(fftSize);
amplitudes = new float[fftSize];
}
@Override
public boolean process(AudioEvent audioEvent) {
float[] audioBuffer = audioEvent.getFloatBuffer();
fft.forwardTransform(audioBuffer);
fft.modulus(audioBuffer, amplitudes);
return true;
}
}
Я пытался ограничить выполнение, введя форму регулирования, думая, что это может помочь. Я также пытался не использовать буферизованный ввод в случае переполнения буфера.
Но проблема все еще присутствует, и у меня заканчиваются идеи о том, что делать дальше.
Цените любые указатели, спасибо!