Воспроизведение аудио файлов один за другим? - PullRequest
1 голос
/ 26 января 2012

Я хочу воспроизводить аудиофайлы, но хотел бы воспроизводить их один за другим.Я видел некоторые вещи, но на самом деле это не работает.Например, я хочу, чтобы звук продолжался, «ken» будет воспроизводиться после «lo»:

 -(IBAction)LO:(id)sender{


    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;

    soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"LO", CFSTR ("wav"), NULL);

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);

    }

-(IBAction)KEN:(id)sender {
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"KEN", CFSTR ("wav"), NULL);

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);
 }   

1 Ответ

2 голосов
/ 26 января 2012

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

#pragma mark - AVAudioPlayerDelegate

– (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)success {
    if (success) {
        // last sound finished successfully, play the next sound
        [self playNextSound];
    } else {
        // something went wrong, show an error?
    }
}

/*
 * Play the next sound
 */
- (void)playNextSound {
    // get the file location of the next sound using whatever logic
    // is appropriate
    NSURL *soundURL = getNextSoundURL();
    NSError *error = nil;
    // declare an AVAudioPlayer property on your class
    self.audioPlayer = [[AVAudioPlayer alloc] initWithURL:soundURL error:&error];
    if (nil != error) {
        // something went wrong... handle the error
        return;
    }
    self.audioPlayer.delegate = self;
    // start the audio playing back
    if(![self.audioPlayer play]) {
        // something went wrong... handle the error
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...