我正在使用Matt Gallagher的AudioStreamer播放mp3音频流。现在我想要实时进行FFT并使用iPhone上的OpenGL ES对频率进行可视化。iPhone AudioStreamer AudioQueue实时FFT
我不知道在哪里捕捉音频数据并将它传递给我的“超级花式-FFT-计算-3D可视化法”。马特是使用AudioQueue框架并没有被设置有一个回调函数:
err = AudioQueueNewOutput(&asbd, ASAudioQueueOutputCallback, self, NULL, NULL, 0, &audioQueue);
回调看起来是这样的:
static void ASAudioQueueOutputCallback(void* inClientData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer){...}
在我从AudioQueueBufferRef和传递数据的时刻结果看起来很奇怪。但是对于FFT和可视化,有很多地方可以把它搞砸,所以我想确保至少将正确的数据传递给FFT。我从缓冲这种方式读取数据忽略每隔一个值,因为我只要分析一个信道:
SInt32* buffPointer = (SInt32*)inBuffer->mAudioData;
int count = 0;
for (int i = 0; i < inBuffer->mAudioDataByteSize/2; i++) {
myBuffer[i] = buffPointer[count];
count += 2;
}
然后如下FFT运算用含有512个值myBuffer。
我只是发现了它使用Matt的AudioStreamer中的代码在某个时刻捕获PCM数据是不可能的。数据以压缩格式传递给AudioQueue。但我要继续我的研究,必须有一种方法... –
更正:这是不可能的:) –