2016-12-05 123 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

停止音頻單元並不是絕對必要的,雖然它確實降低了應用程序的功耗,因此應該在停止播放任何時間長度的情況下完成,以節省用戶的電池壽命。不停止音頻單元具有的優點是,再次開始記錄將發生許多毫秒的較低延遲,這在一些應用中可能是重要的。停止音頻單元的替代方法是放棄記錄回調中的樣本,並在播放回調中填充緩衝區中的靜音(零)。

如果稍後要用不同的配置重新初始化音頻單元,則只需要執行未初始化。