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

Sprite kit 如何在AVAudioPlayer中播放0.5秒的1秒音频效果?,sprite-kit,swift2,avaudioplayer,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

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

您也可以使用
AVAudioEngine()

只需将音频文件放入
AVAudioEngine()
并使用以下参数更改速度:

// The default value is 1.0. The range of supported values is 1/32 to 32.0.
changeAudioUnitTime.rate = 1.0
下面的示例代码:

    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,如果你需要这首歌在其他地方播放一秒钟,那么我的问题是你想如何播放声音,超快还是只播放一半的声音。如果声音只有.5秒,那么我只需进入iTunes并创建一个.5秒的itI剪辑。我希望它能播放得更快,在半秒内,然后我建议切换到使用带有SKAction的SKNode子节点,并使用SKAction.PlaySoundWithFileName播放声音,然后以2倍的速度运行(当然,除非这个声音总是以2x播放,否则我会预生成2x版本,并将节点保持在1x)如果这是您想要采取的路线,我将使用SKAction.playSoundWithFileNamed every interval int来解释这个尝试,并在update()函数中控制时间间隔。