【问题标题】:Swift 3 live microphone levels captureSwift 3 现场麦克风电平捕捉
【发布时间】:2017-07-04 14:48:20
【问题描述】:

我正在尝试捕捉来自手机麦克风的电平。我正在设置一个应用程序,以便用户可以创建语音备忘录。我有代码设置来记录备忘录并将它们保存在手机上我现在正在尝试设置声波以在用户键入时为视图设置动画。

我已经开始使用库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

我已经尝试对此进行研究,但我只找到了与从保存文件而不是从实时流中生成音频波相关的其他解决方案。

有谁知道我如何获得当前的麦克风电平?

【问题讨论】:

    标签: swift swift3 avaudiorecorder


    【解决方案1】:

    设置recorder.meteringEnabled = true 并在refreshAudioView 中调用recorder. updateMeters(),然后再访问peakPowerForChannelaveragePowerForChannel。除了您已经监控的通道 0 之外,还尝试读取通道 1 的功率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多