从Web Audio API EQ的像素值获取频率

Getting frequency from a pixel value for Web Audio API EQ

本文关键字:像素 获取 频率 EQ Web Audio API      更新时间:2023-09-26

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

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;
} 

很可能我把方程式重新排列错了,所以如果有任何帮助,我们将不胜感激。

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

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;
}
pixel = (Math.log(freq)/Math.log(10) - min) / range * canvas.width

试试这个?freq=E((Math.log(10)*(像素*(范围/画布宽度))+Math.log(图形最小值))

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