2016-12-05 10 views
1

マイクから入力を取得して再生するRemoteIOユニットの設定があります。再生は、ボタンをタップしていつでも有効または無効にすることができます。私の質問は、再生を有効または無効にするための呼び出しは、オーディオユニットの停止、初期化解除、設定、または停止を必要とするかどうかです。&初期化は必要ありません。これは、RIOの実行中に実行時に再生を有効または無効にするために使用するサンプルコードです。実行時のRemoteIO設定

/* Are these two lines required or not???*/ 
[self stopIOUnit]; 
AudioUnitUninitialize(mAudioUnit); 


int flag = enable? 1 : 0; 
// play on io on the output bus 
OSStatus status = AudioUnitSetProperty(mAudioUnit, 
           kAudioOutputUnitProperty_EnableIO, 
           kAudioUnitScope_Output, 
           0, /*output*/ 
           &flag, 
           sizeof(flag)); 
+0

'AudioOutputUnitStart'と' AudioOutputUnitStop'は十分ですか? –

+0

これは問題です。初期化していないか、停止しているか、必要でないかの両方です。 –

答えて

0

が有効になっており、オーディオユニットを無効にするには、AudioOutputUnitStop()AudioOutputUnitStart()を呼び出すのに十分です。ユニットの状態を変更したい場合は、AudioUnitUninitialize()AudioUnitInitialize()が必要です(有効/無効は「状態」とはみなされません)。 AudioUnitUninitialize()documentationから

:オーディオユニットが初期化されている間

通常、(例えば、そのI/Oフォーマットとメモリ割り当てのような)オーディオユニットの状態を変更することはできません。

2

オーディオユニットを停止することは絶対に必要ではありませんが、ユーザーのバッテリ寿命を節約するために再生を停止する場合は、アプリケーションの消費電力を削減します。 Audio Unitを停止しないと、再録音を開始するのに数ミリ秒の遅延が発生するという利点がありますが、これはアプリケーションによっては重要なこともあります。オーディオユニットを停止する代わりに、レコードコールバック内のサンプルを破棄し、再生コールバックでバッファを無音(ゼロ)で埋めることができます。

後で別の設定のオーディオユニットを再初期化する場合にのみ、初期化を行う必要があります。

関連する問題