iPhone - AVAudioPlayer,kAudioSessionCategory_AmbientSound和iPod音乐

tab*_*ber 1 iphone audio ipod

我在我的app委托中使用以下音频会话:

  AudioSessionInitialize(NULL, NULL, NULL, self);
  UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
  AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);

  AudioSessionSetActive(true);

我希望用户能够播放iPod音乐并同时使用我的应用程序,这很棒,工作正常...我的应用程序退出并允许iPod音乐播放.

我遇到的问题是...在用户退出我的应用程序后,进入iPod应用程序并暂停,当他们回到我的应用程序时,我的声音都没有用.就像它仍然认为iPod会话是活跃的,即使它没有播放任何音乐!

我基本上只是想在iPod音乐暂停后重新激活我的音频会话.既然这样,以后我曾经通过iPod应用程序播放的音乐,我完全无法让我的应用程序的声音回来,除非我重新编译.:( 有人有主意吗?

编辑:我忘了提到我正在使用AVAudioPlayer类的基本实现来播放我的应用程序的音频.

谢谢!

tab*_*ber 7

好吧,我只是想让每个人都贴出来,以防它帮助其他人......我所做的可能是一种hackish,但似乎可以做到这一点!


    UInt32 isPlaying;
    UInt32 propertySize = sizeof(isPlaying);
    OSStatus status;

    // check to see if their iPod music is playing
    status = AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &isPlaying);

    // set the session category accordingly
    if(!isPlaying) {
      NSLog(@"...SoloAmbientSound");
      UInt32 sessionCategory = kAudioSessionCategory_SoloAmbientSound;
      AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    }else{
      NSLog(@"...AmbientSound");
      UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
      AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    }

  • 刚才我发现这个正式的Apple视频片段描述了我正在做的事情!很高兴知道!http://developer.apple.com/videos/iphone/#video-advanced-audiodev (2认同)