【发布时间】:2011-04-29 02:42:01
【问题描述】:
在Audio Session Cookbook 中有一个关于“Checking if Other Audio is Playing During App Launch”的部分。
我正在使用 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,不管是否播放其他音频有什么问题?
-
@William 如果我将类别设置为 Ambient,那么我自己就不能将解码硬件用于我自己的音乐(并且在 CPU 上执行此操作会占用过多的 CPU 时间)。
标签: iphone ios ios4 audioqueue audiosession