簡體   English   中英

AVAudioSession setCategory成功但沒有任何反應

[英]AVAudioSession setCategory success but nothing happens

我正在使用核心音頻編寫iOS應用程序。 有點奇怪的事。

去做:

AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *err = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers error:&err];
[session setActive:YES error:&err];

我發現一切都很好,背景音樂很躲閃。 然后我嘗試恢復它:

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&err];

沒有錯誤,但背景音樂仍然躲避。 然后我用以下代替:

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:0 error:&err];

有用! 背景音樂消失了!

我只是不明白為什么我的第一次嘗試失敗而第二次嘗試失敗?

在我看來,沒有區別!

您在每次嘗試中都設置了不同的選項。 AVAudioSessionCategoryOptionDuckOthersAVAudioSessionCategoryOptionMixWithOthers0之間存在差異。

AVAudioSessionCategoryOptionMixWithOthers :將此會話中的音頻與來自其他活動會話的音頻混合。

AVAudioSessionCategoryOptionDuckOthers :當來自此會話的音頻播放時,導致來自其他會話的音頻被AVAudioSessionCategoryOptionDuckOthers (音量減小)。

0表示沒有選項。

因此,其他選項需要另一個會話來執行任務。

有關會話選項的更多詳細信息,請參閱Apple文檔

希望這會有所幫助:)

首先,這兩行代碼並不相同。 AVAudioSessionCategoryOptionMixWithOthers實際上具有值1.設置值0意味着您不需要任何類別選項。

其次,目前還不清楚你實際想要實現的目標。 你說你想要躲避其他音頻通道(讓它們以較低音量播放)然后刪除此效果(這將設置AVAudioSessionCategoryOptionMixWithOthers選項)。 但是,然后你通過背景音樂消失來表明你的成功,這完全是另一回事。

編輯

要刪除閃避效果,請嘗試停用閃避會話,而不是在其上設置新類別。

從Apple文檔:

當發生躲避時,設備上的所有其他音頻 - 除了電話音頻 - 音量降低。 使用ducking的應用必須管理其會話的激活狀態。 在播放音頻之前激活音頻會話,並在播放音頻后停用會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM