如何播放与AVAudioPlayer重叠的声音?

时间:2016-01-13 10:19:01

标签: swift audio avaudioplayer overlap

此代码在点击按钮时播放声音,但如果再次按下则取消之前的声音。我不希望发生这种情况我反复按下时希望相同的声音重叠。我相信这可能是因为我在互联网上使用了相同的AVAudioPlayer,但我是swift的新手,想知道每次方法运行时如何创建新的AVAudioPlayer,以便声音重叠。

{{1}}

2 个答案:

答案 0 :(得分:1)

要与AVAudioPlayer同时播放两个声音,您只需为每个声音使用不同的播放器。

在我的示例中,我已经在Viewcontroller中声明了两个玩家playerBoomplayerCrash,并且我通过一个函数填充声音,然后触发戏剧一下子:

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之上的库针对此问题的解决方案。

该库允许相同的声音相互重叠播放。

https://github.com/adamcichy/SwiftySound