Как нарисовать частотное разделение в параметрическом эквалайзере - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь сделать что-то похожее на этот параметрический эквалайзер , только в отношении оси частот, то есть значений вдоль средней линии: Parametric eq

Похоже, это стандартный формат для эквалайзеров, но я не могу выработать формулу для этого.

т.е. значения для первого набора частотных линий 10, 20, 30, 40,50, 60, 70, 80, 90, 100, но интервал уменьшается при увеличении до 100 Оттуда он увеличивается до 100, 200, 300, 400, 500 .. до 1000, и интервал сбрасывается на 100, а затем уменьшается в каждом интерваледо 1000 Один и тот же шаблон повторяется до максимума, который в данном случае составляет 20 000

Как это сделать?Это логарифмический?

1 Ответ

0 голосов
/ 04 октября 2018

С помощью этого видео мне удалось разработать формулу для построения оси частот в виде логарифмической шкалы.

        int factor = 10;
        for(int i = 10; i <= FREQ_MAX; i+=factor)
        {
            fx = (float) ((float) (Math.log10(i) - Math.log10(PEQ.FREQ_MIN))/(Math.log10(PEQ.FREQ_MAX)-Math.log10(PEQ.FREQ_MIN)) * getMaxCanvasWidth());
            canvas.drawLine(fx, 0, fx, getHeight(), paintLinesThick);

            if(isDisplayedFreq(i))
            {
                paintText.setTextAlign(Paint.Align.LEFT);
                canvas.drawText(getFreqAsFormattedLabel(i), fx + (getMaxCanvasWidth() / 120f), (getHeight() / 2f) + (getHeight() / 50f), paintText);
            }

            if(i >= (factor*10))
            {
                factor *= 10;
            }
        }
...