3 audio cocoa core-audio decibel
我们正在创建一个记录周围声音的应用程序,并在声音超过指定的Decibel时采取必要的操作.
为了实现应用目标,我们使用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;
}
Run Code Online (Sandbox Code Playgroud)
我们有以下一组查询
根据文档,它说我们得到的值是数字分贝,需要转换为模拟,请建议是否有任何方法可以做到这一点.
提前致谢
sbo*_*oth 11
我认为你的混淆部分涉及分贝这个术语:分贝是一个对数单位,表示相对于参考的值的大小(见Decibel).尽管dB经常用于表示声压或声级,但有许多不同类型的分贝.
kAudioQueueProperty_CurrentLevelMeterDB返回的值以dBFS(分贝满量程)表示.dBFS是仅数字测量,其中0表示样本可包含的最大值(浮点数为1.0,16位样本为32767等),所有其他值均为负数.因此,值为0.5的浮点样本将记录为-6 dBFS,因为20*log10(0.5/1.0)= -6.02
您要做的是将dBFS(数字测量)转换为dBu或dB SPL(两种模拟测量 - dBu参考0.775伏RMS和dB SPL参考20μPa声压).
由于dB SPL不是SI单位,因此我指的是在耳朵处测量的源和参考之间的测量声压的比率的20*log10.这些是喷气发动机,手提钻,耳语,枪声等的正常值.
您无法准确执行所需的转换,因为dBFS只是衡量数字信号相对于其可包含的最大值的值 - 它与dBu或dB SPL或任何其他声压或响度测量无直接关系.
使用校准系统可以确定两个值之间的关系,但对于一般消耗的应用程序,我不确定如何攻击它.一种可能的方法是测量各种已知频率和声级的麦克风输入电平,然后将数据与您所看到的相关联.
| 归档时间: |
|
| 查看次数: |
4383 次 |
| 最近记录: |