<audio> & AudioContext API


Firefox 下 AudioBuffer 似乎需要先设置值在赋给 SourceNode 才能播放

简单、典型的 web audio 工作流是这样的:
  1. 创建音频环境
  2. 在音频环境里创建源 — 例如
  3. 创建效果节点,例如混响、双二阶滤波器、平移、压缩
  4. 为音频选择一个目地,例如你的系统扬声器
  5. 连接源到效果器,以及效果器和目的地

取样意味着从一个连续的信号转化为离散的信号
每个样本点都是一个 代表着该音频流在特定时间特定声道上的数值的单精度浮点数(一组?)。
声音总可以被分解为不同频率(声调)不同强度正弦波的叠加。
频谱图: 一个时间点不同频率上的强度(幅度)
一个 音频片段(AudioBuffer,可以用于剪切) 会包含几个组成参数:一个或几个声道(1代表单声道,2代表立体声等等),一个长度(代表片段中采样帧的数目)和一个采样率(是每秒钟采样帧的个数)。
一个采样帧是由一组在特定时间上的所有声道的样本点组成的

网页音频接口使用的是分离式(另外一种是交错式)的片段储存方式:左(L)右(R)声道像这样存储:
LLLLLLLLLLLLLLLLRRRRRRRRRRRRRRRR (对于一个有16帧的音频片段),这种方式允许对每个声道单独处理
5.1声道:0: L: 左, 1: R: 右, 2: C: 中央, 3: LFE: 低音炮, 4: SL: 环绕左, 5: SR: 环绕右
当输入与输出的声道数不同时,我们就需要混频, AudioNode.channelInterpretation 属性为 "speakers"(扬声器) 或 "discrete"(离散声道)
音频的空间化(由网页音频接口的 PannerNodeAudioListener 节点处理)允许我们对空间中某一点的音频信号,以及这一信号的接听者建立位置和行为模型。
对于音频来说,扇入是指 ChannelMergerNode 节点接收一系列单声道输入声源,并将它们整合输出为一个多声道音频信号的过程,扇出恰恰相反(ChannelSplitterNode 节点)