繁体   English   中英

iPhone 上的音频

[英]Audio on the iPhone

我正在寻找创建一个模拟物理仪器的应用程序。 我有音频样本,但我希望能够动态增加音调/频率,这样我就不必从太多文件中加载。

知道哪个音频 API 可以做到这一点吗? 我认为是 OpenAL 或音频队列服务,但不确定哪个合适。 也非常感谢任何指向指南/示例代码的链接。

提前致谢。

我在 2009 年走上了这条路,尝试了 Audio Toolkit、Audio Queue Services、openAL,并最终选择了 RemoteIO AudioUnit。

音频工具箱适用于基本的触发音效,但它无法更改频率或循环样本。

音频队列服务可以循环采样,但我能找到的调整采样播放频率的唯一方法是从文件中重新读取数据——非常痛苦。 另外,该框架非常笨重——我只会在尝试 stream 来自 Inte.net 的东西时使用它。

OpenAL 是天赐之物 - 在我接触到不再可用的 Apple“CrashLanding”iPhone 示例应用程序后,不到一个小时就可以启动并运行它。 我发现 OpenAL 非常适合游戏甚至乐器——样本可以预加载,调整频率很容易,循环也没有问题。 对我来说,破坏交易的是几乎每次开始和停止循环样本都会导致讨厌的“砰砰”声。 此外,内置的 3d 定位音频混合器对我来说有点过于占用 CPU。

如果您的乐器不使用循环样本,我建议您先尝试 OpenAL 路线 - 学习曲线不那么令人生畏。 尝试找到“SoundEngine.h”、“CrashLanding”或“TouchFighter”,或查看以下链接:

http://benbritten.com/blog/2008/11/06/openal-sound-on-the-iphone/

由于循环样本对我来说是必需的,所以我最终选择了 AudioUnits(如果您想进行输入或输出,在 iPhone 上称为“RemoteIO”)。 实施起来非常困难 - 与音频队列服务非常相似,因为实施的核心将在“缓冲区回调”中,每秒调用多次以使用原始 SInt16 值填充出站音频缓冲区。

最终,我的乐器在多音符复音、循环样本、无爆音和最小延迟方面表现出色。

不幸的是,RemoteIO 没有很好的文档记录。 Michael Tyson 是该领域最早详细撰写 RemoteIO 的人之一,他的帖子(和评论)对我非常有用:

http://michael.tyson.id.au/2008/11/04/using-remoteio-audio-unit/

祝你好运!

多年后编辑:我已经开源了上面提到的 RemoteIO/AudioUnits 代码: https://github.com/glenn-ba.nett/hexaphone/blob/master/Classes/Instrument.m - 为混乱道歉,我希望能得到一些时间来清理代码和注释。

尝试创建一个音频单元。 我正在做类似的事情,AU 对我来说效果很好。 最初我使用了一个音频队列,因为它更简单(更高级别?)和同步,但它缺乏响应能力,所以我将它转为音频单元。

听起来有点像您实际上是在创建播放 MIDI 文件的波表合成方法。 您也许可以找到适用于 iPhone 的 MIDI 合成器,然后使用您的音频样本构建波表集。 任何时候你想播放音调,你只需将 MIDI 事件发送到 iPhone MIDI 合成器和你加载的波表集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM