如何 stop/cancel 在 Swift 中播放 SoundFileNamed?
How to stop/cancel playSoundFileNamed in Swift?
我正在尝试制作一个按钮,按下时会播放声音,再次按下时声音会停止。
我正在使用 playSoundFileNamed: runAction: withKey:
和 removeActionForKey
,但它不起作用。
我的另一个问题是,是否有一种方法不仅可以停止声音,还可以暂停它(以便它从暂停的同一部分开始,而不是从头开始)。
我在 stack overflow 看到过类似的话题,但还没有找到我的问题的答案。提前谢谢你。
import SpriteKit
import AVFoundation
var firesoundon = false
private var backgroundMusicPlayer: AVAudioPlayer!
class GameScene2: SKScene {
override func didMoveToView(view: SKView) {
setUpScenery()
}
private func setUpScenery() {
//BACKGROUND
let background = SKSpriteNode(imageNamed: backgroundImage, normalMapped: true)
addChild(background)
//FIRE BUTTON
var firePath = UIBezierPath()
firePath.moveToPoint(CGPointMake(0, 0))
firePath.addCurveToPoint(CGPointMake(115, 215), controlPoint1: CGPointMake(5, 170), controlPoint2: CGPointMake(90, 190)) ....
//^我只是在这里减少了很多路径 - 按钮被绘制并且它是 pushable/workable。
let fireNode = SKShapeNode(path: firePath.CGPath, centered: false)
fireNode.alpha = 0.2
fireNode.position = CGPointMake(size.width/2, 0)
fireNode.name = "fireNode"
self.addChild(fireNode)
}
//所以,这对我来说是一个主要的失败:
func fireturnonoff () {
if firesoundon == false {
var playguitar = SKAction.playSoundFileNamed("guitar.wav", waitForCompletion: true)
runAction(playguitar, withKey: "soundsison")
firesoundon = true
println("firesoundon is == \(firesoundon)")
}
else if firesoundon == true {
removeActionForKey("soundsison")
println("REMOVED")
firesoundon = false
println("firesoundon is == \(firesoundon)")
}
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let touch = touches.first as? UITouch
let touchLocation = touch!.locationInNode(self)
let node: SKNode = nodeAtPoint(touchLocation)
if node.name == "fireNode" {
fireturnonoff()
}
}
}
使用AVAudioPlayer。它允许您开始、停止、暂停、控制音量、循环次数和其他功能。
现在您可以通过为其分配键字符串然后使用 removeActionForKey
来停止播放声音动作,如下所示:
let action: SKAction = SKAction.playSoundFileNamed("sounds/boom.wav", waitForCompletion: true)
self.runAction(action, withKey:"die-sound")
// later you do:
self.removeActionForKey("die-sound")
我测试成功
新功能已添加到 Swift 的 SKActions:
class func stop() -> SKAction
它创建一个动作,告诉音频节点停止播放。
此操作只能在 SKAudioNode 对象上执行。音频停止,如果重新启动,则从头开始。此操作不可逆。
遗憾的是,仅在 iOS 9.0 及更高版本中可用。
我正在尝试制作一个按钮,按下时会播放声音,再次按下时声音会停止。
我正在使用 playSoundFileNamed: runAction: withKey:
和 removeActionForKey
,但它不起作用。
我的另一个问题是,是否有一种方法不仅可以停止声音,还可以暂停它(以便它从暂停的同一部分开始,而不是从头开始)。 我在 stack overflow 看到过类似的话题,但还没有找到我的问题的答案。提前谢谢你。
import SpriteKit
import AVFoundation
var firesoundon = false
private var backgroundMusicPlayer: AVAudioPlayer!
class GameScene2: SKScene {
override func didMoveToView(view: SKView) {
setUpScenery()
}
private func setUpScenery() {
//BACKGROUND
let background = SKSpriteNode(imageNamed: backgroundImage, normalMapped: true)
addChild(background)
//FIRE BUTTON
var firePath = UIBezierPath()
firePath.moveToPoint(CGPointMake(0, 0))
firePath.addCurveToPoint(CGPointMake(115, 215), controlPoint1: CGPointMake(5, 170), controlPoint2: CGPointMake(90, 190)) ....
//^我只是在这里减少了很多路径 - 按钮被绘制并且它是 pushable/workable。
let fireNode = SKShapeNode(path: firePath.CGPath, centered: false)
fireNode.alpha = 0.2
fireNode.position = CGPointMake(size.width/2, 0)
fireNode.name = "fireNode"
self.addChild(fireNode)
}
//所以,这对我来说是一个主要的失败:
func fireturnonoff () {
if firesoundon == false {
var playguitar = SKAction.playSoundFileNamed("guitar.wav", waitForCompletion: true)
runAction(playguitar, withKey: "soundsison")
firesoundon = true
println("firesoundon is == \(firesoundon)")
}
else if firesoundon == true {
removeActionForKey("soundsison")
println("REMOVED")
firesoundon = false
println("firesoundon is == \(firesoundon)")
}
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let touch = touches.first as? UITouch
let touchLocation = touch!.locationInNode(self)
let node: SKNode = nodeAtPoint(touchLocation)
if node.name == "fireNode" {
fireturnonoff()
}
}
}
使用AVAudioPlayer。它允许您开始、停止、暂停、控制音量、循环次数和其他功能。
现在您可以通过为其分配键字符串然后使用 removeActionForKey
来停止播放声音动作,如下所示:
let action: SKAction = SKAction.playSoundFileNamed("sounds/boom.wav", waitForCompletion: true)
self.runAction(action, withKey:"die-sound")
// later you do:
self.removeActionForKey("die-sound")
我测试成功
新功能已添加到 Swift 的 SKActions:
class func stop() -> SKAction
它创建一个动作,告诉音频节点停止播放。 此操作只能在 SKAudioNode 对象上执行。音频停止,如果重新启动,则从头开始。此操作不可逆。
遗憾的是,仅在 iOS 9.0 及更高版本中可用。