如何使用AVAudioplayer一次只播放一个声音

时间:2011-02-11 05:33:06

标签: iphone

当用户点击受尊重的按钮时,我正在播放声音。

我有10个按钮,包含10个音频文件。

我正在使用AVAudioPlayer播放所选声音

AVAudioPlayer *myaudio=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[sounds objectAtIndex:button.tag] ofType:@"mp3"]]error:NULL];
[myaudio play];

现在我有一个问题,如果我在播放前一个声音之前点击另一个按钮,那么两个声音混合在一起并产生噪音。

我需要在完成第一个声音后播放第二个声音。

我的意思是一次只播放一个声音。

我怎么办,请任何人帮助我。

如果这个问题不可理解,请加我评论。

提前感谢你。

3 个答案:

答案 0 :(得分:1)

我解决了这个问题

if (soundplay == 0) {
        myaudio=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[sounds objectAtIndex:x] ofType:@"mp3"]]error:NULL];
        myaudio.delegate = self;
        soundplay = 1;
        [myaudio play];
    }

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *)myaudio successfully:(BOOL)flag {
    soundplay = 0;
    NSLog(@"sound fnished");
}

其中soundplay是整数变量

答案 1 :(得分:0)

@Mahesh你可以创建一个AVAudioPlayer类变量,在IBAction函数中你可以这样做:

if([myaudio playing])
     [myaudio stop];
myaudio=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[sounds objectAtIndex:button.tag] ofType:@"mp3"]]error:NULL];
[myaudio play];

答案 2 :(得分:0)

不要创建AVAudioPlayer的不同对象。为AVAudioPlayer创建单例对象。并且使用此对象只需检查对象是否正在播放。

if([myaudio playing])
{
    [myaudio stop];
    myaudio=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle     mainBundle]pathForResource:[sounds objectAtIndex:button.tag] ofType:@"mp3"]]error:NULL];
    [myaudio play];
}