【发布时间】:2015-11-26 00:09:11
【问题描述】:
我正在为脚本创建一些音频提示,但一直遇到同样的问题:
人类的感知是对数的。如果我想将一系列声音分成 10 等份,我不能只从最高音调中减去最低音调并除以 10。这些步骤在感知上并不准确。
因此,当处理一个输出在 20-20000 范围 (kHz) 范围内的函数时,是否有一个基本的数学函数可以合理地近似将这些数字转换为它们的感知等价物——仍然在 20-20000 范围内进行映射?
例子:
我正在处理一个以 kHz 为范围的“哔”命令。
我从我自己的系统测试中知道,这个命令在被测系统上的功能范围是 38 到 9900Hz。
因此,如果我要创建一个音频倒计时来遍历 100 个项目,我会将 9900-38 / 100 划分为每个项目的 98.62Hz 范围。如果我要创建音频倒计时,我会简单地从最大范围开始创建一系列哔声,每次哔声降低 98.62Hz。
但这听起来并不准确。大多数时间都花在高音频率上。没有足够的时间花在低频上。
我确实设法为我的白噪声发生器解决了这个问题,但我无法将相同类型的修复应用于音频倒计时。 (主要是因为白噪声发生器有很大的出错余地。)在那种情况下,我只是将赫兹除以 10。但我这样做是随机的。它给了我想要的效果,但没有任何一致的映射功能:
if %@RANDOM[1,10] gt 6 (set BEEP_FREQUENCY_TEMP=%@FLOOR[%@EVAL[BEEP_FREQUENCY_TEMP / 10]]
if %@RANDOM[1,10] gt 9 (set BEEP_FREQUENCY_TEMP=%@FLOOR[%@EVAL[BEEP_FREQUENCY_TEMP / 10]]
if %@RANDOM[1,10] gt 8 (set BEEP_FREQUENCY_TEMP=%@FLOOR[%@EVAL[BEEP_FREQUENCY_TEMP / 10]]
你能告诉我我什至不知道如何问我的问题吗?
【问题讨论】: