【问题标题】:Realtime AudioQueue Record-Playback实时音频队列记录回放
【发布时间】:2011-06-06 02:39:19
【问题描述】:

大家好, 我正在尝试构建一个用于实时语音转换的应用程序。 在第一步中,我设法将音频数据录制到指定文件并在录制后播放。 现在,我尝试在循环录制音频缓冲区后立即更改用于播放音频缓冲区的代码。 我的问题是,如何直接从录音 Audioqueue 中读取 Audiodata 而不是(如文档中所示)从文件中读取。 我感谢任何想法,如果需要,可以显示代码部分。 提前致谢, Lukas(来自德国)

【问题讨论】:

  • 您打算使用什么平台/语言? (从你的问题很难看出。)
  • 该程序适用于 iPhone。使用的语言是Objective-C。到目前为止,我的大部分代码都取自 AudioQueueReference Guide。
  • 我已经用更有意义的标签重新标记了您的问题 - 希望您现在能得到更多回复。
  • 你没有参考 SpeakHere iOS 示例代码

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


【解决方案1】:

查看 SpeakHere 示例。此行获取音频数据:

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

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

要录制,您将执行非常相似的操作。您将写入内存中的缓冲区,而不是写入文件。您首先需要使用malloc 分配它。然后是您传入的AudioQueue 捕获记录的数据,您将该数据复制到缓冲区。随着更多数据被复制,您将记录头或mCurrentPacket 推进到新位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多