繁体   English   中英

Swift SpriteKit在后台播放音频

[英]Swift SpriteKit playing audio in the background

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

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

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 ),甚至可以播放将在循环中播放的背景音乐。

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

现在,如果你想要一个声音效果,你也可以使用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)


}

此外,您可以将具有所有音频的音量属性调整为音频节点,以在背景音乐和声音效果之间创建良好的音频混合,并且还可以发出某些其他效果。 希望这可以帮助。
顺便说一句,你不能将SKAudioNode转换为AVAudioNode,只是为了记住。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM