修改 Auriotouch 示例代码以从音频文件中读取数据

Posted

技术标签:

【中文标题】修改 Auriotouch 示例代码以从音频文件中读取数据【英文标题】:Modify Auriotouch sample code to read data from an audio file 【发布时间】:2011-07-28 09:11:23 【问题描述】:

我想修改苹果的 auriotouch 示例代码,以从音频文件生成波形,而不是从麦克风输入渲染波形。我试图这样做,但我无法理解要在哪里以及要进行哪些更改。谁能指导我如何实现它。

谢谢,

【问题讨论】:

嗨..你能解决它吗。如果是这样,你能帮帮我吗? 【参考方案1】:

在渲染回调中查看名为 AudioUnitRender 的函数

每当演讲者需要数据时,就会发生渲染回调。

IIRC A.T.使用此功能只需从麦克风中抓取许多样本

当然,第一轮它会失败,因为没有任何东西在等待

不管怎样,只需注释掉这个函数,而是自己用文件中的样本填充缓冲区(我认为您可能希望提前将其加载到内存中,可能不希望 fileIO 阻塞高优先级线程)

这意味着您可能需要创建某种 AudioFile 类,并在设置渲染回调时传递对此类实例的引用。这样你就可以从这个渲染回调中访问数据(这是一个普通的 C 函数,即不是一个类的成员,所以它没有其他方法来访问类数据——除非你想做一些可怕的事情带有文件级变量)。

确保您创建此 AudioFile* 音频文件 NONATOMIC 如果它是一个属性,您不希望您的渲染回调一直等待,因为其他一些线程在对象内部并因此锁定它。

【讨论】:

以上是关于修改 Auriotouch 示例代码以从音频文件中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

Apple 的 AurioTouch2 示例代码中的“静音”按钮有啥作用?

AudioBufferList 的 AurioTouch 用途

使用 aurioTouch 录制音频单元文件 - AudioStreamBasicDescription 配置问题?

如何使用 Auriotouch 将麦克风的音频输入静音并仅识别设备的内部音频

为啥我们在 aurioTouch 项目中只使用第一个缓冲区

用苹果的 auriotouch 例子计算频率