【发布时间】:2011-03-27 03:05:08
【问题描述】:
我正在将 OpenAL 用于 iPad 的音乐应用程序。它以前运行良好,但现在,将我的设备更新到 iOS 4.3 后,播放时会出现爆裂声/噼啪声。它们在播放多个样本(即和弦)时变得明显,并且发生在新样本的开头,在第一个或第二个样本已经播放之后。除了这些伪影之外,其余的音频输出都是正常的。
我为每个乐器缓冲音频数据,为每个要播放的声音创建一个源,并将源附加到一个缓存的缓冲区。使用 alBufferDataStaticProc() 将缓冲区附加到音频数据样本
我还更改了 AL 上下文的 AL_FREQUENCY 以匹配文件的采样频率(16 khz),但这仅在要播放的样本(源)的 AL_PITCH 值为 1 时解决问题。所以有什么可以确定的就是如果你改变AL_PITCH,你改变了source的输出频率,这将与AL上下文的输出频率不匹配,导致问题
一些代码是从 Finch 那里借来的,它做了很多数据初始化。这是源代码的 URL:https://github.com/zoul/Finch
我期待任何指针。
【问题讨论】:
-
iOS 4.3 OpenAL 重采样器似乎部分损坏。为了避免在操作系统更新后出现此类问题,我转而使用自己的重采样器和比例混音器,然后将生成的混音输入 RemoteIO 音频单元 API。这样出错的可能性较小。
-
使用RemoteIO是否需要重构大量基于OpenAL的合成器代码,还是有大量的1-1翻译?
-
没有 1-1 翻译,AFAIK。这是一个非常不同的 API。 OpenAL 可能是在 RemoteIO 之上构建的几个 API 层。
-
有同样的错误,我确认这是 iOS 4.3 的问题,在 iOS5 中已修复。