gpt4 book ai didi

swift - AVAudioPlayer如何重叠播放相同的声音?

转载 作者:可可西里 更新时间:2023-11-01 02:18:05 26 4
gpt4 key购买 nike

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

   func playSound(sound:String){


// Set the sound file name & extension

let soundPath = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource(sound, ofType: "mp3")!)
do {
//Preperation
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
} catch _{
}
do {
try AVAudioSession.sharedInstance().setActive(true)
}
catch _ {
}
//Play the sound
var error:NSError?
do{
audioPlayer = try AVAudioPlayer(contentsOfURL: soundPath)
}catch let error1 as NSError {
error = error1
}

audioPlayer.prepareToPlay()
audioPlayer.play()

}

最佳答案

要使用 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 就不适合了。不过,对于少数人来说,这是一个完全有效的解决方案。

这个例子有两种不同的声音,但对于两种相同的声音,这个想法当然是完全一样的。

关于swift - AVAudioPlayer如何重叠播放相同的声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34764007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com