【问题标题】:iPhone: Change playback speed with Audio UnitsiPhone:使用音频单元更改播放速度
【发布时间】:2011-03-20 13:38:49
【问题描述】:

当使用音频单元时,有哪些不同的方法可以改变 iPhone 上音频的播放速度?每种解决方案的优缺点是什么?

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

我目前的设置:

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

【问题讨论】:

    标签: iphone audio core-audio audiounit


    【解决方案1】:

    以下所有解决方案都会改变音频的音高(以及播放速度)。要在播放速度更改后更正音频的音高,您需要使用第 3 方音频库(例如 SoundTouch,它具有 LGPL许可证,因此您可以在您的应用程序中使用它,而无需使其开源,或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 等,效果很好。它也很容易实现。

    缺点:播放速度只能乘以整数倍。例如,通过添加或删除样本无法将音频播放速度提高 1.2 倍。影响音频的音高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2011-01-21
      • 2013-10-07
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多