Swift 3 实时麦克风音量捕获

4
我正在尝试捕获手机麦克风输入的音量级别。我正在设置一个应用程序,让用户创建语音备忘录。我已经设置了代码来记录备忘录并将它们保存在手机上,现在我正在尝试设置声波动画来在用户输入时展示视图。
我已经开始使用 SwiftSiriWaveformView 库,这个库工作得非常好。现在我只需要找出如何捕获麦克风的音量级别。
我已经创建了一个方法。
internal func refreshAudioView(_:Timer) {
    if self.recorder == nil {
        self.endTimer()

        return
    }

    print("Average Power: \(CGFloat(self.recorder.averagePower(forChannel: 0)))")
}

这个方法中添加了一个计时器

@IBAction func startRecordingPressed(_ sender: UIButton) {
    if self.recorder != nil {
        //if here it means that the record button was double clicked
        return
    }
    self.filename = "wnw-voice-memo\(getDateFormatter("dd-MM-y_hmmss").string(from: Date())).m4a"
    self.url = getDocumentsDirectory().appendingPathComponent(self.filename)
    print(self.url)

    let settings = [
        AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
        AVSampleRateKey: 12000,
        AVNumberOfChannelsKey: 1,
        AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
    ]

    do {
        self.recorder = try AVAudioRecorder(url: self.url, settings: settings)
        self.recorder.delegate = self
        self.recorder.record()

        timer = Timer.scheduledTimer(timeInterval: 0.009, target: self, selector: #selector(refreshAudioView(_:)), userInfo: nil, repeats: true)
    } catch {
        //failed to record!
    }
}

然而当我运行应用程序时,平均功率仅显示为Average Power: -160.0

我已经尝试过研究这个问题,但我只找到了其他与从保存文件生成音频波形有关的解决方案,而不是来自实时流。

有人知道如何获取当前麦克风级别吗?

1个回答

4

请将recorder.meteringEnabled = true设置,并在访问peakPowerForChannelaveragePowerForChannel之前,在refreshAudioView中调用recorder.updateMeters()。此外,尝试读取通道0以外的通道1的功率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接