В настоящее время я записываю аудио, используя AudioRecord
, точнее - используя перегрузки метода read
, которые снабжаются коротким буфером (нельзя использовать float[]
один из-за минимальных ограничений API).
Я хочу применить Быстрое преобразование Фурье к данным, которые я получаю во время записи. Сначала я конвертирую полученный short[]
в float[]
, используя такое преобразование:
public static float[] convertShortToFloat(short[] array) {
float[] data = new float[array.length];
for (int i = 0; i < array.length; i++) {
data[i] = 1.f * array[i] / Short.MAX_VALUE;
}
return data;
}
Затем я просто предоставляю полученный float[]
экземпляру FFT
и получаю результат, используя метод getRealPart()
(реализация этого класса у меня на самом деле немного другая, но я считаю, что он работает почти так же, как этот).
Насколько я понимаю, теперь я должен преобразовать данные, которые я получил после преобразования, обратно в форму short[]
(преобразовать обратно в первичную область сигнала), а затем передать в мультиплексор. Я создал преобразование массива short[]
- float[]
, чтобы оно было противоположным тому, которое я показал ранее, но я просто получаю шум при воспроизведении записи.
Что не так с реализацией?