如何在 AS3 中将声音放大指定的分贝数?

Posted

技术标签:

【中文标题】如何在 AS3 中将声音放大指定的分贝数?【英文标题】:How do I amplify sounds by a specified number of decibels in AS3? 【发布时间】:2010-11-05 00:45:54 【问题描述】:

几天前,这是我的问题,我找到了答案。也许这会对其他人有所帮助。

A.问题的第一部分:你能用Flash放大声音吗? SoundTransform 的 AS3 文档说明了音量属性:

"音量,范围从0(静音)到1(全音量)。

从表面上看,这意味着您只能使声音更安静。事实上,如果您提供大于一 (1.0) 的值,声音将被放大。你冒着使声音饱和和质量变差的风险,但你可以做到,而且对于语音,你可以逃脱很多。 (音乐不那么宽容,所以实验一下。这种方法不做动态压缩,更适合音乐。)

B.问题的第二部分:你做事的顺序。

右:

soundTransform = new SoundTransform();
soundTransform.volume = volume * volumeAdjustment;
audioChannel.soundTransform = soundTransform;

错误:

soundTransform = new SoundTransform();
audioChannel.soundTransform = soundTransform;
soundTransform.volume = volume * volumeAdjustment;

我在 CS3 和 CS4 中做了一些测试,得到了不同的结果。在 CS3 中,我可以在“audioChannel.soundTransform = soundTransform;”之后的变换上设置音量一切都很好。但在 CS4 中它没有效果。我怀疑 CS3 使用按引用传递来设置 soundTransform,而 CS4 使用按值传递语义并复制传递给它的对象。 CS4 方法设计得更好,但确实破坏了我在 CS3 中运行良好的代码。

C.最后一个问题是如何将分贝值转换为可以乘以音量的因子,从而将声音放大(或静音)所需的量。

var multiplier:Number = Math.pow(10, decibels / 20); // Power vs. amplitude

请注意,“分贝”可能是正数(用于放大)或负数(用于降低噪音)。如果分贝为零,则不会发生变化。

3 分贝的值将(接近近似值)加倍幅度。 10 分贝的值将使音量增加十倍(完全正确)。

【问题讨论】:

您应该将此问题的答案部分移动到下面的实际答案中,这样它就不会显示为未回答的问题。 【参考方案1】:

您的分贝计算实际上应该使用 20,而不是 10:

var multiplier:Number = Math.pow(10, decibels / 20);

Digital audio is amplitude, not power(表示声压,而不是声功率)。

【讨论】:

你是对的。感谢您指出了这一点。我将编辑我的帖子。 放大声音就是放大幅度,这样说对吗? @Nijat2018 放大意味着增加功率或幅度。

以上是关于如何在 AS3 中将声音放大指定的分贝数?的主要内容,如果未能解决你的问题,请参考以下文章

声音振幅(能量)如何换算成分贝?

语音和分贝数关系

Android 获取麦克风的音量(分贝)

STM32噪声警报器-----前期准备

如何在 MySQL Workbench 中放大 EER 图?

转载:声音分贝的概念,dBSPL.dBFS