Мне нужно выполнить спектральный анализ простого файла wav. Вещи, которые я уже сделал:
Прочитать файл в массив байтов:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = audioStream.read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
fileByteArray = baos.toByteArray();
Затем я преобразовываю его в реальные значения (двойники). У меня есть образцы значений, хранящиеся в массиве double[].
Как я могу сделать БПФ этих выборок + оценить основную частоту?
Используя библиотеку JTranforms, я попробовал что-то вроде этого:
DoubleFFT_1D fft = new DoubleFFT_1D(reader.getSpectrum().getYvalues().length);
double[] x = reader.getSpectrum().getYvalues();
double[] frequencyArray = new double[x.lenght/2];
double[] amplitudeArray = new double[x.lenght/2];
fft.realForward(x);
int i=0;
for (int j = 0; j < x.length-2; j += 2) {
i++;
this.frequencyArray[i] = i;
this.amplitudeArray[i] = Math.sqrt(Math.pow(doub[j],2) + Math.pow(doub[j + 1],2));
}
Это правильно?
Все предложения приветствуются ;)