我正在尝试从 AVAudio 录音机获取分贝值。这是我目前的代码。我有一个启动录音机的方法,然后是一个读取分贝值的方法。
var recorder: AVAudioRecorder!
全局定义的记录器,然后在此处使用:
func init_recorder() -> Void
{
let recordersettings = [
AVFormatIDKey: Int(kAudioFormatAppleIMA4),
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 1 as NSNumber,
AVLinearPCMBitDepthKey: 16,
AVLinearPCMIsFloatKey: false,
AVLinearPCMIsBigEndianKey: false,
//AVEncoderAudioQualityKey: AVAudioQuality.High.rawValue
]
let filename = NSURL(fileURLWithPath: NSTemporaryDirectory().stringByAppendingString("tmp.caf"))
do
{
recorder = try AVAudioRecorder(URL: filename, settings: recordersettings)
recorder.meteringEnabled = true
recorder.prepareToRecord()
recorder.record()
recorder.updateMeters()
}
catch
{
print("error")
}
}
然后得到我的分贝值
func get_decibels() -> Float
{
recorder.updateMeters()
return recorder.averagePowerForChannel(0)
}
由于某种原因,每次调用它时都会返回 -120.0 的值,我不太清楚为什么。我读过http://b2cloud.com.au/tutorial/obtaining-decibels-from-the-ios-microphone/ http://b2cloud.com.au/tutorial/obtaining-decibels-from-the-ios-microphone/以及其他一些堆栈溢出线程,但大多数示例似乎与我的非常相似。
任何帮助表示赞赏,非常感谢!
初始化 AVAudioSession 后
let session = AVAudioSession.sharedInstance()
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
try session.setActive(true)
try recorder = AVAudioRecorder(url: getDocumentsDirectory(), settings: settings)
并启动录音机
func start() {
recorder?.record()
recorder?.updateMeters()
}
您可以拨打电话获取分贝值
let decibels = recorder.averagePower(forChannel: 0)
从 -120(最小值)到 0。例如,某些咖啡馆的噪音级别为 -20
这是更详细的示例http://www.mikitamanko.com/blog/2017/04/15/swift-how-to-get-decibels/ http://www.mikitamanko.com/blog/2017/04/15/swift-how-to-get-decibels/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)