我试图找到一种方法,可以根据从excel导入的自定义用户数据来调整音调。

self.changePitch(30 + (parseInt(self.infoCollection.collection[j].array[i])-200/(3600)));

上面的代码适用于大约5,000的“正常值”。但是,我想将它们归一化以始终位于最小和最大频率之间。 (200和3800)

我尝试使用在这里找到的方程式:
https://stats.stackexchange.com/questions/70801/how-to-normalize-data-to-0-1-range
哪个说要使用(x-minval)/(maxval-minval)但是,这并不适用于所有情况。当使用非常大的数字时。 5,000万IE浏览器,它将仍然超过最大频率。

我正在尝试找到一种方法,该方法可以将多达数亿的任何有理数标准化。

编辑:抱歉,造成困惑。我正在制作一个基于放置在图表上的数据播放声音的应用程序。目的是使视力障碍的用户可以使用声音更好地理解数据,从而获得彼此相对的值。我的问题是人类听不到某个频率以上的频率,因此如果该值大于5000左右,则该应用程序将不会播放该数字的声音。

例:
A公司的利润为200美元,B公司的利润为5000万美元。用户会听到公司A的声音,但不会听到公司B的声音,因为该频率超出了人类的听觉范围。

最佳答案

下面的函数将执行线性归一化(感谢S McCrohan),您可以将所需的值传递给它。

https://jsfiddle.net/7cn57wnd/

function normalize(enteredValue, minEntry, maxEntry, normalizedMin, normalizedMax) {

    var mx = (enteredValue-minEntry)/(maxEntry-minEntry);
    var preshiftNormalized = mx*(normalizedMax-normalizedMin);
    var shiftedNormalized = preshiftNormalized + normalizedMin;

    return shiftedNormalized;

}
//Acceptable values: 0 - 10,000,000
//User enters: 99,000,000
//Normalization window: 200 - 3800

normalize(99000000, 0, 100000000, 200, 3800);

//Returns 3764

07-28 03:42
查看更多