关闭。这个问题不符合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
,效果越强...