【问题标题】:Get Decibels data from recorded audio in iOS and Objective C从 iOS 和 Objective C 中录制的音频中获取分贝数据
【发布时间】: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


【解决方案1】:

使用 AVAudioEngine 通过在总线上安装分接头并分析数据来解决。

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2018-08-12
    • 1970-01-01
    • 2012-07-16
    • 2015-08-04
    相关资源
    最近更新 更多