# WebAudioContext

> 基础库 2.19.0 开始支持，低版本需做[兼容处理](1003706)。

WebAudioContext 实例，通过[wx.createWebAudioContext](/miniprogram/dev/api/media/audio/wx.createWebAudioContext) 接口获取该实例。

## 属性

### string state

当前WebAudio上下文的状态。可能的值如下：suspended（暂停）、running（正在运行）、closed（已关闭）。需要注意的是，不要在 audioContext close后再访问state属性

### function onstatechange

可写属性，开发者可以对该属性设置一个监听函数，当WebAudio状态改变的时候，会触发开发者设置的监听函数。

### number currentTime

获取当前上下文的时间戳。

### [WebAudioContextNode](/miniprogram/dev/api/media/audio/WebAudioContextNode) destination

当前上下文的最终目标节点，一般是音频渲染设备。

### [AudioListener](/miniprogram/dev/api/media/audio/AudioListener) listener

空间音频监听器。

### number sampleRate

采样率，通常在8000-96000之间，通常44100hz的采样率最为常见。

## 方法

### [Promise WebAudioContext.close()](/miniprogram/dev/api/media/audio/WebAudioContext.close)

关闭WebAudioContext

### [Promise WebAudioContext.resume()](/miniprogram/dev/api/media/audio/WebAudioContext.resume)

同步恢复已经被暂停的WebAudioContext上下文

### [Promise WebAudioContext.suspend()](/miniprogram/dev/api/media/audio/WebAudioContext.suspend)

同步暂停WebAudioContext上下文

### [IIRFilterNode WebAudioContext.createIIRFilter(Array. feedforward, Array. feedback)](/miniprogram/dev/api/media/audio/WebAudioContext.createIIRFilter)

创建一个IIRFilterNode

### [WaveShaperNode WebAudioContext.createWaveShaper()](/miniprogram/dev/api/media/audio/WebAudioContext.createWaveShaper)

创建一个WaveShaperNode

### [ConstantSourceNode WebAudioContext.createConstantSource()](/miniprogram/dev/api/media/audio/WebAudioContext.createConstantSource)

创建一个ConstantSourceNode

### [OscillatorNode WebAudioContext.createOscillator()](/miniprogram/dev/api/media/audio/WebAudioContext.createOscillator)

创建一个OscillatorNode

### [GainNode WebAudioContext.createGain()](/miniprogram/dev/api/media/audio/WebAudioContext.createGain)

创建一个GainNode

### [PeriodicWaveNode WebAudioContext.createPeriodicWave(Float32Array real, Float32Array imag, object constraints)](/miniprogram/dev/api/media/audio/WebAudioContext.createPeriodicWave)

创建一个PeriodicWaveNode

### [BiquadFilterNode WebAudioContext.createBiquadFilter()](/miniprogram/dev/api/media/audio/WebAudioContext.createBiquadFilter)

创建一个BiquadFilterNode

### [BufferSourceNode WebAudioContext.createBufferSource()](/miniprogram/dev/api/media/audio/WebAudioContext.createBufferSource)

创建一个BufferSourceNode实例，通过AudioBuffer对象来播放音频数据。

### [ChannelMergerNode WebAudioContext.createChannelMerger(number numberOfInputs)](/miniprogram/dev/api/media/audio/WebAudioContext.createChannelMerger)

创建一个ChannelMergerNode

### [ChannelSplitterNode WebAudioContext.createChannelSplitter(number numberOfOutputs)](/miniprogram/dev/api/media/audio/WebAudioContext.createChannelSplitter)

创建一个ChannelSplitterNode

### [DelayNode WebAudioContext.createDelay(number maxDelayTime)](/miniprogram/dev/api/media/audio/WebAudioContext.createDelay)

创建一个DelayNode

### [DynamicsCompressorNode WebAudioContext.createDynamicsCompressor()](/miniprogram/dev/api/media/audio/WebAudioContext.createDynamicsCompressor)

创建一个DynamicsCompressorNode

### [ScriptProcessorNode WebAudioContext.createScriptProcessor(number bufferSize, number numberOfInputChannels, number numberOfOutputChannels)](/miniprogram/dev/api/media/audio/WebAudioContext.createScriptProcessor)

创建一个ScriptProcessorNode

### [AnalyserNode WebAudioContext.createAnalyser()](/miniprogram/dev/api/media/audio/WebAudioContext.createAnalyser)

创建一个 AnalyserNode 。可以用来获取音频时间和频率数据，以及实现数据可视化。

### [PannerNode WebAudioContext.createPanner()](/miniprogram/dev/api/media/audio/WebAudioContext.createPanner)

创建一个PannerNode

### [AudioBuffer WebAudioContext.createBuffer(number numOfChannels, number length, number sampleRate)](/miniprogram/dev/api/media/audio/WebAudioContext.createBuffer)

创建一个AudioBuffer，代表着一段驻留在内存中的短音频

### [AudioBuffer WebAudioContext.decodeAudioData(ArrayBuffer audioData, function successCallback, function errorCallback)](/miniprogram/dev/api/media/audio/WebAudioContext.decodeAudioData)

异步解码一段资源为AudioBuffer。

## 示例代码

```js
// 监听状态
const audioCtx = wx.createWebAudioContext()
audioCtx.onstatechange = () => {
  console.log(ctx.state)
}
setTimeout(audioCtx.suspend, 1000)
setTimeout(audioCtx.resume, 2000)
```
