iOS:audio单元与OpenAL与核心audio

有人能向我解释OpenAL如何适应iPhone上的声音模式吗?

似乎有不同级别的API来处理声音。 高层次的人很容易理解。

但是我的理解变得模糊。 有核心audio,audio单元,OpenAL。

这些之间有什么联系? 核心audio(包含作为低级别audio单元之一)是否是openAL的基础?

OpenAL似乎没有被Xcodelogging,但我可以运行使用其function的代码。

这是我所知道的:

基础是核心audio。 具体而言,audio单元。

所以audio单元构成了基础层,并在此基础上构build了一些低级框架。 整个堆放被称为核心audio。

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

所以苹果已经提供了这个API,基本上是作为一个核心audio的薄包装。 我猜这是为了让开发人员轻松地将代码拉过来。 被警告,这是一个不完整的实现,所以如果你想让OpenAL去做一些Core Audio可以做的事情,它就会做到这一点。 但否则它不会。

一种违反直觉的东西 – 只看源头,看起来好像OpenAL是低层次的。 不是这样!

核心audio覆盖了很多东西,比如读取和写入各种文件格式,在编码之间转换,从stream中拉出帧等等。这些function大部分被收录为“audio工具箱”。 核心audio还提供了多个API来处理audiostream,用于播放,捕捉,或两者。 最低级别是audio单元,它与未压缩(PCM)audio一起工作,并且具有用于应用效果,混音等的好东西。在audio单元上实现的audio队列要容易得多,因为它们使用压缩格式PCM),并且避免一些线程挑战。 OpenAL也在audio单元上实现; 你仍然必须使用PCM,但至less线程是不可怕的。 不同之处在于,由于它不是来自Apple,所以它的编程约定与Core Audio以及iOS的其他部分完全不同(最明显的是,它是一个推送API:如果您想使用OpenAL进行stream式传输,请查看源代码用完缓冲区并推入新的缓冲区;相比之下,audio队列和audio单元是基于拉的,因为当需要新的样本播放时会得到一个callback)。

正如你所看到的,更高的水平是像媒体播放器和AV基金会的好东西。 如果你只是在播放一个文件,这样做会容易得多,但是如果你想要做某种效果,信号处理等,可能不会给你足够深的访问权限。