音频 PCM 的数据中包含负值,但是分贝转换公式中的值要求是正值,请问这样是否存在冲突呢?

2020-05-04 16:31:11 +08:00
 SystemLight

音频 PCM 的数据中包含负值,但是分贝转换公式中的值要求是正值,请问这样是否存在冲突呢?

我通过 python 采集到的 sample 值是包含负值的,这样的话如何将这个振幅值转成分贝值,还有 adobe Audition 中的时域波形图基准线为何是负无穷而不是 0 呢,看起来怪怪的。

4376 次点击
所在节点    程序员
29 条回复
SystemLight
2020-05-04 21:07:30 +08:00
@thedrwu 基准线是因为采样的数值为 0 时,得到的分贝是负无穷,而基准线两边就是分别代表采样的振幅值的正负换算过来的分贝值是吧。
SystemLight
2020-05-04 21:16:17 +08:00
@liuzhedash 诶,有点糊涂了,第一个文章里面提到:如果将声音采样大小增加一倍到 16bit,产生的动态范围则为 96 分贝,计算公式如下:
dB = 20 * log(65536)

他在 16 位的 sample width 用的不就是 65536 么
thedrwu
2020-05-04 21:41:33 +08:00
@SystemLight #21
你想清楚你的目的是什么。分贝本身只是一个功率比例的 log 。

#22
和带不带符号无关,多一个 bit 你能测的信号范围变成了原来的 2 倍(=6dB )。(符号位也使范围增两倍,只不过人为地解释成了符号)
SystemLight
2020-05-04 22:00:45 +08:00
@thedrwu 感觉好像是离目标越来越远了,哈哈,我其实呢想实现这个图片效果,https://www.buzzsprout.com/player/wave/10,看这个最高的高度是 60,我的想法就是把分贝固定到 0 到 60 分贝这个范围,然后对整个音频的帧均匀抽样出 200 个片段,然后根据这个片段中每个的振幅值算出对应的分贝大小,决定每个小块的大小,这样的思路是否合理正确呢,求指点。
ssdde
2020-05-04 22:57:38 +08:00
知乎也能做图床?稳吗?
thedrwu
2020-05-04 23:17:13 +08:00
@SystemLight
链接里只有个窄窄的小图。
忽略人耳感官的基准曲线和 masking 之类的机制,听到的音量和振幅大致是对数关系的。
如果画图不需要精确的数值,坐标可以比较随意。

稍微比例正确地画那张窄窄的小图,可以计算每个小区间的平均功率(或绝对值平均,如果时间均匀,反正开对数之后只差个 2 ),取了对数再缩放到 60 的区间,比如把最大的对数功率定为 60,小于某数字(听力的阈值)的砍成 0 。
thedrwu
2020-05-04 23:21:33 +08:00
@SystemLight
再简单点,算个平均 most significant bit 的位数,不需要真正的取对数。
xcstream
2020-05-04 23:33:22 +08:00
分贝 为什么不能是负的
SystemLight
2020-05-05 00:02:58 +08:00
@thedrwu 好的,感谢指教

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/668467

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX