Swift SpriteKit在后台播放音频

时间:2015-03-11 20:23:07

标签: ios swift

我有一个需要在后台播放音频的应用... 这是否可以使用Swift和SpriteKit与SKActions ... 或者可能是另一种方式..

向正确的方向轻推会非常有帮助。

2 个答案:

答案 0 :(得分:6)

SKAction非常容易使用声音,但有时你可能想要做更多。

在这种情况下,您可能希望使用AVAudioPlayer代替它。

为了不写自己的"播放器",我建议您使用现有的播放器。这是我已经使用过的一个(SKTAudio):https://github.com/raywenderlich/SKTUtils/blob/master/SKTUtils/SKTAudio.swift

以下是如何使用它:

// For background audio (playing continuously)
SKTAudio.sharedInstance().playBackgroundMusic("yourBackgroundMusic.mp3") // Start the music
SKTAudio.sharedInstance().pauseBackgroundMusic() // Pause the music
SKTAudio.sharedInstance().resumeBackgroundMusic() // Resume the music

// For short sounds
SKTAudio.sharedInstance().playSoundEffect("sound.wav") // Play the sound once

正如您所看到的,您可以播放短音(就像您可能已经使用SKAction所做的那样),甚至可以播放循环播放的背景音乐,因为您正在寻找对

答案 1 :(得分:0)

尝试了几件事之后,我偶然发现了一个合理的解决方案。要循环播放音乐,可以设置SKAudioNode并将AutoPlayedLoop = true设置。然后在加载场景时调用“播放音乐”方法。

现在,如果您想要声音效果,也可以使用SKAudioNode。我发现声音效果开始重复出现,因此为了抵消它,我只是创建了一个播放停止序列。从本质上讲,每次触发声音效果时,它都会运行此序列,因此,仅按预期的那样只听起来一次。但是,声音效果有些中断,因此我创建了大约1秒钟的简单阴影方法并将其添加到序列中。现在,产生的序列已停止播放。每次声音效果按此顺序运行时,休眠的阴影动作都会使其延迟1秒,使其完全播放,然后按预期停止。根据声音效果,您可以根据需要使用休眠阴影操作进行补偿,有时需要较长时间,有时需要较短时间。

好,这是代码。这非常简单,您无需为其创建整个AVPlayer类。

func playerhitfx() {
    let fx:SKAudioNode = SKAudioNode(fileNamed: "playerfx")
    let play: SKAction = SKAction.play()
    let stop: SKAction = SKAction.stop()
    let shade: SKAction = SKAction.colorize(with: UIColor.clear, colorBlendFactor: 1, duration: 1)
    let volume: SKAction = SKAction.changeVolume(to: 3, duration: 0)
    let seq: SKAction = SKAction.sequence([play,shade,stop])
    fx.run(seq)
    fx.run(volume)
    self.addChild(fx)


}

此外,您可以调整所有音频作为AudioNode的音量属性,以在背景音乐和声音效果之间创建良好的音频混合,还可以使某些其他效果高于其他声音。希望这会有所帮助。
顺便说一句,只是要记住,您不能将SKAudioNode转换为AVAudioNode。