2

几天前,这是我的问题,我找到了答案。也许这会帮助别人。

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 分贝的值将使音量增加十倍(确切地说)。

4

1 回答 1

4

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

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

数字音频是幅度,而不是功率(它是声压的表示,而不是声功率)。

于 2009-07-23T16:10:58.977 回答