代码之家  ›  专栏  ›  技术社区  ›  Erik

快速打开/关闭音频播放

  •  0
  • Erik  · 技术社区  · 10 年前

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

    编辑:为了澄清,我正在寻找一种与键盘产生的声音效果一样即时和简短的效果。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 回复  |  直到 10 年前
        1
  •  0
  •   Erik    9 年前

    我最终找到的解决这个问题的方法并不完美,但我将把它留在这里,以防有人遇到类似的问题。

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