使用 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 相互播放的声音的主要内容,如果未能解决你的问题,请参考以下文章

ios开发之--AVAudioPlayer制作了一款播放器,耳机有声音,扬声器没声音

iOS 实现后台 播放音乐声音 AVAudioPlayer

使用 AVAudioPlayer 播放声音时出现问题?

使用 AVAudioPlayer 在后台播放声音序列

使用 AVAudioPlayer 播放声音后恢复背景音频

(iphone) 如何使用 AVAudioPlayer 顺序播放声音?