2011-07-09 6 views
9

Bir UIbutton düğmesine bir kez basarak bir IBAction ile nasıl ses çalabilir ve AVAudioPlayer düğmesini kullanarak düğmeye tekrar basarak durdurabilir miyim? Ayrıca, ses çaldığında ve olmadığında, UIButton'un durumunu değiştirmek istiyorum.Aynı düğmeyle Oynat/Duraklat [AVAudioPlayer]

İşte benim kod:

- (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]; 
    } 
} 

cevap

13

İşte BOOL Değişkeni kullanan basit bir yöntemdir.

viewDidLoad'da playing = NO değerini ayarlayın.

-(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

aşağıda yöntemi kullanarak oynamak için hazır audioplayer örneğini tutun.

/* 
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]; 
    } 

}