有人可以向我解释 OpenAL 如何适应 iPhone 上的声音模式吗?
似乎有不同级别的 API 用于处理声音。更高层次的很容易理解。
但是我的理解在底部变得模糊不清。有Core Audio、Audio Units、OpenAL。
这些之间有什么联系?openAL 是底层,核心音频(包含作为其较低级别对象之一的音频单元)的基础吗?
Xcode 似乎没有记录 OpenAL,但我可以运行使用其功能的代码。
有人可以向我解释 OpenAL 如何适应 iPhone 上的声音模式吗?
似乎有不同级别的 API 用于处理声音。更高层次的很容易理解。
但是我的理解在底部变得模糊不清。有Core Audio、Audio Units、OpenAL。
这些之间有什么联系?openAL 是底层,核心音频(包含作为其较低级别对象之一的音频单元)的基础吗?
Xcode 似乎没有记录 OpenAL,但我可以运行使用其功能的代码。
这就是我想出的:
底层是Core Audio。具体来说,音频单元。
所以音频单元构成了基础层,一些低级框架已经建立在此之上。整个 caboodle 被称为 Core Audio。
OpenAL 是一个多平台 API——创建者正试图反映 OpenGL 的可移植性。一些公司正在赞助 OpenAL,包括 Creative Labs 和 Apple!
所以 Apple 提供了这个 API,基本上是作为 Core Audio 的薄包装。我猜这是为了让开发人员轻松地提取代码。请注意,这是一个不完整的实现,所以如果你想让 OpenAL 做一些 Core Audio 可以做的事情,它会做的。但否则不会。
有点违反直觉——只看源代码,看起来 OpenAL 的级别较低。不是这样!
Core Audio 涵盖了很多内容,例如读取和写入各种文件格式、在编码之间进行转换、从流中提取帧等。这些功能的大部分都被收集为“音频工具箱”。Core Audio 还提供了多个 API 用于处理音频流、播放、捕获或两者兼而有之。最低级别的一个是音频单元,它与未压缩 (PCM) 音频一起使用,并且有一些用于应用效果、混音等的好东西。在音频单元上实现的音频队列要容易得多,因为它们可以处理压缩格式(不仅仅是PCM)并让您免于一些线程挑战。OpenAL 也在音频单元之上实现;您仍然必须使用 PCM,但至少线程并不可怕。不同之处在于,由于它不是来自 Apple,
如您所见,更高级别是不错的东西,例如 Media Player 和 AV Foundation。如果您只是播放文件,这些会容易得多,但如果您想做某种效果、信号处理等,可能不会给您足够深入的访问权限。