切换音频可以非常快速地打开/关闭

时间:2015-02-15 01:31:59

标签: ios avaudioplayer

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

编辑:为了澄清,我正在寻找与键盘产生的音效一样瞬间和短暂的效果。 UILongPressGestureRecognizer的最小持续时间设置为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
    }
}

现在,如果按下的时间相当长,则可以正常工作,但如果按下它太短,则声音片段永远不会播放。声音文件开头没有空格,所以我知道这不是问题。我也确定手势识别器被调用,因为\\ Some other code执行得很好。

我的问题是,还有其他方法可以让音频更具响应性吗?我需要它能够很快打开和关闭。在其他框架中是否有其他播放方法,或者生成音调的方式会更快?

1 个答案:

答案 0 :(得分:0)

我最终发现这个问题的解决方案并不完美,但我会留在这里,万一有人偶然发现类似的东西。

我创造了一个允许的最小游戏时间,在我的情况下为0.1秒。按下按钮时,NSTimer开始倒计时,当它达到0时,如果触发设置标志的功能。释放按钮时,它会检查标志是否已设置,如果已设置,则停止播放。如果未设置标志,则继续播放,直到计时器到达零。