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

これを試して?freq = E((Math.log(10)*(pixel *(range / canvas.width)))+ Math.log(graph.min))

それがまったく役立つかどうかを確認してください。ここで、Eは、括弧内のパラメーターに上げられたオイラー数です。それはあなたがそこに持っているものと同等かもしれません、私はあまり正直に見えませんでした。しかし、それは一撃の価値があります。

于 2013-02-18T18:50:01.893 に答える