Visual LabINTERACTIVE LEARNING
阶段 6 · 声音图入门18 分钟

AudioContext:建立一条可编程声音管线

Source → Gain → Destination 与用户手势

创建最小 Web Audio 节点图,用按钮启动振荡器,并观察 AudioContext 的 suspended/running 状态。

LEARNING GOALS

先明确本课目标

1

创建并恢复 AudioContext

2

连接 Oscillator、Gain 与 Destination

3

安全停止一次性 AudioScheduledSourceNode

MENTAL MODEL · 再建立心智模型

Web Audio 不是“播放一个文件”,而是搭积木:节点产生或处理音频,连接决定信号流向,Destination 把最终信号送往扬声器。

MINIMAL EXAMPLE

几行 connect 为什么就能持续产生声音?

AudioContext 在专用渲染路径上持续拉取音频块。connect() 只描述节点图结构;当 Source 启动后,浏览器会按图从 Source 计算到 Destination。

最小例子javascript
const context = new AudioContext();
const oscillator = new OscillatorNode(context);
const gain = new GainNode(context, { gain: 0.08 });

oscillator.connect(gain).connect(context.destination);
await context.resume();
oscillator.start();
  1. 创建声音环境 Context 提供时间基准、采样率和最终输出。
  2. 连接处理节点 Source 先进入 Gain,再流向 Destination。
  3. 用户手势恢复 resume 通常应放在点击事件中,随后再启动声源。

节点图在音频线程持续渲染,主线程不需要为每个采样点运行循环。

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

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

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

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

本课挑战

做一个带攻击、衰减、延音和释放四段包络的单音合成器。

DEEP DIVE · 实验之后

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

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

CORE IDEA

核心讲解

01

节点图描述信号流

connect() 建立有向边,音频渲染线程按固定采样块拉取数据。节点可以一对多、多对一,也能在运行时调整参数。

02

声音要由用户启动

多数浏览器会让新 AudioContext 处于 suspended。把 resume() 放进明确的点击处理器,既符合策略也让用户知道何时会发声。

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

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

展开⌄
API COMPARISON

媒体元素是一台播放器,AudioContext 是一张声音处理图。

WebGL

Web Audio 把声源、增益、滤波、分析和输出连接成实时节点图。

WebGPU

声明式播放适合完整歌曲、播客和视频伴音,浏览器负责主要细节。

文件播放可由媒体元素进入 MediaElementAudioSourceNode,再接入声音图。