2009-05-21 120 views
2

我正在使用Stephen Celis的SCListener類來錄製iPhone麥克風音頻電平。我也通過使用AVAudioPlayer播放音頻。例如,用戶按下「播放」以播放在背景中播放的聲音,然後可以選擇吹入麥克風以播放更短的聲音。代碼一切正常,在播放所有聲音時播放所有聲音,但是,當您開始使用SCListener進行偵聽時,AVAudioPlayer音量大大降低。我已經縮小了SCListener源代碼中此行的罪魁禍首:AudioQueueNewInput減少AVAudioPlayer的播放音量

AudioQueueNewInput(& format,listeningCallback,self,NULL,NULL,0,& queue);

我已經絞盡腦汁,無法知道如何將播放音量保持在最高級別,一旦這條線執行完畢。我也和Stephen Celis談過了,他不知道發生了什麼。我猜想,有可能iPhone在使用麥克風時會降低輸出音量,以免引入反饋,但似乎應該有一種方法來禁用該功能。

總結:

  1. 開始播放長的音頻文件與AVAudioPlayer - 100%的體積(大聲)。
  2. 啓用SCListener並開始監聽(調用AudioQueueNewInput)。
  3. 上AVAudioPlayer聲音的輸出音量大大減小
  4. 呼叫[[SCListener sharedListener]停車]處置隊列的
  5. AVAudioPlayer聲音恢復更高回放音量

有沒有人看到這樣的事或對如何保持播放音量更高有什麼想法?我已明確將音量參數設置爲1.0f,以確保增益處於最高級別。

+0

發現在蘋果開發者論壇這個可能的解決方案:默認情況下,蘋果音頻會話設置重新路由播放音頻只有耳機插孔(禁用揚聲器輸出)從麥克風在錄音時同一時間。您必須通過會話屬性啓用揚聲器輸出才能在錄製時將音頻輸出到揚聲器。 – user110481 2009-05-21 13:34:24

回答

0

我並不熟悉Stephen Celis的工作,但如果tposchel的建議不起作用,在調試模式下查看InputQueue的值與OutputQueue的音頻值可能有一定的價值(但這很棘手,這些方法的回調是實時線程)。

這可能是信息性的,它會告訴你操作系統認爲它發送給你的輸出設備(耳機,或內置揚聲器)。

解決此問題的蠻力方法是手動對OutputQueue回調中的值進行標準化(或按比例放大)。這也沒有解決你的根本問題,但可能是一個黑客,直到你找到答案。

1

你可以試試這個:

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);