2011-01-09 80 views
2

嗨夥計, Iam試圖構建一個實時語音交換應用程序。 在第一步中,我設法將audiodata錄製到指定的文件並在錄製後播放。 現在我嘗試更改用於在循環中記錄它們之後回放audiobuffers的代碼。 我的問題是,如何從文件中直接從錄製Audioqueue中讀取Audiodata而不是(如文檔中所示)。我很感謝任何想法,並且如果需要的話可以顯示代碼組件。 在此先感謝, 盧卡斯(來自德國)實時AudioQueue錄製 - 播放

+0

您打算使用哪種平臺/語言? (很難從你的問題中分辨出來。) – 2011-01-09 15:29:29

回答

1

看看SpeakHere的例子。這條線源的音頻數據:

OSStatus result = AudioFileReadPackets(THIS->GetAudioFileID(), false, &numBytes,  inCompleteAQBuffer->mPacketDescriptions, THIS->GetCurrentPacket(), &nPackets, 
             inCompleteAQBuffer->mAudioData); 

因此,而不是叫AudioFileReadPackets,你可以使用一個以上的memcpy記錄的數據緩衝區拷貝。或者,可選地,向播放AudioQueue提供指向音頻數據緩衝區的指針。隨着播放的繼續,通過緩衝區前進一個mCurrentPacket指針。

記錄,你會做一些非常相似的事情。您不會寫出文件,而是寫出內存中的緩衝區。您首先需要使用malloc進行分配。然後你的傳入AudioQueue捕獲記錄的數據,您將該數據複製到緩衝區。隨着更多數據被複制,您將記錄頭或mCurrentPacket提前到新的位置。