Переключение звука в фоновом режиме AVFoundation — objective-c

#iphone #objective-c #ios #ios4 #avfoundation

#iPhone #objective-c #iOS #ios4 #avfoundation

Вопрос:

У меня есть массив аудиообъектов, называемых LocalAudio. Для воспроизведения звука я использую AVAudioPlayer . Я реализовал метод делегирования: audioPlayerDidFinishPlaying: , где я помещаю код для переключения следующего звука в моем массиве LocalAudio.

  -(void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
 {
    [self switchTrack:nextAudioIndex];
 }
  

Звук воспроизводится в фоновом режиме, но звук не переключается. Итак, как переключить звук в фоновом режиме?
Для отладки я использую iPad 2.

Ответ №1:

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

РЕДАКТИРОВАТЬ: Пример

- (void) audioplayerdid Завершение воспроизведения: (AVAudioPlayer *) проигрыватель успешно: (BOOL) флаг
{
 если (флаг == НЕТ)
 NSLog (@"Воспроизведение завершено неудачно");

 [текущее время проигрывателя: 0.0];


 [Фоновая версия музыкального проигрывателя];
 Фоновый музыкальный проигрыватель = ноль;


 если (! [музыка одинакова: @ "10"]) {
 [self playMusicWithKey:[NSString stringWithFormat:@"%i", ([музыкальное значение]   1)] timesToRepeat:0];
 }
}

где

- (void) playMusicWithKey:(NSString*)Запись времени музыкальной клавиши:(NSUInteger)Запись времени {

 Ошибка NSError * ошибка;
 NSString *path = [Музыкальная библиотека objectForKey:Музыкальная клавиша];

 // Инициализировать AVAudioPlayer

 если (backgroundMusicPlayer == ноль) {

 backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:путь] ошибка:amp;ошибка];
 [Фоновая настройка музыкального проигрывателя: self];
 [Фоновый музыкальный проигрыватель setVolume: фоновый музыкальный объем];
 Музыкальная длина = фоновый музыкальный проигрыватель.продолжительность;
 }

 // Если объект backgroundMusicPlayer равен нулю, то произошла ошибка
, если (!backgroundMusicPlayer) {
 NSLog (@"ОШИБКА SoundManager: не удалось воспроизвести музыку для клавиши '% @'", музыкальная клавиша);
 Возврат;
 } 

 // Установите, сколько раз должна повторяться эта музыка. -1 означает никогда не останавливаться, пока его не попросят остановиться
 [backgroundMusicPlayer устанавливает количество циклов: время сохранения];

 // Воспроизведение музыки
 [Фоновый музыкальный проигрыватель prepareToPlay];
 [Воспроизведение фоновой музыки];

}

Комментарии:

1. Да, это так, даже заблокировано и в фоновом режиме.

Ответ №2:

Спасибо, Ваня. Я также нашел хорошее решение для людей, которые используют AVPlayer. Работает идеально: http://www.crocodella.com.br/2011/01/using-avplayer-to-play-background-music-from-library /