我正在寻找创建一个模拟物理乐器的应用程序.我有音频样本,但我希望能够动态增加音高/频率,所以我不必从太多文件加载.
知道哪个音频API能够做到这一点?我估计OpenAL或音频队列服务,但不确定哪个是合适的.任何指南/示例代码的链接也非常感谢.
提前致谢.
Gle*_*ett 19
我在2009年走了这条路,尝试了Audio Toolkit,音频队列服务,openAL,最后解决了RemoteIO AudioUnit问题.
音频工具箱适用于基本触发的声音效果,但它无法改变频率或循环样本.
音频队列服务可以循环样本,但我能找到调整样本播放频率的唯一方法是重新读取文件中的数据 - 非常痛苦.此外,该框架非常繁琐 - 我只会在尝试从Internet上传输内容时使用它.
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-barnett/hexaphone/blob/master/Classes/Instrument.m - 为这个烂摊子道歉,我希望有时间来清理代码和注释.
| 归档时间: | 
 | 
| 查看次数: | 4194 次 | 
| 最近记录: |