【问题标题】:Getting frequency from a pixel value for Web Audio API EQ从 Web Audio API EQ 的像素值中获取频率
【发布时间】:2013-02-18 18:38:25
【问题描述】:

我正在使用 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;
} 

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

【问题讨论】:

    标签: javascript math canvas signal-processing web-audio-api


    【解决方案1】:

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

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

    【讨论】:

    • 啊,好吧,所以它不喜欢我的 E()。真的不想用指数来考虑它。很高兴我能帮上点忙,即使是小事。
    • 非常感谢您的回答,RobotEyes。一直在努力解决这个问题(数学不是我的强项!)不过,请注意:通过 Math.LN10 使用预先计算的 Math.log(10) 值可能会更快。将编辑您的答案以使用它。如果您不同意,请告诉我!
    • 很高兴它帮助了某人。我知道你对它的数学方面的感受。您对Math.LN10 的建议最好留在 cmets - 我认为这是 SO 协议 - 如果我错了,请纠正我。
    【解决方案2】:
    pixel = (Math.log(freq)/Math.log(10) - min) / range * canvas.width
    

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

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

    【讨论】:

    • 这也没用,但是在与你之前的一个人搞砸之后,我让它工作了 - 所以谢谢!如果有一天其他人需要它,我会发布有效的解决方案作为答案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多