0

我正在为 iOS 应用程序设计 AUGraph,希望能在以下方面提供帮助。

如果我想一次播放多个音频文件,每个文件都需要一个音频单元吗?

来自核心音频文档

线性 PCM 和 IMA/ADPCM (IMA4) 音频您可以在 iOS 中同时播放多个线性 PCM 或 IMA4 格式的声音,而不会产生 CPU 资源问题。

AAC、MP3 和 Apple 无损 (ALAC) 音频 AAC、MP3 和 Apple 无损 (ALAC) 声音的播放在 iPhone 和 iPod touch 上使用基于硬件的高效解码。您一次只能播放一种这样的声音。

所以不能同时播放多个 AAC 或 MP3 文件。一次播放多个声音的最佳 LPCM 格式是什么?

这是否也适用于音频单元,如 AudioQueue 文档中所述。

AUGraph 中的音频单元可以处于非活动状态吗?如果 AUGraph 看起来像这样

扬声器/输出 < 录音机单元 < 混音器单元 < 音频文件播放单元数

如果记录器不活动会发生什么,它仍然会拉,但只是不将缓冲区写入文件?

4

2 回答 2

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上开始一个repo,但是太麻烦了。我是一个视觉方面的人,仍然非常害怕 git。好吧,那是很久以前的事了……现在我从命令行使用 git :-)

您可以按原样使用它,也可以提取与音频单元相关的代码并将其适应您的项目。我相信 Cocos Denshion 'Simple Audio Engine' 做了几乎相同的事情,但没有检查源代码。

已知问题 如果为 C++ 异常设置了异常断点,则在调试时,代码会在AUGraphInitialize(). 这是一个“非崩溃”异常,因此您可以单击继续,代码可以正常工作。

要将您的 wav 文件转换为未压缩的 .caf 格式,请在终端上使用以下命令:

%afconvert -f caff -d LEI16 mysoundFile.wav mySoundFile.caf

编辑:所以我毕竟创建了一个 GitHub 存储库: https ://github.com/nicolas-miari/Sound-Engine

于 2012-07-10T09:47:00.680 回答
1

普通常见的 .wav 和 .caf 文件都包含原始 PCM 音频样本,如果已经达到目标采样率,则无需硬件辅助或 DSP 处理即可播放。

当没有音频文件或其他合成数据来馈送正在拉动缓冲区的音频单元时,通常的做法是向其馈送静音缓冲区(或者如果前一个缓冲区以非零幅度结束,则可能会逐渐变为零)。

于 2012-07-10T22:08:07.520 回答