声音驱动:FFT 频谱与节拍
前面每一页的「值」都来自时间(补间)或物理(弹簧)。但驱动动画的信号也可以来自外部——比如声音。
Web Audio 的 AnalyserNode 对正在播放的音频做快速傅里叶变换 (FFT),每一帧给出一条频谱
(各频段的能量),把它喂给视觉即得「随声而动」:低频(鼓点 kick)驱动中心脉冲的缩放,中高频驱动频谱条的起伏。
本页在页内合成一段循环节拍(无需上传音频、也不申请麦克风权限),实时分析它来驱动下面的可视化。
浏览器要求音频由用户手势启动,所以先点「播放」。
低频 (kick) 0
中频 0
高频 (hat) 0
AnalyserNode 用 FFT 把
一小段波形变换到频域,得到「每个频率上有多少能量」。fftSize = 256 给出 128 个频段,
getByteFrequencyData 每帧把它们填进一个 Uint8Array (0–255)。视觉只需选几个频段
映射到属性:低频段均值 → 脉冲缩放、各频段 → 频谱条高度。smoothingTimeConstant 让相邻帧的频谱平滑、
不抖。整条分析图自身就是一个「无尽、由外部信号驱动」的动画源,与噪声同属此类。
Web Audio — 取频谱、映射到视觉
声音是「外部信号驱动」的一种;噪声是「内部程序化信号」的一种——两者都不走 时间补间,却同样能源源不断地驱动动画。落定的手感与映射曲线仍可借缓动整形 (如对能量值再过一条 easeOut,让脉冲回落更柔和)。