如何获取与可可准确的分贝水平?(How to obtain accurate decibel lev

2019-08-01 07:10发布

我们正在创造它记录周围的声音,如果指定分贝的声音十字架采取必要的行动应用程序。

为了实现应用程序的目标,我们正在使用从AudioQueueObject.h下面的方法

- (void) getAudioLevels: (Float32 *) levels peakLevels: (Float32 *) peakLevels {

UInt32 propertySize = audioFormat.mChannelsPerFrame * sizeof (AudioQueueLevelMeterState);
AudioQueueGetProperty(
self.queueObject,
(AudioQueuePropertyID)kAudioQueueProperty_CurrentLevelMeterDB,
self.audioLevels,
&propertySize);

levels[0] = self.audioLevels[0].mAveragePower;
peakLevels[0] = self.audioLevels[0].mPeakPower;
}

我们有以下设置查询

  1. 录制的声音显示了从-60开始在分贝值。 该值继续增加的那一刻声音变得更大。 记录与此对象的最大值是0.0000。 请解释我们如何解释这些值。

按照文件,它说这是我们所得到的值是需要被转换为模拟数字分贝,请建议是否有这样做的任何方式。

提前致谢

Answer 1:

我觉得你的困惑的部分涉及术语分贝:分贝是表示相对于参考(见值的大小对数单位分贝 )。 虽然分贝经常被用来指声压或声级,也有许多不同种类的分贝。

通过kAudioQueueProperty_CurrentLevelMeterDB返回的值是dBFS的(分贝满刻度)。 dBFS的是一个纯数字的测量,其中0表示的最大值的样本可以包含(1.0浮筒,32767为16个样本,等等),和所有其他值将是负的。 因此,与0.5的值的浮子样品将作为自20 *日志10(0.5 / 1.0)= -6.02 -6 dBFS的寄存器

你想要做的是从dBFS的(数字测量)转换为dBu的或dB SPL(包括模拟措施 - dBu的参考0.775伏RMS和分贝SPL至20μPa声压)。

由于分贝SPL不是SI单位,我的意思是20的源极和基准之间测量声压的比率的*日志10如在耳朵处进行测量。 这些是喷气发动机,手提钻,耳语,枪声等给出的正常值

你不能准确地执行所需的转换,因为dBFS的是一个简单的数字信号的值相对于最大价值的度量它可以载有它不承担任何直接关系到dBu的或dB SPL或声压或响度的任何其他措施。

这将有可能与校准系统,以确定这两个值之间的关系,但用于一般消费应用程序,我不知道你如何攻击这一点。 一种可能的方法是测量话筒各种已知频率和声音水平的输入电平,然后将数据关联到你所看到的。



Answer 2:

数字音频由样本值与特定的绝对范围(32767到用于CD-类型的音频,或1.0 -32768到-1.0浮点)。 我会认为可可生产浮点音频数据。

分贝值是体积的相对对数测量。 的0分贝值表示的体积,声如它都不可能,这对应于1.0或-1.0绝对采样值。 此早期问题给出用于转换分贝值,以获得式(增益,而相比之下,分贝,是体积的简单线性乘法器)。 从该式中,-20 dB的分贝值对应于0.1的增益,这意味着你绝对采样值将是0.1或-0.1。 -40分贝为0.01增益的等价物,和-60分贝为0.001增益的等价物。



文章来源: How to obtain accurate decibel level with Cocoa?