检测iOS中声音的持续时间

我正在AVFoundation中使用audio测量,我想知道是否有方法来确定声音的时间长短。 我有我的录音机设置像这样:

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())! } 

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

使用audioRecorderDidFinishRecording委托方法,它的一个参数是AVAudioRecorder一个实例,它具有currentTime属性:

从录音开始以秒为单位的时间。 (只读)

如果要在每次调用updateMeter()时检查录制时间,请使用audioRecorder?.currentTime