为什么用对数频率轴
线性频谱图把一半高度给了最高的那个八度,人声和乐器真正发声的频段被挤成底下一条。音高本来就是对数的,所以 Tonescope 给每个八度同样的高度:低频行在相邻 FFT bin 之间插值,高频行取该像素行内的最大值。所选调式的音阶线和行对齐,读音名就像在键盘上找键。
项目速览
音高跟踪用 YIN,测量范围 40–2000 Hz。FFT 越小,能测的最低音越高;侧栏显示当前下限。
14
种音阶与调式,主音 12 选 1
40–2000 Hz
音高跟踪范围
1024–16384
FFT 长度,hop 128–2048
0.1.2
当前版本 · MIT OR Apache-2.0
看到的是音,不只是频率
1/3
选好主音和音阶(大调、三种小调、五种调式、五声、布鲁斯、全音阶),Tonescope 把音阶线横贯瀑布图,主音高亮,A4 可在 400–480 Hz 间调。鼠标悬停任一点,显示频率、最近音名与音分、该点 dB、距今多久、该列音高;打开泛音线,还能看到该点 2–8 次泛音落在哪里。

一段带 8 次泛音的合成旋律,经虚拟麦克风输入 Linux 上的 Tonescope 0.1.2。绿线是跟踪到的音高,悬停框读的是光标下那一点。
报基音,不报最响的泛音
2/3
泛音比基音还响时,音高读数仍停在基音上,不跳八度。电平低于门限的帧不测音高,静音不会变成一条乱跑的线。右侧实时频谱同时标出最强频率和检测到的音高,两者不一致时一眼可见。
快到可以跟着唱
3/3
每帧只给新列着色,就地更新纹理。帧率跟随显示器,可限 60 或 30 fps,输入持续安静时自动降帧。Performance 面板拆出每帧 CPU,并估算声音到屏幕的延迟,分为设备、排队、分析窗、显示四段。空格暂停,暂停后的画面仍可改频率范围、缩放。