Переключение звука в фоновом режиме AVFoundation - target-c - PullRequest
0 голосов
/ 02 октября 2011

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

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

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

Ответы [ 2 ]

1 голос
/ 02 октября 2011

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

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

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    if (flag == NO)
        NSLog(@"Playback finished unsuccessfully");

    [player setCurrentTime:0.0];


    [backgroundMusicPlayer release];
    backgroundMusicPlayer = nil;


    if (![music isEqualToString:@"10"]) {
        [self playMusicWithKey:[NSString stringWithFormat:@"%i", ([music intValue] + 1)] timesToRepeat:0];
    }
}

где

- (void) playMusicWithKey:(NSString*)theMusicKey  timesToRepeat:(NSUInteger)theTimesToRepeat {

    NSError *error;
    NSString *path = [musicLibrary objectForKey:theMusicKey];

    // Initialize the AVAudioPlayer

    if (backgroundMusicPlayer == nil) {

                backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
                [backgroundMusicPlayer setDelegate: self];
                [backgroundMusicPlayer setVolume:backgroundMusicVolume];
                musicLenght = backgroundMusicPlayer.duration;
        }

    // If the backgroundMusicPlayer object is nil then there was an error
    if(!backgroundMusicPlayer) {
        NSLog(@"ERROR SoundManager: Could not play music for key '%@'", theMusicKey);
        return;
    }       

    // Set the number of times this music should repeat.  -1 means never stop until its asked to stop
    [backgroundMusicPlayer setNumberOfLoops:theTimesToRepeat];

    // Play the music
    [backgroundMusicPlayer prepareToPlay];
    [backgroundMusicPlayer play];

}
0 голосов
/ 02 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...