2

我正在使用 Web Audio API 和画布创建视觉 EQ。我正在使用以下函数在 HTML5 Canvas 上的对数图中绘制频率:

function frequencyToPixel(freq){
    var min = Math.log(graph.min)/Math.log(10)
    ,   max = Math.log(graph.max)/Math.log(10)
    ,   range = max-min
    ,   pixel = (Math.log(freq)/Math.log(10) - min) / range * canvas.width;
    return pixel;
}

我还想反转这个等式以获得一个返回特定像素相关频率的函数。目前我正在使用以下功能,但它没有产生预期的结果。例如,如果我在上面的函数中输入 1000,它会返回 434.93。因此,我应该能够将 434.93 放入以下等式以返回 1000;

function pixelToFrequency(pixel){
    var min = Math.log(graph.min)/Math.log(10)
    ,   max = Math.log(graph.max)/Math.log(10)
    ,   range = max-min
    ,   x = (pixel * canvas.width * range) + min
    ,   frequency = Math.pow(10, x);
    return frequency;
} 

很可能我以错误的方式重新排列了方程式,因此非常感谢任何帮助。

4

2 回答 2

3

下面的函数计算出对数比例画布频率图上给定像素的频率:

function pixelToFrequency(pixel){
    var min = Math.log(app.graph.min)/Math.log(10)
    ,   max = Math.log(app.graph.max)/Math.log(10)
    ,   range = max-min
    ,   frequency = Math.pow(10, pixel * (range / canvas.width) + min)
    return frequency;
}
于 2013-02-18T19:27:39.067 回答
1
pixel = (Math.log(freq)/Math.log(10) - min) / range * canvas.width

试试这个?频率 = E((Math.log(10) * (pixel * (range / canvas.width)))+ Math.log(graph.min))

看看这是否有帮助。其中 E 是括号中参数的欧拉数。它可能相当于你那里的东西,老实说,我没有仔细看。不过值得一试。

于 2013-02-18T18:50:01.893 回答