2010-07-24 113 views
7

使用音頻單元當什麼不同的方式改變音頻的播放速度在iPhone上?每種解決方案的優點/缺點是什麼?iPhone:改變播放速度與音頻單元

我有一個調音臺單元和一個IO單元。我是否需要添加其他單元(例如轉換器單元)?我應該設置哪些音頻單元參數,哪些音頻單元在哪個(輸入或輸出)總線上?

我的當前設置:

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

回答

8

下面所有的解決方案都將改變音頻的間距(連同播放速度)。到更正播放速度後音頻的音調您需要使用第三方音頻庫(例如SoundTouch,它具有LGPL許可證,因此您可以在您的應用程序中使用它,而無需使其成爲開放源代碼或DiracLE或免費smbPitchShift)。有一個音頻單元(AUPitch),可以改變音頻的音調,但它的不適用於iPhone;僅適用於Mac。

所有下面的解決方案進行測試和工作...

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

三維混合機單位:取而代之的是多通道的混音器單元使用3D混音器單元,並將k3DMixerParam_PlaybackRate設置爲輸入範圍。

優點: k3DMixerParam_PlaybackRate可設定實時,當你在玩音響,沒有任何剪輯聲音或其他副作用。一旦你有音頻單元,它也很容易實現。

缺點:影響音頻的音高,但如果您只需要將播放速度改變+/- 8%,音高的差異就不會很明顯。

溶液#2

改變採樣率:改變混頻器單元的輸出總線上的採樣率。更改採樣率與添加和刪除採樣非常相似。

優點:如果您想將播放速度乘以整數的一小部分(例如1.2倍),則效果很好。

缺點:更改混頻器輸出的採樣率不能即時設置;僅在初始化混音器單元時。影響音頻的音調,但如果您只需要將播放速率改變+/- 8%,則音高的差異就不明顯。

audioDescriptionMixerOutput.mSampleRate = 1.2*kGraphSampleRate; 

溶液#3

添加/刪除樣品:僅每第二,第三,...音頻樣本傳遞到您的音頻單元(混頻器單元的所述輸入我的情況)在你的渲染回調函數中。

優點:如果你想加快或減慢你的音頻播放速度2倍,3倍,4倍等,這很好用。它也很容易實現。

缺點:您只能將播放速度乘以整數倍。例如,通過添加或刪除樣本不可能將音頻播放速度提高1.2倍。影響音頻的音調。

+0

嘿,我可以得到這樣的任何示例代碼? – Tornado 2011-10-03 12:58:45