我有一个音频回调,用于访问bufferList并分析音频。
我也需要录制这个音频。首先,在同一个回调中进行录音是明智的吗?
e.g。 memcpy(void *dest, ioData->mBuffers[0].mData, int byteCount);
或者录音是否有自己的回调?
无论哪种方式,这个memcpy都是正确的方法吗?如何将这个音频写入文件?
一旦音频输入完成并将数据传递给文件编写器,是否应将totalByteCount与void * dest上的指针算法一起使用?
在核心音频渲染回调中录制音频的最佳方法是什么?
答案 0 :(得分:0)
我认为您可以为输入和输出音频流分别设置两个不同的回调。通常,当您打开特定流时,可以输入或输出您也指定回调。在回调中,您可以进行所有音频处理,前提是您可以满足回调截止日期,否则您可能最终错过音频样本。更好的方法是使用某种循环缓冲区,它只是填充缓冲区的回调。您可以在主线程中执行所有其他处理(以及录制)。 我不确定你使用的音频框架。我在我的项目中使用了portaudio并且工作正常。 Portaudio还提供无锁循环缓冲区,可在回调内部使用,无需线程锁定机制。 以下链接可能会对您有所帮助。
http://portaudio.com/docs/v19-doxydocs/paex__record_8c.html.
http://portaudio.com/docs/v19-doxydocs/paex_ocean_shore_8c.html