2011-01-09 82 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提前到新的位置。