Skip to main content
 首页 » 编程设计

apache-flex之我可以使用哪些算法来计算音量

2024年10月01日23sxdcgaq8080

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




假设我有一个可以在 0 和 1 之间移动的 slider 。SoundTransform.volume范围也在 0(静音)和 1(全音量)之间,但如果我使用线性函数,比如说 SoundTransform.volume = slider.volume ,结果相当不令人满意 - 感觉是音量在下半部分发生巨大变化,而在 slider 的上半部分几乎没有任何作用。
我真的没有研究过人耳,但是我曾经无意中听到人类的感知是对数的,或者类似的东西。我应该使用什么算法来设置 SoundTransform.volume ?

请您参考如下方法:

人类的感知通常是对数的,当涉及到亮度等事物时也是如此……这使我们能够记录环境的小“输入信号”的微小变化,或者换一种说法:总是感知变化一个可感知的物理量与其值(value)的关系...
因此,您应该修改卷以指数增长,如下所示:

y = (Math.exp(x)-1)/(Math.E-1) 
您也可以尝试其他基础:
y = (Math.pow(base,x)-1)/(base-1) 
base 的值越大也就是说,效果越强,音量开始增长越慢,最终增长越快......
一个稍微简单的方法,给你类似的结果(你只是在 0 和 1 之间的区间,所以近似值实际上非常简单),是对原始值进行指数化,如
y = Math.pow(x, exp); 
对于大于 1 的 exp,其效果是,输出(即您的情况下的音量)首先上升得较慢,然后逐渐加快......这与指数函数非常相似......更大的 exp ,效果越强...