当用户点击受尊重的按钮时,我正在播放声音。
我有10个按钮,包含10个音频文件。
我正在使用AVAudioPlayer播放所选声音
AVAudioPlayer *myaudio=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[sounds objectAtIndex:button.tag] ofType:@"mp3"]]error:NULL];
[myaudio play];
现在我有一个问题,如果我在播放前一个声音之前点击另一个按钮,那么两个声音混合在一起并产生噪音。
我需要在完成第一个声音后播放第二个声音。
我的意思是一次只播放一个声音。
我怎么办,请任何人帮助我。
如果这个问题不可理解,请加我评论。
提前感谢你。
答案 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];
}