如何在参数均衡器中绘制频率分离

How to draw frequency separation in a parametric equalizer

我正在尝试做类似于 this parametric equalizer 的事情,仅针对频率轴,即沿中间线的值:

这似乎是均衡器的标准格式,但我无法计算出执行此操作的公式。

即第一组频率线的值为 10、20、30、40、50、60、70、80、90、100 但是当你上升到 100 时间距会减小 从那里开始,它变为 100、200、300、400、500.. 到 1000,间距重置为 100,然后在每个间隔减少到 1000 相同的模式重复到最大值,在本例中为 20,000

这是怎么做到的?是对数吗?

this video 的帮助下,我能够计算出一个公式来将频率轴绘制为对数刻度。

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