iPhone - AVAudioPlayer, kAudioSessionCategory_AmbientSound и iPod music - PullRequest
1 голос
/ 16 мая 2009

Я использую следующий аудио сеанс в моем делегате приложения:

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

  AudioSessionSetActive(true);

Я хочу, чтобы пользователь мог одновременно воспроизводить музыку с iPod и использовать мое приложение, что замечательно и прекрасно работает ... мое приложение отключается и позволяет воспроизводить музыку iPod.

У меня проблема ... после того, как пользователь выходит из моего приложения, заходит в приложение iPod и делает паузу, когда они возвращаются в мое приложение, ни один из моих звуков не работает. Как будто он все еще думает, что сессия iPod активна, даже если она не воспроизводит музыку!

Я просто хочу повторно активировать мой аудио сеанс после того, как музыка iPod была приостановлена. В настоящее время после того, как я когда-либо воспроизводил музыку через приложение iPod, я не смогу вернуться к звукам моего приложения, пока я не перекомпилирую. :( У кого-нибудь есть идеи?

Редактировать: я забыл упомянуть, что я использую базовую реализацию класса AVAudioPlayer для воспроизведения звука моего приложения.

Спасибо!

1 Ответ

7 голосов
/ 04 июля 2009

Хорошо, просто подумал, что я буду держать всех в курсе, если это поможет кому-то еще ... то, что я сделал, было, вероятно, хакерским, но, похоже, сработало!


    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);
    }

...