Java / Android - искаженное аудио с использованием БПФ в реальном времени - PullRequest
0 голосов
/ 06 апреля 2011

этот вопрос наиболее актуален для пользователей, имеющих опыт использования пакета JTransform для быстрых преобразований Фурье. Я пытаюсь в конечном итоге создать эквалайзер в рамках более крупного аудио проекта в реальном времени. Прямо сейчас я просто пытался применить преобразование Фурье, затем использовать обратный метод, чтобы вернуть исходные данные, а затем вывести этот звук. То, что я получаю, это сильно искаженный звук. Интересно, есть ли у кого-нибудь такой опыт?

Я применяю преобразование в методе обратного вызова после выборки аудиовхода.

public void onMarkerReached(AudioRecord recorder)
 double[] input = new double[buffers[ix].length];
for(int i=0;i<input.length;i++)
            {
                input[i] = (double)buffers[ix][i];
            }
DoubleFFT_1D ft = new DoubleFFT_1D(input.length);
            ft.realForward(input);
            //some filtering here
            ft.realInverse(input, false);
            for(int i=0;i<input.length;i++)
            {
                buffers[ix][i] = (short)input[i];
            }


                player.write(buffers[ix], 0,
                        buffers[ix].length);
}
}

Я теряю часть сигнала в результате сохранения только действительной части преобразования? Так как это только аудиоданные, вход должен быть только реальным, верно? Не уверен, что я делаю что-то здесь не так, любой вклад будет принята с благодарностью!

1 Ответ

0 голосов
/ 01 июня 2011

Я протестировал ваш фрагмент, используя ft.realInverse (input, true); наряду с правильным размером выборки исправил искажения для меня.

...