34

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

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

但是我的理解在底部变得模糊不清。有Core Audio、Audio Units、OpenAL。

这些之间有什么联系?openAL 是底层,核心音频(包含作为其较低级别对象之一的音频单元)的基础吗?

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

4

2 回答 2

37

这就是我想出的:

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

所以音频单元构成了基础层,一些低级框架已经建立在此之上。整个 caboodle 被称为 Core Audio。

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

所以 Apple 提供了这个 API,基本上是作为 Core Audio 的薄包装。我猜这是为了让开发人员轻松地提取代码。请注意,这是一个不完整的实现,所以如果你想让 OpenAL 做一些 Core Audio 可以做的事情,它会做的。但否则不会。

有点违反直觉——只看源代码,看起来 OpenAL 的级别较低。不是这样!

于 2010-10-26T17:29:41.297 回答
36

Core Audio 涵盖了很多内容,例如读取和写入各种文件格式、在编码之间进行转换、从流中提取帧等。这些功能的大部分都被收集为“音频工具箱”。Core Audio 还提供了多个 API 用于处理音频流、播放、捕获或两者兼而有之。最低级别的一个是音频单元,它与未压缩 (PCM) 音频一起使用,并且有一些用于应用效果、混音等的好东西。在音频单元上实现的音频队列要容易得多,因为它们可以处理压缩格式(不仅仅是PCM)并让您免于一些线程挑战。OpenAL 也在音频单元之上实现;您仍然必须使用 PCM,但至少线程并不可怕。不同之处在于,由于它不是来自 Apple,

如您所见,更高级别是不错的东西,例如 Media Player 和 AV Foundation。如果您只是播放文件,这些会容易得多,但如果您想做某种效果、信号处理等,可能不会给您足够深入的访问权限。

于 2011-04-18T17:24:50.010 回答