使用AVAudioPlayer发出声音

时间:2011-02-24 16:15:09

标签: ios audio avaudioplayer

对,抱歉,如果我看起来像一个菜鸟,但我是xcode的新手。我正在制作一个音板,我有所有的按钮来工作和播放他们的声音。

然而,如果正在播放一个声音,当我按下另一个按钮,而不是停止原始声音时,它只是在它上面播放,所以如果有人知道如何解决这个问题,我就会徘徊?

这是我用于按钮的代码:

- (IBAction)playsound {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Gold" ofType:@"mp3"];
    AVAudioPlayer* myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    myAudio.delegate = self;
    myAudio.volume = 2.0;
    myAudio.numberOfLoops = 0;
    [myAudio play];
}
如果有人可以帮助我,我真的很感激。

感谢。

2 个答案:

答案 0 :(得分:1)

如果其他声音仍在播放,您需要告诉它停止播放。您可能希望在另一个AVAudioPlayer上调用stop方法。所以,就像你在哪里:

[myAudio play];

...在此之前插入一个方法调用,告诉其他声音停止。

[myOtherAudioThatsPlaying stop];
[myAudio play];

也可以浏览AVAudioPlayer documentation

答案 1 :(得分:0)

虽然bobtiki的答案在形式上是正确的,但是如果你想在声音停止后对声音做一些有用的事情,例如再次开始播放它,那么调用stop方法才有意义。因为你只是想摆脱它,我建议玩家只需要取消分配,这会自动使声音停止播放。 所以,而不是

AVAudioPlayer* myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];

向您的班级添加实例变量:

AVAudioPlayer* myAudio;

然后只需使用

  myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];

每次播放新声音时,都会为myAudio分配一个新指针,而旧AVAudioPlayer只会被取消分配。