AudioContext接口表示由音频模块连接而成的音频处理图,每个模块对应一个AudioNodeAudioContext可以控制它所包含的节点的创建,以及音频处理、解码操作的执行。做任何事情之前都要先创建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, 它可以通过使用worker来产生,处理,或直接分析音频. 
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

另见

文档标签和贡献者

 此页面的贡献者: Jack_lo, maicss, yqjiang, Taoja, ayqy, focus
 最后编辑者: Jack_lo,