# 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 中进行音频处理

音频处理流程:

  1. 创建一个音频环境(Audio Context)
  2. 创建声源,比如<audio>,振荡器节点,AudioStream
  3. 创建处理节点,比如混响,压缩
  4. 选择音频输出的终点,比如系统的扬声器,远端的 RTCPeer
  5. 连接上面的这些节点

# 音频数据

# 什么是样本

当一个音频信号被处理时,取样意味着从一个连续的信号转化为离散的信号;更具体地说,一个连续的声波(例如一个正在演奏的乐队发出的声音)会被转化成一系列的样本点(一个时间上离散的信号),计算机只可以处理这些离散的样本块。

参考:香农采样定理 (opens new window)

# 音频片段

# 一个音频片段(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/音频处理之文件编码与解码(二)/