从 iOS 和 Objective C 中录制的音频中获取分贝数据
Get Decibels data from recorded audio in iOS and Objective C
我正在尝试从录制的音频样本中获取分贝值,以便制作波形图并处理其峰值。
目前我正在使用 AVAudioRecorder
录制音频文件并通过使用 [recorder averagePowerForChannel:0]
访问其数据库值,由计时器调用,但我面临限制。因为我需要尽可能精确,所以我将计时器设置为以 0.001 秒重复,但是在每个滴答处调用 [recorder averagePowerForChannel:0]
会多次输出相同的值。似乎记录器无法更新低于 0.2 秒的值。
我怎样才能克服这个限制?
这是录音机设置:
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44000.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
然后我设置录音机
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
[recorder setMeteringEnabled:YES];
[recorder prepareToRecord];
[recorder record];
timer = [NSTimer scheduledTimerWithTimeInterval:0.001f target:self selector: @selector(cllBack:) userInfo: nil repeats: YES];
然后在 cllBack 中调用
[recorder updateMeters];
[recorder averagePowerForChannel:0];
在此先感谢您的帮助!
通过在总线上安装分路器并分析数据,使用 AVAudioEngine 解决了问题。
我正在尝试从录制的音频样本中获取分贝值,以便制作波形图并处理其峰值。
目前我正在使用 AVAudioRecorder
录制音频文件并通过使用 [recorder averagePowerForChannel:0]
访问其数据库值,由计时器调用,但我面临限制。因为我需要尽可能精确,所以我将计时器设置为以 0.001 秒重复,但是在每个滴答处调用 [recorder averagePowerForChannel:0]
会多次输出相同的值。似乎记录器无法更新低于 0.2 秒的值。
我怎样才能克服这个限制?
这是录音机设置:
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44000.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
然后我设置录音机
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
[recorder setMeteringEnabled:YES];
[recorder prepareToRecord];
[recorder record];
timer = [NSTimer scheduledTimerWithTimeInterval:0.001f target:self selector: @selector(cllBack:) userInfo: nil repeats: YES];
然后在 cllBack 中调用
[recorder updateMeters];
[recorder averagePowerForChannel:0];
在此先感谢您的帮助!
通过在总线上安装分路器并分析数据,使用 AVAudioEngine 解决了问题。