嘿伙计们,我正在尝试构建一个用于实时语音转换的应用程序。在第一步中,我设法将音频数据录制到指定文件并在录制后播放。现在,我尝试在循环录制音频缓冲区后立即更改用于播放音频缓冲区的代码。我的问题是,如何直接从录音 Audioqueue 中读取 Audiodata 而不是(如文档中所示)从文件中读取。我感谢任何想法,如果需要,可以显示代码部分。在此先感谢 Lukas(来自德国)
问问题
1358 次
1 回答
1
查看 SpeakHere 示例。此行获取音频数据:
OSStatus result = AudioFileReadPackets(THIS->GetAudioFileID(), false, &numBytes, inCompleteAQBuffer->mPacketDescriptions, THIS->GetCurrentPacket(), &nPackets,
inCompleteAQBuffer->mAudioData);
AudioFileReadPackets
因此,您可以使用 memcpy 复制记录的数据缓冲区,而不是 call 。或者,可替换地,向回放AudioQueue
提供指向音频数据缓冲区的指针。mCurrentPacket
随着播放的继续,在缓冲区中前进一个指针。
要记录,你会做一些非常相似的事情。您将写入内存中的缓冲区,而不是写入文件。您首先需要使用malloc
. 然后是您传入的AudioQueue
捕获记录的数据,您将该数据复制到缓冲区。随着更多数据被复制,您将记录头推进,或mCurrentPacket
移动到新位置。
于 2012-01-17T10:24:06.360 回答