多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 应用结构 ![](https://img.kancloud.cn/13/b8/13b89c60f34c0c702e6b1a08354300c0_676x550.png =500x) ![](https://img.kancloud.cn/80/ea/80eacebf318f0cfbcd957e2ae17e4524_1099x609.png) # webAudio 相关 API 使用 webAudio 相关 API 来分析音频数据,然后使用 canvas 进行数据可视化 ## AudioContext AudioContext:包含各个 AudioNode 对象以及它们的联系的对象,可以理解为 audio 上下文对象。绝大多数情况下,一个 document 中只有一个 AudioContext ```js var ac = new window.AudioContext() ``` 属性: - destination:AudioDestinationNode 对象,所有的音频输出聚集地,相当于音频的硬件,所有的 AudioNode 都直接或间接连接到这里 - currentTime:AudioContext 从创建开始到当前的时间(秒) 方法 - decodeAudioData(arrayBuffer, succ(buffer), err):异步解码包含在 arrayBuffer 中的音频数据 - createBufferSource():创建 audioBufferSourceNode 对象 - createAnalyser():创建 AnalyserNode 对象 - createGain() / createGainNode():创建 GainNode 对象 ## AudioBufferSourceNode 表示内存中的一段音频资源,其音频数据存在于 AudioBuffer 中(buffer 属性) 创建: ```js var buffersource = ac.createBufferSource() ``` 属性: - buffer:AudioBuffer 对象,表示要播放的音频资源数据。子属性 duration 表示该音频资源的时长(秒) - loop:是否循环播放,默认 false - onended:可绑定音频播放完毕时调用的事件处理程序 方法: - start / noteOn(when = ac.currentTime, offset = 0, duration = buffer.duration - offset):开始播放音频。when 表示何时开始播放;offset 表示从音频的第几秒开始播放;duration 表示播放几秒 - stop / noteOff(when = ac.currentTime):结束播放音频 ## GainNode 改变音频音量的对象,会改变通过它的音频数据所有的 sample frame 的信号强度 创建: ```js var gainNode = ac.createGain() / ac.createGainNode() ``` 属性: gain,AudioParam 对象,通过改变其 value 值可以改变音频信号的强弱,默认的 value 属性值为 1,通常最小值为 0,最大值为 1,其 value 值也可以大于 1,小于 0。 ## AnalyserNode 音频分析对象,它能实时地分析音频资源的频域和时域信息,但不会对音频流做任何处理 创建: ```js var analyser = ac.createAnalyser() ``` 属性: - fftSize:设置 FFT 值的大小,用于分析得到频域,为 32 - 2048 之间 2 的整数次倍,默认为 2048,实时得到的音频频域的数据个数为 fftSize 的一半 - frequencyBinCount:FFT 值的一半,即实时得到的音频频域的数据个数 方法: - getByteFrequencyData(Uint8Array):复制音频当前的频域数据到 Uint8Array(8 位无符号整型类化数组)中 `$ a \times b = 3 $`