开发者

How to stop the sound - Cocoa Touch

开发者 https://www.devze.com 2023-03-01 02:28 出处:网络
I have a sound looped, its a rect button, once the user presses the button the sound loops and plays. I want it so once the user has pressed the same button again, the so开发者_StackOverflow社区und st

I have a sound looped, its a rect button, once the user presses the button the sound loops and plays. I want it so once the user has pressed the same button again, the so开发者_StackOverflow社区und stops playing.

This is the code

- (IBAction)threeSound:(id)sender; {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"wav"];
    if (threeAudio) [threeAudio release];
    NSError *error = nil;
    threeAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
    if (error)
        NSLog(@"%@",[error localizedDescription]);
    threeAudio.numberOfLoops = -1;
    threeAudio.delegate = self;
    [threeAudio play];  

}

Thanks


Pretty straight forward...

- (IBAction)threeSound:(id)sender; {
    if (threeAudio && threeAudio.playing) {
         [threeAudio stop];
         [threeAudio release];
         threeAudio = nil;
         return;
    }         
    NSString *path = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"wav"];
    if (threeAudio) [threeAudio release];
    NSError *error = nil;
    threeAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
    if (error)
        NSLog(@"%@",[error localizedDescription]);
    threeAudio.numberOfLoops = -1;
    threeAudio.delegate = self;
    [threeAudio play];  

}


You should separate those two processes into this

`- (void)initSound {
 NSString *path = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"wav"];
NSError *error = nil;
    threeAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
    if (error)
        NSLog(@"%@",[error localizedDescription]);
    threeAudio.numberOfLoops = -1;
    threeAudio.delegate = self;
    [threeAudio prepareToPlay];
    [threeAudio play];
}

-(IBAction)threeSound:(id)sender:(UIButton *)sender{
    if (sender.selected) {
    [threeAudio pause];
    } else {
    threeAudio.currentTime = 0;     
        [threeAudio play];
    }
    sender.selected = !sender.selected;
}`

Note that initSound needs to be called at some point, if you want to start the sound with the button only.. then add

if (!threeAudio) {
       [self initSound];
}

at the beggining of the IBAction

Thats my advice ;)

0

精彩评论

暂无评论...
验证码 换一张
取 消