https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
https://jakearchibald.com/2016/sounds-fun/
<audio> 属性 volume 值不能有很长小数,0.2 + 0.1 = 0.30000000000000004
Firefox 下 AudioBuffer 似乎需要先设置值在赋给 SourceNode 才能播放
简单、典型的 web audio 工作流是这样的:
- 创建音频环境
- 在音频环境里创建源 — 例如 <audio>, 振荡器, 流
- 创建效果节点,例如混响、双二阶滤波器、平移、压缩
- 为音频选择一个目地,例如你的系统扬声器
- 连接源到效果器,以及效果器和目的地
每个样本点都是一个 代表着该音频流在特定时间特定声道上的数值的单精度浮点数(一组?)。
频谱图: 一个时间点不同频率上的强度(幅度)
一个 音频片段(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"(离散声道)
音频的空间化(由网页音频接口的 PannerNode 和 AudioListener 节点处理)允许我们对空间中某一点的音频信号,以及这一信号的接听者建立位置和行为模型。
对于音频来说,扇入是指 ChannelMergerNode 节点接收一系列单声道输入声源,并将它们整合输出为一个多声道音频信号的过程,扇出恰恰相反(ChannelSplitterNode 节点)
声音可视化:https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API
获取数据: AnalyserNode.getByteFrequencyData() , AnalyserNode.getFloatTimeDomainData()