Подсказка AVAudioPlayer для воспроизведения на основе таймера - PullRequest
1 голос
/ 23 мая 2011

Я пытаюсь настроить сигнал секундомера, который активируется через UISwitch. Я хочу, чтобы сигнал тревоги срабатывал через x секунд после запуска таймера. У меня есть переменная ivar int (timerCount), которая содержит количество прошедших секунд, и я хочу воспроизвести звук на основе этого ivar. Когда таймер запускается и я включаю переключатель, я надеюсь, что игрок выстрелит через 10 секунд, но это не так. Я знаю, что «если заявление» является виновником, потому что, когда я удаляю его, AVPlayer будет воспроизводить файл WAV, когда переключатель включен. Мне просто нужен еще один набор глазных яблок, чтобы посмотреть на это и выяснить, что я пропустил. Вот фрагмент кода:

- (IBAction)timerSound{

    if (voiceSwitch.on){

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"horn"
                                                         ofType:@"wav"];

    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];

    player = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil];

    if (timerCount == 10)

    [self.player play];

    }

    else {
        [self.player stop];
    }
}

1 Ответ

1 голос
/ 23 мая 2011

Вы ищете playAt:.

Пример, основанный на вашем -

- (IBAction)valueChanged:(id)sender {
    UISwitch *aSwitch = (UISwitch*)sender;
    if ( aSwitch.on ) {
        NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"horn"
                                                                  ofType:@"wav"];

        NSURL *fileURL = [NSURL fileURLWithPath:soundFilePath];

        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL 
                                                                error:nil];

        [audioPlayer playAtTime:(audioPlayer.deviceCurrentTime + 3)];
    } else {
        [audioPlayer stop];
    }
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
    [self.theSwitch setOn:NO animated:YES];

    [player release];
}
...