我正在为iOS应用程序设计AUGraph,并希望获得以下帮助 .
如果我想一次播放多个音频文件,每个文件是否需要一个音频单元?
来自Core-Audio文档
线性PCM和IMA / ADPCM(IMA4)音频您可以在iOS中同时播放多个线性PCM或IMA4格式声音,而不会产生CPU资源问题 . 适用于AAC,MP3和Apple Lossless(ALAC)声音的AAC,MP3和Apple Lossless(ALAC)音频播放在iPhone和iPod touch上使用高效的基于硬件的解码 . 您一次只能播放一首此类声音 .
因此,无法同时播放多个AAC或MP3文件 . 一次播放多个声音的最佳LPCM格式是什么?
这是否也适用于音频单元,如同在AudioQueue文档中一样 .
AUGraph中的音频单元可以不活动吗?如果AUGraph看起来像这样
扬声器/输出<录音机单元<混音器单元<音频文件播放单元的数量
如果录音机不活动会发生什么,它仍会拉动,但只是不将缓冲区写入文件?
2 回答
没有;你需要使用调音台音频单元 . 检查一下:http://developer.apple.com/library/ios/DOCUMENTATION/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/ConstructingAudioUnitApps/ConstructingAudioUnitApps.html#//apple_ref/doc/uid/TP40009492-CH16-SW1
大多数情况下阅读上面的文档,将示例代码包装在一个类中并创建一对实用程序结构,我从头开始编写“简单声音引擎”:
ttp://nicolasmiari.com/blog/a-simple-sound-engine-for-ios-using-the-audio-unit-framework/(链接到我博客中包含源代码的文章) . 对不起,将博客移至Jekyll / Github并且这篇文章没有成功 .
......我打算在github上开始一个回购,但这太麻烦了 . 我是一个视觉上的人,仍然非常恐慌 . 好的,那是很久以前的......现在我从命令行使用git :-)
您可以按原样使用它,也可以提取与音频单元相关的代码并使其适应您的项目 . 我相信Cocos Denshion的“简单音频引擎”几乎完全相同,但没有检查源代码 .
Known issues 如果为C异常设置了异常断点,则在调试时,代码将在
AUGraphInitialize()
上停止2或3次 . 这是'non-crashing'异常,因此您可以单击“继续”,代码可以正常工作 .要将wav文件转换为未压缩的.caf格式,请在终端上使用此命令:
EDIT: 所以我毕竟创建了一个GitHub仓库:https://github.com/nicolas-miari/Sound-Engine
普通的常见.wav和.caf文件都包含原始PCM音频样本,如果已经达到目标采样率,则无需硬件辅助或DSP处理即可播放 .
当没有音频文件或其他合成数据馈送到拉动缓冲器的音频单元时,通常的做法是将静音缓冲器(或者如果前一个缓冲器以非零振幅结束,则可能为零) .