核心音频指导/入门

Posted

技术标签:

【中文标题】核心音频指导/入门【英文标题】:core audio guidance / primer 【发布时间】:2010-11-13 16:58:48 【问题描述】:

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

在这一点上,我对所有 api 的研究感到很困惑。理想情况下,我想知道如何将两个 mp3 中的多个样本提取到数组中。

然后在一个回调循环中,我想将这些样本混合在一起并将它们发送给扬声器。

苹果开发网站上有一些示例,但我发现它们难以剖析和消化。有人知道某处有一个很好的精简示例吗?

我也无法确定要使用哪个 api。

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

绝对有必要使用混音单元,或者我最好自己编写混音代码(我想要尽可能多的样本控制)。

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

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

【问题讨论】:

【参考方案1】:

过去几年,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”),但尚未发行。

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

【讨论】:

太棒了。我真的很感激崩溃。当我在亚马逊上看到那本核心有声读物时,我真的很兴奋!然后我看到版本直到三月才发布:(。 如果有一本 Core Audio 书籍会很不错。我想说的是,一旦你有了一系列线性 PCM 样本,你就可以混合它们(这是简单的数学运算)并将它们输入 AudioQueue API(我认为只有 iOS)。 @lucius。我认为音频队列对于实时音频处理来说不够好。我至少不得不使用音频 uint,但性能仍然存在问题。【参考方案2】:

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

如果您正在访问存储在 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 是一个示例。

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

终于,learning core audio 这本书显然已经发布了。我强烈建议您耐心地阅读这些章节并使用示例代码。最好花点时间阅读示例,并在开始更复杂的场景之前了解概念。从网络复制和粘贴示例代码并/ 或遵循网络上人们的高级建议可能在开始时会起作用,但以后你会遇到真正令人毛骨悚然的问题,没有其他人会帮助你解决..相信我,我学会了艰难的方式!

【讨论】:

以上是关于核心音频指导/入门的主要内容,如果未能解决你的问题,请参考以下文章

音频编辑服务UI SDK接入指导及常见问题

音频编辑服务UI SDK接入指导及常见问题

视音频数据处理入门:FLV封装格式解析

视音频数据处理入门:FLV封装格式解析

视音频数据处理入门:FLV封装格式解析

视音频数据处理入门:UDP-RTP协议解析