检测iOS中声音的持续时间

时间:2016-01-02 05:37:52

标签: ios swift

我在AVFoundation中使用音频测量,我想知道是否可以找出声音的长度。我的录音机设置如下:

func startMeterTimer() {
    levelTimer?.invalidate()
    levelTimer = CADisplayLink(target: self, selector: "updateMeter")
    levelTimer?.frameInterval = 5
    levelTimer?.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
}

func stopMeterTimer() {
    levelTimer?.invalidate()
    levelTimer = nil
}

func updateMeter() {
    readLevels()
    let avgPower = audioRecorder?.averagePowerForChannel(0)
    let peakPower = audioRecorder?.peakPowerForChannel(0)

    if peakPower >= -2 {
        print("CLAP DETECTED")
        soundLogicDelegate?.clapDetected()
    }
 //        print("\(avgPower) + \(peakPower)")
}

func record() -> Bool {
    return (audioRecorder?.record())!
}

记录和startMeterTImer被调用,当我拍手时,即使我只拍了一次,我得到许多CLAP DETECTED的打印语句。我想知道是否有一种方法可以衡量一个方法从第一次被调用以及最后一次被调用时被调用的时间。

1 个答案:

答案 0 :(得分:0)

使用Action.async { Future.failed(new Exception("Foo") } 委托方法,其中一个参数是具有audioRecorderDidFinishRecording属性的AVAudioRecorder实例:

  

自录制开始以来的时间(以秒为单位)。   (只读)

如果您想在每次调用currentTime时检查录制时间,请使用updateMeter()

相关问题