2012-10-19 53 views
0

當試圖關閉環境音樂(例如音樂播放器或Spotify)以獲得音效時,我會看到顯示滯後。我正在使用AudioServicesPlaySystemSound來播放效果。我使用以下內容開始會話並在後臺播放音樂。AVAudioSession - 減少iOS背景音量以實現效果

[audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];  

然後我設置的類別播放停止音樂讓位給我的影響

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

,並使用以下方法來重新啓動音樂

[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil]; 

這種感覺愚蠢哈克當音量消失時,setCategory:AVAudioSessionCategoryPlayback會在顯示中產生延遲。

屏蔽背景音樂的正確方法是什麼?

謝謝你,史蒂夫

+0

是否有一些很好的理由,您不接受先生Metavirulent的答案? – matt

+0

嗨馬特,沒有。剛剛趕上做一個網站,並沒有機會回到它的應用程序。將在下週查看並接受/更新 – Steve

+0

等待,您是否可以使用該代碼即時重新配置您的音頻會話?這不適合我,我的類別就像一個Singleton,在會話仍然活動時不會改變。你是否喜歡,停止你的會話,然後開始一個新的? –

回答

2

首先,我不知道爲什麼你的類別設置爲AVAudioSessionCategoryPlayback。除非您確實需要在無聲關閉/手機鎖定的情況下繼續播放音效,否則應該選擇AVAudioSessionCategorySoloAmbient,這樣也可以使背景聲音靜音。一旦完成播放音效,您可以切換回環境。

如果播放真的是您需要的(因爲您有鬧鐘或其他東西),您可以考慮立即切換到播放類別,然後設置kAudioSessionProperty_OverrideCategoryMixWithOthers屬性,以便背景聲音仍在播放,然後將其切換爲關閉狀態如果你想讓它靜音,但你應該首先確保確實需要播放類別。

或者,您是否認爲只是在背景聲音而不是將其靜音?也許你可以留在環境類別中,只需在播放效果時設置kAudioSessionProperty_OtherMixableAudioShouldDuck音頻會話屬性(並在之後重置)即可。這意味着當你做出你的效果時,背景音會減少音量,根據你的應用程序的效果,這可能更合適。

最後但並非最不重要,我從來沒有使用過AudioServicesPlaySystemSound,它可能無法混合或避讓,所以你可能需要切換到AVAudioPlayer

+0

感謝您的答覆球員,對於慢速回復感到抱歉。這幫了很多。 – Steve