我在Java(& JNI)中制作频率可视化器,并使其在X轴(频率)和Y轴(幅度)上使用线性比例工作。将Y轴转换为对数刻度就像绘制幅度的对数一样简单,但我在概念层面遇到麻烦,理解如何以对数方式制作X轴刻度(例如这个tone generator)。
这是我目前每个频段的初始化,其中每个频段代表总频率的相等部分:
bands = new VisualizerBand[numOfBands];
float physicalBandWidth = ((float) this.getWidth()) / numOfBands; // So as not to exceed 1 band per pixel
float frequencyBandWidth = maxFrequency / numOfBands; // Each band represents an equal percent of the total frequencies represented
for (int i = 0; i < bands.length; i++){
bands[i] = new VisualizerBand();
...
bands[i].setStartFrequency(i * frequencyBandWidth);
bands[i].setEndFrequency(bands[i].getStartFrequency() + frequencyBandWidth);
...
}
从我的研究和尝试来看,似乎解决方案将涉及根据他们在窗口中的位置得出每个频段的频率带宽,但我正在努力超越它。任何建议或指导都将不胜感激。