monitor 中文文档 下载 App

麦克风到曲线之间发生了什么:实时音高检测的工作方式

整条链路只有四步

从你开口到屏幕出现曲线,中间发生了四件事,每一步都决定了最后那条线的样子:

  1. 拾音——手机麦克风持续采集环境声音,按固定频率切成一帧帧的音频片段;
  2. 找基频——应用在每一帧里分析声波的周期,找出决定「音高」的那个基础频率(单位 Hz)。人声的基频通常在 80Hz 到 1000Hz 之间,女声偏高、男声偏低;
  3. 换算音名——把基频换算成十二平均律里最接近的音名和八度,比如 261.6Hz 对应 C4、440Hz 对应 A4;
  4. 落笔画线——把这一帧的音高作为纵坐标追加到图上,整条曲线随时间向左滚动,新数据从右侧进入。

因为每一帧都独立检测、实时追加,你看到的不是事后的统计图,而是正在发生的音高——延迟通常低到跟随口型变化。

纵轴为什么是对数的音阶

声学上人耳对音高的感知是对数关系:频率翻一倍,听感只高一个八度。所以纵轴不按 Hz 均匀划分,而是按音名划分——相邻两条横线差一个半音,隔一个八度频率正好翻倍。C4(约 261.6Hz)到 C5(约 523.3Hz)在图上的距离,和 C5 到 C6 一样高。

这也是为什么图的纵轴标注的是 C3、C4、A4 这样的音名而不是赫兹数——除非你开半音线或看调音器模式,日常读图只需要认音名。官方介绍称显示范围覆盖 C1 到 B7 七个八度,远超人声与常见乐器的音域。

哪些声音能被正确检测

官方商店页明确了一条硬边界:分析对象是单音(monophonic)。当声音里同时出现两个以上乐器或和弦时,算法无法判断该跟哪一个基频,曲线会跳变或画出错误的线。具体来说:

低频检测的难点与应对见低音区局限,和弦场景的边界详见单音检测边界。

为什么画面会跟着音高上下移动

默认开启的「自动滚动」(Auto scroll)让纵轴显示范围跟随当前音高移动:你唱低音时视野自动下移,唱高音时视野上移,保证曲线始终在屏幕中间附近。关掉它,纵轴就固定不动,适合音域跨度不大的练习——两种模式各适合什么,见自动滚动。

相关文档