我正在使用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。但我要繼續我的研究,必須有一種方法... –
更正:這是不可能的:) –