7

使用Audio Units时,改变iPhone 上音频播放速度的方法有哪些?每种解决方案的优点/缺点是什么?

我有一个混音器单元和一个 IO 单元。我需要添加另一个单元(例如转换器单元)吗?我应该在哪个(输入或输出)总线上设置哪些音频单元参数?

我目前的设置:

       -------------------------              -------------------------
       |      mixer unit       | -----------> |        IO unit        |
       -------------------------              -------------------------
4

1 回答 1

9

以下所有解决方案都会改变音频的音高(以及播放速度)。要在播放速度更改后纠正音频的音高,您需要使用3rd 方音频库(例如具有 LGPL 许可证的SoundTouch,因此您可以在您的应用程序中使用它,而无需将其打开 -源,或DiracLE或免费的smbPitchShift)。有一个音频单元 ( AUPitch ),可以改变音频的音高,但不适用于 iPhone;仅适用于 Mac。

以下所有解决方案都经过测试,并且可以正常工作...

解决方案#1 [最佳解决方案]

3D 混合器单元:使用 3D 混合器单元代替多通道混合器单元并在输入范围上设置 k3DMixerParam_PlaybackRate。

优点: k3DMixerParam_PlaybackRate 可以在播放音频时实时设置,没有任何剪辑声音或其他副作用。一旦你有音频单元,它也很容易实现。

缺点:会影响音频的音高,但如果您只需要将播放速率更改 +/- 8%,则音高差异并不明显。

解决方案#2

更改采样率:更改混音器单元输出总线上的采样率。更改采样率的工作方式与添加和删除样本非常相似。

优点:如果您想将播放速度乘以整数的一小部分(例如 1.2x),效果很好。

缺点:不能即时设置改变混频器输出的采样率;仅在初始化混音器单元时。影响音频的音高,但如果您只需要将播放速率更改 +/- 8%,音高差异并不明显。

audioDescriptionMixerOutput.mSampleRate = 1.2*kGraphSampleRate;

解决方案#3

添加/删除样本:仅在渲染回调函数中将每秒、第三…

优点:如果您想将音频播放速度加快或减慢 2x、3x、4x 等,效果很好。它也很容易实现。

Disadvantages: You can only multiply the playback speed by an integer factor. Speeding up audio playback by 1.2x for example is not possible by adding or removing samples. Affects the pitch of your audio.

于 2010-07-24T18:51:27.980 回答