7

Audio Unitsを使用しているときに、iPhoneでオーディオの再生速度を変更するさまざまな方法は何ですか?各ソリューションの長所/短所は何ですか?

ミキサーユニットとIOユニットがあります。別のユニット(コンバーターユニットなど)を追加する必要がありますか?どのオーディオユニットパラメータをどのオーディオユニットのどの(入力または出力)バスに設定する必要がありますか?

私の現在の設定:

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

1 に答える 1

9

以下の解決策はすべて、オーディオのピッチを (再生速度とともに)変更します。再生速度が変更された後にオーディオのピッチを修正するには、サードパーティのオーディオ ライブラリ( LGPL ライセンスを持つSoundTouchなど)を使用する必要があります。ソース、またはDiracLEまたは無料のsmbPitchShift )。オーディオのピッチを変更できるオーディオ ユニット ( AUPitch ) がありますが、iPhone では使用できません。マック専用。

以下のソリューションはすべてテスト済みで、機能します...

解決策 #1 [最善の解決策]

3D ミキサー ユニット:マルチチャンネル ミキサー ユニットの代わりに 3D ミキサー ユニットを使用し、入力スコープで k3DMixerParam_PlaybackRate を設定します。

利点: k3DMixerParam_PlaybackRate は、オーディオの再生中にリアルタイムで設定でき、サウンドのクリッピングやその他の副作用はありません。また、オーディオ ユニットを導入すれば、実装も簡単です。

短所:オーディオのピッチに影響しますが、再生レートを +/- 8% だけ変更する必要がある場合、ピッチの違いはあまり目立ちません。

解決策 2

サンプル レートの変更:ミキサー ユニットの出力バスのサンプル レートを変更します。サンプル レートの変更は、サンプルの追加と削除と非常によく似ています。

利点:再生速度を整数の分数 (たとえば 1.2x) で乗算する場合に適しています。

短所:ミキサー出力のサンプル レートの変更は、その場で設定できません。ミキサーユニットの初期化時のみ。オーディオのピッチに影響しますが、再生レートを +/- 8% だけ変更する必要がある場合、ピッチの違いはあまり目立ちません。

audioDescriptionMixerOutput.mSampleRate = 1.2*kGraphSampleRate;

解決策 3

サンプルの追加/削除:レンダー コールバック関数のオーディオ ユニット (私の場合はミキサー ユニット) の入力に、毎秒、3 番目、... のオーディオ サンプルのみを渡します。

利点:オーディオの再生速度を 2 倍、3 倍、4 倍などにしたい場合に適しています。実装も簡単です。

短所:再生速度を整数倍にすることしかできません。たとえば、サンプルを追加または削除しても、オーディオ再生を 1.2 倍高速化することはできません。オーディオのピッチに影響します。

于 2010-07-24T18:51:27.980 に答える