如何在AVAudioPlayer中播放1秒的音频效果0.5秒?

时间:2015-12-18 13:18:03

标签: sprite-kit swift2 avaudioplayer

我正在使用以下代码在我的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秒的间隔创建一个精灵时都会调用它。由于声音效果比创建间隔长,因此效果仅播放一次。我相信减少效果持续时间可以解决这个问题,尽管我对其他解决问题的方法持开放态度。

1 个答案:

答案 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