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