-->

如何在AS3分贝指定数量的放大声音?(How do I amplify sounds by a sp

2019-09-16 17:23发布

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

答:这个问题的第一部分:可以使用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个分贝的值将增加的体积十倍(精确地)。

Answer 1:

你的分贝计算应真正使用20,不是10:

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

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



文章来源: How do I amplify sounds by a specified number of decibels in AS3?