我正在使用以下代码在我的Swift SpriteKit游戏中播放声音效果。
func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer {
let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
let url = NSURL.fileURLWithPath(path!)
var audioPlayer:AVAudioPlayer?
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: url)
} catch {
print("NO AUDIO PLAYER")
}
return audioPlayer!
}
声音效果持续时间是秒,我每次以0.5秒的间隔创建一个精灵时都会调用它。由于声音效果比创建间隔长,因此效果仅播放一次。我相信减少效果持续时间可以解决这个问题,尽管我对其他解决问题的方法持开放态度。
答案 0 :(得分:0)
您也可以使用AVAudioEngine()
只需将您的audioFile放入AVAudioEngine()
并使用以下参数更改速度:
// The default value is 1.0. The range of supported values is 1/32 to 32.0.
changeAudioUnitTime.rate = 1.0
下面的ExampleCode:
var audioPlayer: AVAudioPlayer!
var audioEngine = AVAudioEngine()
var audioFile: AVAudioFile!
var audioPlayerNode: AVAudioPlayerNode?
audioPlayer = try AVAudioPlayer(contentsOfURL: currentAudio!)
audioFile = try! AVAudioFile(forReading: audioPlayer!.url!)
audioEngine.attachNode(audioPlayerNode!)
let changeAudioUnitTime = AVAudioUnitTimePitch()
// The default value is 1.0. The range of supported values is 1/32 to 32.0.
changeAudioUnitTime.rate = 1.0
audioEngine.attachNode(changeAudioUnitTime)
audioEngine.connect(audioPlayerNode!, to: changeAudioUnitTime, format: nil)
audioEngine.connect(changeAudioUnitTime, to: audioEngine.outputNode, format: nil)
audioPlayerNode!.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
do {
try audioEngine.start()
} catch {
print("audio Engine could not be started: \(error)")
}
// play the costumized sound
audioPlayerNode!.play()
希望这个例子可以帮助你....如果我理解你错了,请随时纠正我。此致,Alex