使用 AVAudioPlayer 相互播放的声音
Posted
技术标签:
【中文标题】使用 AVAudioPlayer 相互播放的声音【英文标题】:Sounds playing over each other using AVAudioPlayer 【发布时间】:2011-02-24 16:15:09 【问题描述】:好吧,对不起,如果我看起来像个菜鸟,但我是 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];
如果有人能帮助我,我将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:如果其他声音仍在播放,您需要告诉它停止。您可能想研究在另一个 AVAudioPlayer 上调用 stop
方法。所以,就像你有的地方:
[myAudio play];
...在此之前插入一个方法调用来告诉其他声音停止。
[myOtherAudioThatsPlaying stop];
[myAudio play];
也可以浏览AVAudioPlayer documentation。
【讨论】:
【参考方案2】:虽然 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
会被释放。
【讨论】:
以上是关于使用 AVAudioPlayer 相互播放的声音的主要内容,如果未能解决你的问题,请参考以下文章