在Audio Session Cookbook有「Checking if Other Audio is Playing During App Launch」部分。iOS中,如何根據多任務處理其他音頻播放?
我使用MonoTouch的(但隨時給一個Objective-C的答案,該API是一樣的),所以從該文件的代碼看起來是這樣的:
bool otherAudioPlaying = AudioSession.OtherAudioIsPlaying;
if(otherAudioPlaying)
AudioSession.Category = AudioSessionCategory.AmbientSound;
else
AudioSession.Category = AudioSessionCategory.SoloAmbientSound;
其結果是, ,如果我的應用程序是從iPod音樂播放開始的,那麼iPod音樂將繼續播放並阻止我使用硬件音頻解碼器(我不需要)。如果我的應用程序啓動時沒有播放iPod音樂,則可以使用硬件解碼器。
我可以再使用的otherAudioPlaying
值,以確定是否要開始播放自己的音樂。
現在工作在不支持多任務的舊版操作系統就好了。但通過多任務處理,用戶可以離開我的應用程序(將其作爲背景),在iPod上播放音樂,然後重新輸入我的應用程序。然後,他們的iPod音樂將會消失,我的音樂將再次開始播放。
我想什麼有發生的情況是有iPod中的音樂繼續時,我的應用程序返回玩到前臺 - 即使我自己的音樂是玩(和使用硬件解碼器),當我的申請被轉到後臺。
(而且,在相反的 - 如果我的申請是在沒有音樂播放中背景,我想檢測是否我可以開始播放音樂,當它返回)。
我該怎麼做? (最好不要突然切斷我的音頻,保持好的淡出通常發生。)
編輯:我還應該指出,我正在做所有我的音頻工作脫離主線程。
有什麼不對設置AudioSession.category = AVAudioSessionCategoryAmbient,不管其他音頻無論是打還是不? – 2010-10-28 17:36:08
@William如果我將類別設置爲Ambient,那麼我無法將自己的解碼硬件用於我自己的音樂(並且在CPU上使用太多的CPU時間)。 – 2010-10-29 01:12:25