2011-07-09 15 views
9

¿Cómo puedo reproducir un sonido con IBAction presionando UIbutton una vez y pausándolo presionando el botón nuevamente usando AVAudioPlayer? También quiero cambiar el estado de ese UIButton cuando se reproduce el sonido y cuando no lo está.Reproducir/Pausa con el mismo botón [AVAudioPlayer]

Aquí está mi código:

- (IBAction)Beat 
{ 
    if ([Media2 isPlaying]) 
    { 
     [Media2 pause]; 
     [Button17 setSelected:NO]; 
    } 

    else 
    { 
     Path = [[NSBundle mainBundle] pathForResource:@"Beat" ofType:@"mp3"]; 
     AVAudioPlayer *Media2 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:Path] error:NULL]; 
     [Media2 setDelegate:self]; 
     [Media2 play]; 
     [Button17 setSelected:YES]; 
    } 
} 

Respuesta

13

Este es un método simple que usa BOOL Variable.

Conjunto playing = NO en viewDidLoad.

-(void)PlayStop{  
    if (playing==NO) { 
     // Init audio with playback capability 
     [play setBackgroundImage:[UIImage imageNamed:@"hmpause.png"] forState:UIControlStateNormal]; 

     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; 

     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:______ error:&err]; 
     [audioPlayer prepareToPlay]; 

     audioPlayer.delegate=self; 
     [audioPlayer play]; 

     playing=YES; 
    } 
    else if(playing==YES){ 
     [play setBackgroundImage:[UIImage imageNamed:@"Audioplay.png"] forState:UIControlStateNormal]; 

     [audioPlayer pause]; 

     playing=NO; 
    } 
} 
3

Mantenga su instancia audioplayer listo para jugar usando el método siguiente.

/* 
Prepares the audio file to play. 
*/ 
-(void) initWithAudioPath:(NSString *) audioPath { 
    // Converts the sound's file path to an NSURL object 
    NSURL *audioPathURL = [[NSURL alloc] initFileURLWithPath:audioPath]; 

    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioPathURL error:nil]; 
    audioPlayer.delegate = self; 

    [audioPlayer prepareToPlay]; 

    [audioPathURL release]; 
} 

-(void) pausePlaybackForPlayer:(AVAudioPlayer *) player { 
    [player pause]; 
} 

-(void) startPlaybackForPlayer:(AVAudioPlayer *) player { 
    if (![player play]) { 
     NSLog(@"Could not play %@\n", player.url); 
    } 
} 

- (IBAction)Beat { 
    if (audioPlayer.playing == NO) { 
     // Audio player is not playing. 
     // Set the button title here to "stop"... 
     [self startPlaybackForPlayer:audioPlayer]; 
    }else { 
     // Audio player is playing. 
     // Set the button title here to "play"... 
     [self pausePlaybackForPlayer:audioPlayer]; 
    } 

} 
Cuestiones relacionadas