# Audio
# 基本接口和术语
# 通用接口(顶层接口)
AudioContext
音频上下文接口,此接口代表由音频模块构成的音频处理图,这是音频处理的环境,使用其他接口前都必需创建这个环境。
AudioNode
音频节点接口,是音频处理中的基本单元,类似DOM
节点。包含有振荡器,滤波器,增益(音量)控制器
AudioParam
音频参数接口,代表音频相关的参数
# 音频源接口(AudioNode)
OscillatorNode
振荡器接口,用于产生波形(发生器)
AudioBuffer
音频片段接口,代表一段音频数据,当音频被解码成这种数据后,就可以放入AudioBufferSourceNode
中进行处理
AudioBufferSourceNode
音频缓存源接口,表示一段音频数据组成的音频源
MediaElementAudioSourceNode
媒体元素音频源接口,代表来自 HTML 媒体元素<audio>``<video>
的音频源
MediaStreamAudioSourceNode
媒体流音频源接口,表示来自 MediaStream 的音频源,比如 WebRTC,本地麦克风。
# 音效接口
BiquadFilterNode
低通滤波器
ConvolverNode
线性卷积
DelayNode
延迟
DynamicsCompressorNode
动态压缩
GainNode
增益 Gain.gain
StereoPannerNode
立体声控制 Panner.pan
WaveShaperNode
波形扭曲
PeriodicWave
周期波
# 输出接口
AudioDestinationNode
音频输出接口,通常是你的扬声器
MediaStreamAudioDestinationNode
媒体流输出接口,另一个远端的 RTCPeer
# 分析接口(音频数据可视化)
AnalyserNode
表示一个可以用于进行实时的时域和频域分析的节点
# 声道处理接口
ChannelSplitterNode
声道分离
ChannelMergerNode
声道合并
# 空间效果接口
AudioListener
代表人的位置和朝向
PannerNode
抽象出来的音频的空间位置信息
# 网页音频接口的基本概念
# 音频节点
Web Audio API 在 Audio Context 中进行音频处理
音频处理流程:
- 创建一个音频环境(Audio Context)
- 创建声源,比如
<audio>
,振荡器节点,AudioStream
等 - 创建处理节点,比如混响,压缩
- 选择音频输出的终点,比如系统的扬声器,远端的 RTCPeer
- 连接上面的这些节点
# 音频数据
# 什么是样本
当一个音频信号被处理时,取样意味着从一个连续的信号转化为离散的信号;更具体地说,一个连续的声波(例如一个正在演奏的乐队发出的声音)会被转化成一系列的样本点(一个时间上离散的信号),计算机只可以处理这些离散的样本块。
# 音频片段
# 一个音频片段(AudioBuffer)会包含几个参数,声道数,音频帧数,音频的采样率
其中采样率和音频帧数的关系如下:
帧数 = 采样率*音频时间var context = new AudioContext();
// 声道数 ,音频帧数,采样率
var buffer = context.createBuffer(2, 22050, 44100);
上面这段代码,创建了一个音频上下文,然后在这个上下文中获取到了一个双声道,采样率为 44.1KHz 的 0.5 秒音频片段
# 音频的存储方式
网页音频接口采用分离式的片段存储,方便对每个声道单独处理
LLLLLLLLLLLLLLLLRRRRRRRRRRRRRRRR (对于一个有16帧的音频片段)
而音频文件存储等不需要音频加工的地方则采用交错式
LRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLR (对于一个有16帧的音频片段)
# 关于声道
单声道 双声道 左声道 右声道 四声道 左声道 右声道 环绕左声道 环绕右声道 5.1 在四声道基础上增加了中央声道和低音炮
# 创建音频上下文
// 兼容性处理
const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioContext = new AudioContext();
# 参考资料
音频处理之音频文件拼接录音及裁剪 https://blogs.lipten.link/2019/06/19/音频处理之音频文件拼接录音及裁剪/
音频处理之变音变调 https://blogs.lipten.link/2019/07/18/音频处理之变音变调/
音频处理之文件编码与解码(一) https://blogs.lipten.link/2019/07/18/音频处理之文件编码与解码(一)/
音频处理之文件编码与解码(二) https://blogs.lipten.link/2019/07/19/音频处理之文件编码与解码(二)/
音频图 →