使用AVAudioRecorder测量dB在iOS上限制为96dB

时间:2014-03-24 13:23:14

标签: ios avaudiorecorder bitrate decibel

我正在尝试构建dB测量以解锁应用内的功能。一旦用户达到100dB,功能就应该可用。我目前的实现只能测量高达96dB。根据我的理解,问题与比特率录音有某种关系:16bit只能达到96dB,24bit应能达到144dB(http://www.head-fi.org/t/415361/24bit-vs-16bit-the-myth-exploded)。

dB测量和计算工作正常,我唯一的问题是我的测量值不能超过96dB。我为了获得更高的比特率而设置了更高的比特率,我想我在这里做错了。

我目前对录音机的初始化如下:

NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
                      [NSNumber numberWithFloat: 44100.0],                 AVSampleRateKey,
                      [NSNumber numberWithInt: kAudioFormatAppleIMA4],       AVFormatIDKey,
                      [NSNumber numberWithInt: 1],                         AVNumberOfChannelsKey,
                      //[NSNumber numberWithInt: 24],                         AVEncoderBitRateKey,
                      [NSNumber numberWithInt:24],AVLinearPCMBitDepthKey,
                      [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
                      [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
                      [NSNumber numberWithInt: AVAudioQualityMax],         AVEncoderAudioQualityKey,
                      nil];

NSError *error;

recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:settings error:&error];

提前谢谢。

1 个答案:

答案 0 :(得分:0)

重要的是要理解dB值只是比率的表达式,而不是绝对值。在这种情况下,它是相对于最小值的信号幅度,因此对于16位有符号值,您有20 * log10(2^16) = 96 dB。换句话说,最响亮的信号比最小信号大96 dB。对于24位数据,范围要大得多:20 * log10(2^24) = 144 dB。但是,满量程信号仍然是。 (请注意,更常见的是,我们使用满刻度作为0 dB的引用,并将所有其他值表示为负dB值,但引用完全是任意的。)

混淆的一个常见原因是,当人们谈论声音的声音时,他们会说“dB”但他们实际指的是dB SPL,这是定义的方式响度相对于给定的参考值(20μPa(rms))。不要将此与您在上面计算的dB值混淆,这些值是简单的比率,并且与响度无直接关系。