[英]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.