此代码在点击按钮时播放声音,但如果再次按下则取消之前的声音。我不希望发生这种情况我反复按下时希望相同的声音重叠。我相信这可能是因为我在互联网上使用了相同的AVAudioPlayer,但我是swift的新手,想知道每次方法运行时如何创建新的AVAudioPlayer,以便声音重叠。
{{1}}
答案 0 :(得分:1)
要与AVAudioPlayer同时播放两个声音,您只需为每个声音使用不同的播放器。
在我的示例中,我已经在Viewcontroller中声明了两个玩家playerBoom
和playerCrash
,并且我通过一个函数填充声音,然后触发戏剧一下子:
import AVFoundation
class ViewController: UIViewController {
var playerBoom:AVAudioPlayer?
var playerCrash:AVAudioPlayer?
override func viewDidLoad() {
super.viewDidLoad()
playerBoom = preparePlayerForSound(named: "sound1")
playerCrash = preparePlayerForSound(named: "sound2")
playerBoom?.prepareToPlay()
playerCrash?.prepareToPlay()
playerBoom?.play()
playerCrash?.play()
}
func preparePlayerForSound(named sound: String) -> AVAudioPlayer? {
do {
if let soundPath = NSBundle.mainBundle().pathForResource(sound, ofType: "mp3") {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
return try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: soundPath))
} else {
print("The file '\(sound).mp3' is not available")
}
} catch let error as NSError {
print(error)
}
return nil
}
}
效果很好,但如果您有很多声音可以播放IMO。不过,对于少数人来说,这是一个非常有效的解决方案。
这个例子有两种不同的声音,但当然这个想法与两种不同的声音完全相同。
答案 1 :(得分:0)
仅使用AVAudioPlayer无法找到解决方案。
相反,我发现了一个基于AVAudioPlayer之上的库针对此问题的解决方案。
该库允许相同的声音相互重叠播放。