Tom*_*zki 7 iphone audio core-audio audiounit
使用音频单元时,有哪些不同的方法可以改变iPhone上音频的播放速度?每种解决方案的优点/缺点是什么?
我有一个调音台和一个IO单元.我是否需要添加另一个单元(例如转换器单元)?我应该设置哪些音频单元参数,哪个(输入或输出)总线上哪个音频单元?
我目前的设置:
Run Code Online (Sandbox Code Playgroud)------------------------- ------------------------- | mixer unit | -----------> | IO unit | ------------------------- -------------------------
以下所有解决方案都将改变音频的音高(以及播放速度).要在更改播放速度后更正音频的音高,您需要使用第三方音频库(例如SoundTouch,它具有LGPL许可证,因此您可以在应用中使用它,而不会将其打开 -来源,或DiracLE或免费的smbPitchShift).有一个音频单元(AUPitch),可以改变音频的音高,但它不适用于iPhone ; 仅适用于Mac.
以下所有解决方案都经过测试,并且工作......
解决方案#1 [最佳解决方案]
3D混音器单元:使用3D混音器单元而不是多声道混音器单元,并在输入范围上设置k3DMixerParam_PlaybackRate.
优点: k3DMixerParam_PlaybackRate可以实时设置,同时播放音频,没有任何剪辑声音或其他副作用.一旦你有音频单元,它也很容易实现.
缺点:影响音频的音高,但如果您只需要将播放速率改变+/- 8%,音高的差异就不会明显.
解决方案#2
更改采样率:更改调音台单元输出总线上的采样率.更改采样率与添加和删除采样非常相似.
优点:如果您想将播放速度乘以整数的一小部分(例如1.2倍),则效果很好.
缺点:无法动态设置改变混频器输出的采样率; 仅在初始化混合器单元时.影响音频的音高,但如果您只需要将播放速率改变+/- 8%,音高的差异就不会明显.
audioDescriptionMixerOutput.mSampleRate = 1.2*kGraphSampleRate;
Run Code Online (Sandbox Code Playgroud)
解决方案#3
添加/删除样本:仅在渲染回调函数中将每秒,第三,...音频样本传递到音频单元的输入(在我的情况下为混音器单元).
优点:如果您希望将音频播放速度加快或减慢2倍,3倍,4倍等,则效果很好.它也很容易实现.
缺点:您只能将播放速度乘以整数因子.例如,通过添加或删除样本,无法将音频播放加速1.2倍.影响音频的音高.
| 归档时间: |
|
| 查看次数: |
5504 次 |
| 最近记录: |