Получение частоты из значения пикселя для 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 - число Эйлера, возведенное в параметры в скобках. Это может быть эквивалентно тому, что у вас там, я не слишком внимательно, чтобы быть честным. Хотя стоит попробовать.