核心音频指导/入门

时间:2010-11-13 16:58:48

标签: ios4 core-audio

我正在为ios 4阅读核心音频,目的是构建一个小测试应用程序。

我对所有api的研究非常困惑。理想情况下,我想知道如何做的是从两个mp3中提取大量样本到数组中。

然后在回调循环中,我想将这些样本混合在一起并发送给发言者。

苹果开发网站上有一些例子,但我发现它们很难被消化和消化。有人知道某处有一个很好的剥离示例吗?

此外,我无法确定使用哪种API。

有extendedaudiofile和音频文件。这些似乎是提取音频的人。我应该使用哪一个?

使用混合装置是绝对必要的,或者我可以自己做混合代码(我希望尽可能多的样品控制)。

我是否需要使用音频队列服务?我听说他们提供的延迟很差,这是真的吗?

最后我必须使用音频会话服务。一个音频应用程序没有它吗?音频会话如何适应整个音频提取和回调?它纯粹只是处理中断吗?

2 个答案:

答案 0 :(得分:5)

Core Audio的文档在过去几年中已经有了很大的改进,但它仍然不完整,有时令人困惑,有时甚至是错误的。我发现框架的结构本身很混乱(AudioToolbox,AudioUnit,CoreAudio,......什么是什么?)。

但我解决你的任务的建议是这样的(警告:我没有在iOS中完成以下操作,只有MacOS,但我认为它大致相同):

  1. 使用ExtendedAudioFile(在AudioToolbox框架中声明)来读取mp3。它正如名称所暗示的那样,它扩展了AudioFile的功能。即您可以将音频流格式(AudioStreamBasicDescription)分配给eaf,当您从中读取时,它将为您转换为该格式(使用音频单元进一步处理您使用格式ID'kAudioFormatLinearPCM'和格式标志'kAudioFormatFlagsAudioUnitCanonical')

  2. 然后,使用ExtAudioFile的'ExtAudioFileRead'将转换后的音频读入AudioBufferList结构,该结构是AudioBuffer结构的集合(均在CoreAudio框架中声明),每个通道一个(通常为两个)。查看文档“音频”部分中的“核心音频数据类型参考”,了解AudioStreamBasicDescription,AudioBufferList和AudioBuffer等内容。

  3. 现在,使用音频单元播放和混合文件,并不难。音频单元似乎是“大事”但它们确实不是。查看'AudioUnitProperties.h'和'AUComponent.h'(在AudioUnit框架中)以获取可用音频单元的描述。在文档中查看“适用于iOS的音频单元托管指南”。这里唯一的问题是iOS没有音频文件播放器单元...如果我没记错的话,你必须手动为音频单元提供样品。

  4. 音频单元位于AUGraph(在AudioToolbox框架中声明),并通过patchbay互连,如音频硬件。该图表还为您处理音频输出。你可以查看关于这个的'PlaySoftMIDI'和'MixerHost'示例代码(实际上,我刚看了一下MixerHost,我想,这正是你想要做的!)。

  5. 经验法则:查看头文件!他们提供比文档更完整和更准确的信息,至少这是我的印象。它可以帮助我们查看上述框架的标题并尝试熟悉它们。

    另外,会有一本关于Core Audio的书(Kevin Avila和Chris Adamson的'Core Audio'),但它还没有发布。

    希望,这一切都有所帮助!祝好运, 塞巴斯蒂安

答案 1 :(得分:0)

有extendedaudiofile和音频文件。这些似乎是提取音频的人。我应该使用哪一个?

如果您访问存储在iPod库中的音频文件,这些都不会起作用。您必须使用AVAssetReader。 (注意:在AVAssetReader文档中..它说明AVAssetReader is not intended for use with real-time sources, and its performance is not guaranteed for real-time operations.我可以说它对我来说很好..我只使用AVAssetReader创建了几个实时应用程序。here是一个样品

有关iOS音频编程的更多一般提示,请参阅我的回答here

最后,书learning core audio现在显然已经发布了。我强烈建议您耐心地阅读章节并使用示例代码。最好花点时间阅读示例,并在跳过更复杂的场景之前将概念放入其中...从Web上复制和粘贴示例代码/或者在网络上的人们提出高级别建议之后可能会在一开始就工作,但是你以后会遇到很多毛茸茸的问题,没有人能帮你解决问题。相信我,我学到了很多东西!