我一直在阅读 ios 4 的核心音频,目的是构建一个小测试应用程序。
目前我对所有 api 的研究感到非常困惑。理想情况下,我想知道如何从两个 mp3 中提取多个样本到数组中。
然后在回调循环中,我想将这些样本混合在一起并将它们发送到扬声器。
苹果开发网站上有一些示例,但我发现它们很难剖析和消化。有人知道某个地方有一个很好的精简示例吗?
我也无法确定要使用哪个 api。
有扩展音频文件和音频文件。这些似乎是用于提取音频的。我应该使用哪一个?
绝对有必要使用混合单元,或者我最好做我自己的混合代码(我想要尽可能多的样本控制)。
我需要使用音频队列服务吗?我听说它们的延迟很差,这是真的吗?
最后我必须使用音频会话服务。如果没有它,音频应用程序还能工作吗?音频会话如何适应整个音频提取和回调?纯粹只是为了处理中断吗?
在过去的几年里,Core Audio 的文档已经有了很大的改进,但仍然不完整,有时令人困惑,有时甚至是错误的。而且我发现框架本身的结构相当混乱(AudioToolbox、AudioUnit、CoreAudio,...什么是什么?)。
但我对解决你的任务的建议是这样的(警告:我没有在 iOS 中完成以下操作,仅在 MacOS 中完成,但我认为大致相同):
使用 ExtendedAudioFile (在 AudioToolbox 框架中声明)读取 mp3。正如其名称所示,它扩展了 AudioFile 的功能。 IE。您可以将音频流格式 (AudioStreamBasicDescription) 分配给 eaf,当您从中读取时,它会为您转换为该格式(为了进一步处理音频单元,您可以使用格式 ID 'kAudioFormatLinearPCM' 和格式标志 'kAudioFormatFlagsAudioUnitCanonical') 。
然后,您使用 ExtAudioFile 的“ExtAudioFileRead”将转换后的音频读入 AudioBufferList 结构,该结构是 AudioBuffer 结构的集合(均在 CoreAudio 框架中声明),每个通道一个(通常是两个)。查看文档音频部分中的“核心音频数据类型参考”,了解 AudioStreamBasicDescription、AudioBufferList 和 AudioBuffer 等内容。
现在,使用音频单元来播放和混合文件,这并不难。音频单元看似“大事”,但实际上并非如此。查看“AudioUnitProperties.h”和“AUComponent.h”(在 AudioUnit 框架中)以获取可用音频单元的描述。查看文档中的“iOS 音频单元托管指南”。这里唯一的问题是没有适用于 iOS 的音频文件播放器单元...如果我没记错的话,您必须手动向音频单元提供样本。
音频单元位于 AUGraph(在 AudioToolbox 框架中声明)中,并通过插线板像音频硬件一样互连。该图还为您处理音频输出。您可以查看与此相关的“PlaySoftMIDI”和“MixerHost”示例代码(实际上,我刚刚再次查看了 MixerHost,我认为这正是您想要做的!)。
经验法则:查看头文件!它们提供比文档更完整和准确的信息,至少这是我的印象。查看上述框架的标头并尝试熟悉它们会有很大帮助。
此外,还将有一本关于 Core Audio 的书(Kevin Avila 和 Chris Adamson 的“Core Audio”),但尚未发布。
希望这一切能有所帮助!祝你好运,
塞巴斯蒂安
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)