Visual LabINTERACTIVE LEARNING
阶段 6 · 声音图基础22 分钟

音频分析:把听不见的数据画出来

AnalyserNode、波形、频谱与 FFT Size

将 AnalyserNode 插入声音图,读取时域与频域数据,并绘制实时波形和频谱。

LEARNING GOALS

先明确本课目标

1

读取 time-domain 与 frequency 数据

2

理解 fftSize 与 frequencyBinCount

3

把采样数组映射到 Canvas

MENTAL MODEL · 再建立心智模型

AnalyserNode 像信号线旁的一只示波器:它读取经过的声音但不改变声音,JavaScript 定期取走一帧分析结果来可视化。

MINIMAL EXAMPLE

频谱数组的每个下标代表什么?

AnalyserNode 用 FFT 把最近的时域窗口拆成从 0 Hz 到 Nyquist 频率的一组 bin;数组下标对应频率区间,值表示映射后的能量。

最小例子javascript
const analyser = context.createAnalyser();
analyser.fftSize = 2048;
const bins = new Uint8Array(analyser.frequencyBinCount);

analyser.getByteFrequencyData(bins);
const hzPerBin = context.sampleRate / analyser.fftSize;
  1. 选择窗口大小 更大 fftSize 提供更多频率 bin,但时间窗口也更长。
  2. 复用同一数组 每个动画帧把最新分析结果写入预分配 TypedArray。
  3. 换算真实频率 第 i 个 bin 的中心频率约为 i × sampleRate / fftSize。

Canvas 能把频率数组映射为柱形图,并能把峰值下标换算成近似 Hz。

本课概念
OPTIONAL · 按需查阅完整术语表与概念边界

遇到陌生术语时再展开,不打断主线实验。

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

浏览器加载后会激活代码编辑器、独立运行环境与实时输出。

本课挑战

根据低、中、高三个频段能量驱动一个音乐可视化配色系统。

DEEP DIVE · 实验之后

回到原理,解释刚才发生了什么

先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。

CORE IDEA

核心讲解

01

时域看形状,频域看成分

时域数组描述每个采样点的瞬时振幅;FFT 把窗口分解为频率 bin,适合频谱、节拍和特征分析。

02

可视化刷新率不等于音频采样率

音频线程以数万 Hz 渲染,Canvas 通常只需跟随屏幕刷新。AnalyserNode 在两者之间提供最近一段数据的快照。

OPTIONAL · 迁移时查阅Web 与原生实现对照

主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。

展开⌄
API COMPARISON

听觉输出与视觉分析消费同一信号,但运行在不同刷新尺度。

WebGL

分析支路定期读取时域或频域快照,把高采样率信号压缩成屏幕可视信息。

WebGPU

媒体播放关注持续、无爆音地把样本送到扬声器。

分析循环应复用数组并允许丢掉视觉帧,不能反过来阻塞音频渲染。