2010-11-13 153 views
3

我一直在做一些阅读核心音频的ios 4与建设一个小测试应用程序的目的。核心音频指导/底层

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

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

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

另外我无法确定使用哪个api。

还有extendedaudiofile和音频文件。这些似乎是提取音频的人。我应该使用哪一个?它需要使用混音单元,或者我可以自己做我自己的混音代码(我希望尽可能多的采样控制)。

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

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

回答

5

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

但我的建议,以解决你的任务是这个(警告:我没有做过以下iOS中,只有MacOS的,但我认为这是大致相同):

  1. 使用ExtendedAudioFile(以申报AudioToolbox框架)读取mp3。它的名字就是这么做的,它扩展了AudioFile的功能。即您可以将音频流格式(AudioStreamBasicDescription)分配给eaf,并且当您从中读取音频流格式时,它将转换为该格式(用于使用格式ID“kAudioFormatLinearPCM”和格式标记“kAudioFormatFlagsAudioUnitCanonical”进行进一步处理) 。然后,您使用ExtAudioFile的'ExtAudioFileRead'将转换后的音频读取到AudioBufferList结构中,该结构是AudioBuffer结构(均在CoreAudio框架中声明)的集合,每个通道(通常为两个)都有一个结构。查看文档“音频”部分的“核心音频数据类型参考”,了解AudioStreamBasicDescription,AudioBufferList和AudioBuffer等内容。

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

  3. 音频单元生活在一个AUGraph(在AudioToolbox框架中声明),并且像音频硬件通过一个跳线相互连接。该图还处理您的音频输出。你可以查看关于这个的'PlaySoftMIDI'和'MixerHost'示例代码(实际上,我只是再次查看了MixerHost,我想,这正是你想要做的!)。

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

此外,还会有一本关于Core Audio(由Core Avila和Chris Adamson撰写的'Core Audio')的书,但尚未发布。

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

+0

多数民众赞成在辉煌。我真的很感谢分解。当我看到亚马逊的核心音频书时,我非常兴奋!然后,我看到发行版一直持续到游行:(。 – dubbeat 2010-11-14 19:47:10

+0

Core Audio书很好,我想说,一旦你有了一个线性PCM样本阵列,你可以把它们混合起来(这很简单),然后喂它们进入AudioQueue API(我认为它只是iOS) – lucius 2010-11-22 04:37:17

+0

@lucius。我不认为audioqueue对于实时音频处理是足够好的,我至少不得不使用audio uint,而且我仍然遇到性能问题。 – dubbeat 2010-12-08 20:43:34

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是一个样本

请参阅。我的回答here更多关于iOS音频编程的一般技巧

最后,这本书learning core audio显然现在已经发布了,我强烈建议你耐心的阅读章节并且玩一下示例代码。你的时间与例子,并有概念在跳过你更复杂的场景之前沉浸其中。从网络复制和粘贴示例代码和/或遵循网络上的人的高级建议可能工作在开始的时候,但是之后你会遇到非常棘手的问题,没有其他人会帮助你解决问题。相信我,我学会了艰难的道路!