实时AudioQueue记录播放

时间:2011-01-09 15:12:51

标签: iphone objective-c ios voice-recording audioqueue

嘿,伙计们, 我试图建立一个实时语音交换的应用程序。 在第一步中,我设法将audiodata录制到指定的文件并在录制后播放。 现在我尝试在循环录制后立即更改用于播放audiobuffers的代码。 我的问题是,如何直接从录音Audioqueue中读取Audiodata,而不是从文件中读取(如文档中所示)。 我感谢任何想法,如果需要可以显示代码部分。 提前致谢, 卢卡斯(来自德国)

1 个答案:

答案 0 :(得分:1)

看一下SpeakHere示例。此行提供音频数据:

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

因此,您可以使用memcpy复制记录的数据缓冲区,而不是调用AudioFileReadPackets。或者,替代地,向回放AudioQueue提供指向音频数据缓冲区的指针。当播放继续时,将mCurrentPacket指针推进缓冲区。

要记录,你会做一些非常相似的事情。您将写入内存中的缓冲区,而不是写入文件。您首先需要使用malloc进行分配。然后,您的传入AudioQueue捕获记录的数据,然后将该数据复制到缓冲区。随着复制的数据越来越多,您可以将录音头前进,或mCurrentPacket到新的位置。