私は電話のマイクから来るレベルをキャプチャしようとしています。私はユーザーがボイスメモを作成できるようにアプリを設定しています。メモを記録して電話に保存するコード設定があります。ユーザーが入力しているときに、サウンドウェーブを設定してビューをアニメートしようとしています。スウィフト3つのライブマイクレベルのキャプチャ
非常にうまく動作しているライブラリ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
私はこれを研究しようとしましたが、ライブストリームからではなく、保存ファイルからオーディオ波を生成することに関連する他の解決策しか見つけられませんでした。
どのように私は現在のマイクレベルを得ることができます知っていますか? peakPowerForChannel
& averagePowerForChannel
にアクセスする前に設定recorder.meteringEnabled = true
とrefreshAudioView
コールrecorder. updateMeters()
で
ありがとうございました:) – mic