AudioContext接口表示由音频模块连接而成的音频处理图,每个模块对应一个AudioNode。AudioContext可以控制它所包含的节点的创建,以及音频处理、解码操作的执行。做任何事情之前都要先创建AudioContext对象,因为一切都发生在这个环境之中。
AudioContext 可以是事件源(event target),所以也实现了EventTarget 接口。
属性
AudioContext.currentTime只读- 以双精度浮点型数字返回硬件调用的秒数,AudioContext一创建就从0开始走,无法停掉、暂停或者重置。
AudioContext.destination只读- 返回
AudioDestinationNode对象,表示当前audio context中所有节点的最终节点,一般表示音频渲染设备。 AudioContext.listener只读- 返回
AudioListener对象,用于3D音频空间化。 AudioContext.sampleRate只读- 返回用浮点数表示的采样率,也就是每秒的采样数,同一个AudioContext中的所有节点采样率相同,所以不支持采样率转换。
AudioContext.state只读- 返回
AudioContext当前状态. AudioContext.mozAudioChannelType只读- 被用于返回一个 Firefox OS 设备上
AudioContext将会播放的音频声道. -
事件处理程序
AudioContext.onstatechange- 当一个
statechange事件类型被触发时响应的事件处理程序.AudioContext的状态会因(AudioContext.suspend,AudioContext.resume或者AudioContext.close)方法的运用而发生改变
Methods
可以实现 EventTarget接口的方法.
AudioContext.close()- 关闭一个音频环境, 释放任何正在使用系统资源的音频.
AudioContext.createBuffer()- 创建一个空的
AudioBuffer对象, 并且能够通过AudioBufferSourceNode来进行数据填充和播放. AudioContext.createConstantSource()- 创建一个
ConstantSourceNode对象, 它持续输出一个连续的单声道,这些样本都会拥有一个相同的固定值。 AudioContext.createBufferSource()- 创建一个
AudioBufferSourceNode对象, 他可以通过AudioBuffer对象来播放和处理包含在内的音频数据.AudioBuffer可以通过AudioContext.createBuffer方法创建或者使用AudioContext.decodeAudioData方法解码音轨来创建。 AudioContext.createMediaElementSource()- 创建一个
MediaElementAudioSourceNode接口来关联HTMLMediaElement. 这可以用来播放和处理来自<video>或<audio>元素的音频. AudioContext.createMediaStreamSource()- 创建一个
MediaStreamAudioSourceNode接口来关联可能来自本地计算机麦克风或其他来源的音频流MediaStream. AudioContext.createMediaStreamDestination()- 创建一个
MediaStreamAudioDestinationNode接口来关联可能储存在本地或已发送至其他计算机的MediaStream音频. AudioContext.createScriptProcessor()- 创建一个可以通过JavaScript直接处理音频的
ScriptProcessorNode. AudioContext.createStereoPanner()- 创建一个使用立体声的音频源
StereoPannerNode. AudioContext.createAnalyser()- 创建一个
AnalyserNode,它可以用来显示音频时间和频率的数据。 AudioContext.createBiquadFilter()- 创建一个
BiquadFilterNode,它代表代表一个双二阶滤波器,可以设置几种不同且常见滤波器类型:高通、低通、带通等。 AudioContext.createChannelMerger()- 创建一个
ChannelMergerNode,它被用于从多个音频流信道结合成一个单一的音频流。 AudioContext.createChannelSplitter()- 创建一个
ChannelSplitterNode,它用于访问的音频流的单独的通道并分别对他们进行处理。 AudioContext.createConvolver()- 创建一个
ConvolverNode,它可用于混合效果,比如说混响效果。 AudioContext.createDelay()- 创建一个
DelayNode,它可以通过一定量的延迟传入音频信号,它也被用做创建一个反馈回路。 AudioContext.createDynamicsCompressor()- 创建一个
DynamicsCompressorNode, 它可用于声学的音频信号的压缩。 AudioContext.createGain()- 创建一个
GainNode,它可以控制音频的总音量。 AudioContext.createIIRFilter()- 创建一个
IIRFilterNode,它可以将一个二阶滤波器配置为多种不同的通用滤波器类型。 AudioContext.createOscillator()- 创建一个
OscillatorNode, 它表示一个周期性波形,基本上来说创造了一个音调. AudioContext.createPanner()- 创建一个
PannerNode, 它为音源创建一个3D音源环境。 AudioContext.createPeriodicWave()- 创建一个
PeriodicWave, 创建一个用来定义OscillatorNode的周期波形。 AudioContext.createWaveShaper()- 创建一个
WaveShaperNode, 它被用于创建非线性失真效果. AudioContext.createAudioWorker()- 创建一个
AudioWorkerNode, 它可以通过使用woker来产生,处理,或直接分析音频. AudioContext.decodeAudioData()- 从
ArrayBuffer对象中异步解码音频文件. 在此情况下,这个ArrayBuffer对象通常是通过使用 responseType为arraybuffer类型的XMLHttpRequest方法来获取的. 该方法只能作用于完整的音频文件. AudioContext.resume()- 重新启动一个已被暂停的音频环境
AudioContext.suspend()- 暂停音频内容的进度.暂时停止音频硬件访问和减少在过程中的CPU/电池使用.
已被废弃的方法
AudioContext.createJavaScriptNode()- 创建一个
JavaScriptNode, 用于javascript直接处理音频。 这个方法已经被AudioContext.createScriptProcessor()替代并且废弃。 AudioContext.createWaveTable()- 创建一个
WaveTableNode, 用于顶一个周期性波形。 这个方法已经被AudioContext.createPeriodicWave()替代并且废弃。
例子
简单声明:
var audioCtx = new AudioContext;
跨浏览器的方式:
var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); // declare new audio context // Webkit/blink browser require a prefix, and it needs the window object specifically declared to work in Safari var oscillatorNode = audioCtx.createOscillator(); var gainNode = audioCtx.createGain(); var finish = audioCtx.destination; // etc.
规范
| 规范 | 状态 | 注释 |
|---|---|---|
| Web Audio API AudioContext |
Working Draft |
浏览器兼容性
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| Basic support | 10.0webkit | 25.0 (25.0) | 未实现 | 15.0webkit | 6.0webkit |
| Feature | Android | Firefox for Andriod | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Andriod |
|---|---|---|---|---|---|---|
| Basic support | ? | 26.0 | ? | ? | ? | 33.0 |