Получение частоты из значения пикселя для Web Audio API EQ

Я создаю визуальный эквалайзер, используя Web Audio API и canvas. Я строю частоты в логарифмическом графе на холсте 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;
} 

Скорее всего, я перестроил уравнение неправильно, поэтому любая помощь будет высоко ценится.

2 ответа

Решение

Приведенная ниже функция определяет частоту для данного пикселя на графике частоты холста с логарифмическим масштабированием:

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) * (пиксель * (range / canvas.width)))+ Math.log(graph.min))

Посмотрим, поможет ли это вообще. Где E - число Эйлера, возведенное в параметры в скобках. Это может быть эквивалентно тому, что у вас там, я не слишком внимательно, чтобы быть честным. Хотя стоит попробовать.

Другие вопросы по тегам