我需要在函数中插入一个代码,当调用时播放一个声音。
问题是,函数的调用速度比声音持续时间快,因此,声音的播放次数比函数调用的次数少。

function keyDownSound(){
   NSSound(named: "tennis")?.play()
}

问题是nssound只有在尚未播放时才开始播放。有什么解决办法吗?

最佳答案

问题的根源是init?(named name: String)返回相同的NSSound实例。您可以复制NSSound实例,然后几个声音将同时播放:

function keyDownSound(){
    NSSound(named: "tennis")?.copy().play()
}

另一种方式-播放完毕后重新开始播放声音。为此,您需要实现sound(sound: NSSound, didFinishPlaying aBool: Bool)委托方法。例如:
var sound: NSSound?
var playCount: UInt = 0

func playSoundIfNeeded() {
    if playCount > 0 {
        if sound == nil {
            sound = NSSound(named: "Blow")!
            sound?.delegate = self
        }

        if sound?.playing == false {
            playCount -= 1
            sound?.play()
        }
    }
}

func keyDownSound() {
    playCount += 1
    playSoundIfNeeded()
}

func sound(sound: NSSound, didFinishPlaying aBool: Bool) {
    playSoundIfNeeded()
}

关于swift - 同时播放NSSound更多次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35976676/

10-09 16:12