У меня есть приложение, которое выбирает песню из библиотеки iPod, а затем копирует эту песню в каталог приложения в виде файла .caf. Теперь мне нужно играть и в то же время читать этот файл в Apple FFT из ракурса Accelerate, чтобы я мог визуализировать данные, подобные спектрограмме. Вот код для FFT:Как играть и читать .caf PCM аудиофайл
void FFTAccelerate::doFFTReal(float samples[], float amp[], int numSamples)
{
int i;
vDSP_Length log2n = log2f(numSamples);
//Convert float array of reals samples to COMPLEX_SPLIT array A
vDSP_ctoz((COMPLEX*)samples,2,&A,1,numSamples/2);
//Perform FFT using fftSetup and A
//Results are returned in A
vDSP_fft_zrip(fftSetup, &A, 1, log2n, FFT_FORWARD);
//Convert COMPLEX_SPLIT A result to float array to be returned
amp[0] = A.realp[0]/(numSamples*2);
for(i=1;i<numSamples;i++)
amp[i]=sqrt(A.realp[i]*A.realp[i]+A.imagp[i]*A.imagp[i])/numSamples;
}
//Constructor
FFTAccelerate::FFTAccelerate (int numSamples)
{
vDSP_Length log2n = log2f(numSamples);
fftSetup = vDSP_create_fftsetup(log2n, FFT_RADIX2);
int nOver2 = numSamples/2;
A.realp = (float *) malloc(nOver2*sizeof(float));
A.imagp = (float *) malloc(nOver2*sizeof(float));
}
Мой вопрос заключается в том, как я через цикл «.caf» аудиофайла кормить FFT в то же время играет песню? Мне нужен только один канал. Я предполагаю, что мне нужно получить 1024 образца песни, процесс, который в FTT, а затем двигаться дальше по файлу и захватить еще 1024 образца. Но я не понимаю, как читать аудиофайл, чтобы сделать это. Файл имеет частоту дискретизации 44100,0 Гц, находится в линейном формате PCM, 16 бит, и я считаю, что чередуется, если это помогает ...
Спасибо ... это выглядит многообещающе! Как бы я обходил вокруг и получал следующие 1024 кадра? Как я могу одновременно воспроизводить аудио? – Snick
добавлен цикл. просто понял, что вам нужны образцы с плавающей точкой. нужно исправить это. для одновременного воспроизведения звука, возможно, вы должны задать другой вопрос. есть много способов сделать это. –
Я смущен, что такое ioNumFrames? Dont Я хочу массив образцов с плавающей точкой? Является ли «ab'what держать эту информацию?» – Snick