Нажатие звука при выполнении FFT.forwardTransform () - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь визуализировать БПФ звука при его прослушивании с использованием библиотеки 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;
     }
}

Я пытался ограничить выполнение, введя форму регулирования, думая, что это может помочь. Я также пытался не использовать буферизованный ввод в случае переполнения буфера.

Но проблема все еще присутствует, и у меня заканчиваются идеи о том, что делать дальше.

Цените любые указатели, спасибо!

1 Ответ

0 голосов
/ 12 февраля 2020

Похоже, что это известная проблема: https://github.com/JorenSix/TarsosDSP/issues/90

Следующая модификация приведенного выше кода устраняет проблему щелчка звука.

dispatcher = new AudioDispatcher(audioStream, (int) audioStream.getFrameLength() - 2, overlap);

Однако теперь процессор FFT, похоже, испытывает проблемы. Мне придется продолжить расследование.

Ура!

...