【发布时间】:2021-12-23 17:28:13
【问题描述】:
我正在尝试从录制的音频样本中获取分贝值,以便制作波形图并处理其峰值。
目前我正在使用AVAudioRecorder 录制音频文件并使用[recorder averagePowerForChannel:0] 访问其数据库值,由计时器调用,但是我面临一个限制。由于我需要尽可能精确,因此我将计时器设置为以 0.001 秒重复,但是在每个刻度处调用 [recorder averagePowerForChannel:0] 会多次输出相同的值。似乎记录器无法更新低于 0.2s 的值。
我该如何克服这个限制?
这是录音机设置:
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];
提前感谢您的帮助!
【问题讨论】:
-
您需要实时还是离线执行此操作? AVAudioRecorder 不是为此而设计的,这些值更多地用于记录 UI 更新,而不是用于处理。您可以尝试降低级别,例如使用 AVAudioEngine。此外,这样的 NSTimer 并不精确,因为它运行在一个有争议的主线程上。
标签: ios objective-c avaudiorecorder