代码之家  ›  专栏  ›  技术社区  ›  Paul Chernoch

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

  •  2
  • Paul Chernoch  · 技术社区  · 15 年前

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

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

    “卷,范围从0(静默)到1(完整卷)。

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

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

    正确的:

    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使用pass-by-reference来设置soundTransform,而CS4使用pass-by-value语义并复制传递给它的对象。CS4方法设计得更好,但确实破坏了我在CS3中运行良好的代码。

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

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

    请注意,“分贝”可以是正数(放大)或负数(使声音更安静)。如果分贝为零,则不会发生变化。

    10分贝的值将使音量增加十倍(精确)。

    1 回复  |  直到 15 年前
        1
  •  4
  •   endolith    15 年前

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

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

    推荐文章