我正在尝试做与this parametric equalizer类似的事情,仅在频率轴方面,即沿中间线的值:
这似乎是均衡器的标准格式,但我无法得出公式来实现。
即第一组频率线的值是10、20、30、40、50、60、70、80、90、100 但是随着您增加到100,间距会减小 从那里开始,行进到100、200、300、400、500 ..到1000,然后间隔重置为100,然后在每个间隔减小到1000 相同的模式重复到最大值,在这种情况下为20,000
这是怎么做的?是对数的吗?
答案 0 :(得分:0)
借助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;
}
}