我正在尝试构建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];
提前谢谢。
答案 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
值混淆,这些值是简单的比率,并且与响度无直接关系。