2011-04-07 160 views
0

有沒有辦法直接複製到AudioQueueBuffer?將音頻直接複製到iPhone上的音頻緩衝區

我期待重新創建一個Android應用程序,使用android.AudioTrack的write()函數直接寫入聲音緩衝區。我可以使用iPhone上的AudioQueueBuffer做類似的事情嗎?

我會沿着線做一些事情:

AudioQueueAllocateBuffer(mAudioQueueData.mQueue, dataSize, &mAudioQueueData.mBuffer); 
mAudioQueueData.mBuffer->mAudioDataByteSize = dataSize; 
memcpy(mAudioQueueData.mBuffer->mAudioData, soundData, dataSize); 
AudioQueueStart(mAudioQueueData.mQueue, NULL); 

回答

2

的音頻緩衝是隻設計了一個音頻隊列回調內部寫入(有意義) 。但是您可以隨時將聲音數據複製/排隊到您自己的中間緩衝區,然後在音頻隊列回調期間將該數據從中間緩衝區再次複製到音頻隊列緩衝區。這是另一個不是火箭科學的步驟。

音頻單元RemoteIO緩衝區以類似的方式工作。

+0

我在看蘋果的例子,我設置了一個AudioQueueCallback。我不確定的是複製到AudioQueueBuffer的「正確」方式。如果我只是將memcpy移入AudioQueueCallback,那麼排隊緩衝區應該都很好? – TurqMage 2011-04-07 23:52:04

+0

如果數據與樣本格式,大小,包裝,字節順序等的音頻隊列數據格式相匹配,則可以使用memcpy。 – hotpaw2 2011-04-08 01:49:19