如何在参数均衡器中绘制频率分离
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;
}
}
我正在尝试做类似于 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;
}
}