AVAudioPlayer UIButton - второе касание останавливает текущее воспроизведение звука - PullRequest
0 голосов
/ 09 марта 2011

У меня есть кнопка UIB, которая при касании воспроизводит аудиофайл. В настоящий момент, дважды нажав кнопку дважды, можно воспроизвести аудиофайл вместо его остановки.

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

-(IBAction) buttonNoisePlay {

        NSString *pathsoundFile = [[NSBundle mainBundle] pathForResource:@"noise" ofType:@"mp4"];
        sound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:pathsoundFile] error:NULL];
        sound.delegate = self;
        sound.numberOfLoops = -1;
        sound.volume = 1;   

            if(sound == nil || sound.playing == NO)  //if not playing
            {

                    [sound play];
            }
            else
            {
                    [sound stop];
            }
}

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

хм, это то, что я делаю, и играет только один раз:

-(void) playSound: (NSString *) strFileName
{       
    if(audioPlayer == nil || audioPlayer.playing == NO)  //check if it's already playing in case they dbl-tapped (or more) b/c we only want to play it once per found item
    {
        //Get the filename of the sound file:
        NSString *urlAddress = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], strFileName];

        //Get a URL for the sound file
        NSURL *url = [NSURL fileURLWithPath:urlAddress];
        NSError *error;

        //Use AVAudioPlayer to play the sound
        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        audioPlayer.numberOfLoops = 0;

        if (audioPlayer == nil)
            NSLog(@"audioPlayer nil Error:%@", [error description]);
        else
            [audioPlayer play];
    }
}

и в шапке:

AVAudioPlayer *audioPlayer;

Вероятно, мне следует также проверить nil перед инициализацией audioPlayer, так что это делается только один раз ... но сейчас - работает.

1 голос
/ 09 марта 2011

Вы можете сделать что-то вроде этого:

-(IBAction) buttonNoisePlay {

    if(sound == nil || sound.playing == NO)  //if not playing
    {
        ...
        //if nil initialize

        [sound play];
    }
    else
    {
        [sound stop];
    }
}
...