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

声音图:增益、声像与参数自动化

GainNode、StereoPanner 与 AudioParam

搭建可交互声音图,用滑杆控制响度与左右声像,并用 AudioParam 安排平滑变化。

LEARNING GOALS

先明确本课目标

1

组合多个 AudioNode

2

用 AudioParam 避免突变爆音

3

理解 fan-in 与 fan-out 连接

MENTAL MODEL · 再建立心智模型

AudioNode 决定“信号经过哪里”,AudioParam 决定“参数随音频时间怎样变化”;两者一起构成实时声音程序。

MINIMAL EXAMPLE

为什么不直接反复给 gain.value 赋值?

AudioParam 的调度方法在音频时间线上生成平滑参数曲线,避免主线程定时抖动和采样不连续造成的 click/pop。

最小例子javascript
const now = context.currentTime;
gain.gain.cancelScheduledValues(now);
gain.gain.setValueAtTime(gain.gain.value, now);
gain.gain.linearRampToValueAtTime(0.2, now + 0.08);
  1. 取消旧计划 交互变化前先处理尚未执行的参数事件。
  2. 固定当前起点 用当前值建立连续曲线的起始点。
  3. 按音频钟渐变 目标值和结束时间都由 AudioContext 时间解释。

响度和声像变化跟随音频时钟平滑过渡,即使主线程偶尔繁忙也更稳定。

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

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

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

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

本课挑战

实现一条 dry/wet 并行效果链并保持总响度基本稳定。

DEEP DIVE · 实验之后

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

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

CORE IDEA

核心讲解

01

参数也是时间序列

直接赋值可能在采样边界产生不连续。setTargetAtTime、linearRampToValueAtTime 等方法能在音频时钟上安排平滑变化。

02

连接图可以动态重组

节点可共享输入或分出多路效果,但复杂图要明确所有权,避免重复 connect 导致意外叠加。

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

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

展开⌄
API COMPARISON

节点连接表达结构,AudioParam 自动化表达随时间变化。

WebGL

声音图能并联、混音、滤波和自动化,但需要明确连接与生命周期。

WebGPU

直接设置元素 volume/pan 适合简单播放控制,状态少且易维护。

把声音图当成长期资源建立,交互只更新 AudioParam,避免反复重建节点。