iOS:Audio Units vs OpenAL vs Core Audio

P i*_*P i 34 openal core-audio audiounit ios

有人可以向我解释一下OpenAL如何适应iPhone上的声音架构?

似乎有不同级别的API用于处理声音.较高级别的人很容易理解.

但是我的理解变得模糊不清.有Core Audio,Audio Units,OpenAL.

这些之间的联系是什么?openAL是基础,它取决于Core Audio(其中包含作为其低级对象之一的Audio Units)?

XAL似乎没有记录OpenAL,但我可以运行使用其功能的代码.

P i*_*P i 36

这就是我想到的:

底层是Core Audio.具体来说,音频单元.

因此,音频单元构成了基础层,并且在此基础上构建了一些低级框架.整个caboodle被称为Core Audio.

OpenAL是一个多平台API - 创建者试图反映OpenGL的可移植性.一些公司赞助OpenAL,包括Creative Labs和Apple!

因此Apple提供了这个API,基本上是作为Core Audio的薄包装器.我猜这是为了让开发人员轻松地提取代码.请注意,这是一个不完整的实现,因此如果您希望OpenAL执行Core Audio可以执行的操作,它将执行此操作.但否则就不会.

有点违反直觉 - 只是看一下来源,看起来好像OpenAL是较低级别的.不是这样!

  • 还有一个可能有用的东西要知道:"3D混音器[音频]单元是OpenAL构建的基础" - 来自Apple Docs:http://developer.apple.com/library/ios/#DOCUMENTATION/MusicAudio/概念/ AudioUnitHostingGuide_iOS/AudioUnitHostingFundamentals/AudioUnitHostingFundamentals.html (6认同)

inv*_*ame 35

Core Audio涵盖了很多内容,例如读取和写入各种文件格式,在编码之间进行转换,从流中拉出帧等等.大部分功能都被收集为"音频工具箱".Core Audio还提供多个API,用于处理音频流,播放,捕获或两者兼而有之.最低级别的是音频单元,它与未压缩(PCM)音频一起使用,并且具有一些用于应用效果,混音等的好东西.在音频单元上实现的音频队列更容易,因为它们使用压缩格式(不仅仅是PCM)并避免一些线程挑战.OpenAL也在音频单元上实现; 你仍然需要使用PCM,但至少线程并不可怕.不同之处在于,它不是来自Apple,它的编程惯例与Core Audio和iOS的其他部分完全不同(最明显的是,它是一个推送API:如果你想使用OpenAL进行流式传输,你可以查看你的来源,看看他们是否已经耗尽缓冲区并推入新缓冲区;相比之下,音频队列和音频单元是基于拉取的,因为当需要新的样本进行播放时,您会收到回调).

正如您所见,更高级别是媒体播放器和AV基金会等不错的东西.如果您只是在播放文件,这些会更容易,但如果您想要进行某种效果,信号处理等,可能不会给您足够深的访问权限.