非常快速地切换音频播放 on/off

toggle audio play back on/off very quickly

我正在处理一个只有一个视图的简单项目。当用户按下视图时,应该播放一个音调,当他们抬起手指时应该停止。基本上像摩尔斯电码。

编辑:为了澄清起见,我正在寻找一种与键盘发出的声音效果一样即时和短暂的效果。 UILongPressGestureRecognizer 的 Min Duration 设置为 0.01,因此它立即有效启动。

我现在的设置方式是这样的:

var player = AVAudioPlayer()

override func viewDidLoad() {
    super.viewDidLoad()

    // Set up sound files
    var fileLocation = NSString(string: NSBundle.mainBundle().pathForResource("Eb", ofType: "mp3")!)
    var error:NSError? = nil

    player = AVAudioPlayer(contentsOfURL: NSURL(string: fileLocation), error: &error)
    player.prepareToPlay()
}


@IBAction func pressed(gesture: UILongPressGestureRecognizer) {

    switch gesture.state{

    case .Began:
        player.play()

        //Some other code

    case .Ended:
        player.pause()

        //Some other code

    default:
        return
    }
}

现在,如果按键时间适中,则此方法有效,但如果按键时间过短,则声音片段不会播放。声音文件的开头没有空白 space,所以我知道这不是问题所在。我也确定手势识别器正在被调用,因为 \ Some other code 执行得很好。

我的问题是,是否有其他方法可以使音频响应更快?我需要它能够非常快速地打开和关闭。其他框架中是否有其他播放方法或生成音调的方法会更快?

我最终找到的这个问题的解决方案并不完美,但我会把它留在这里,以防有人偶然发现类似的问题。

我设置了允许的最短播放时间,在我的例子中是 0.1 秒。当按钮被按下时,NSTimer 开始倒计时,当它达到 0 时,if 触发一个设置标志的函数。当按钮被释放时,它会检查标志是否已设置,如果是,则停止播放。如果未设置标志,播放将继续,直到计时器达到零。