Skip to main content
Version: 3.x

WebAudioContext

WebAudioContext 实例,通过 Taro.createWebAudioContext 接口获取该实例。

支持情况:

参考文档

方法

参数类型说明
statestring当前 WebAudio 上下文的状态。

可能的值如下:suspended(暂停)、running(正在运行)、closed(已关闭)。
需要注意的是,不要在 audioContext close 后再访问 state 属性
onstatechange() => void可写属性,开发者可以对该属性设置一个监听函数,当 WebAudio 状态改变的时候,会触发开发者设置的监听函数。
currentTimenumber获取当前上下文的时间戳。
destinationWebAudioContextNode当前上下文的最终目标节点,一般是音频渲染设备。
listenerAudioListener空间音频监听器。
sampleRatenumber采样率,通常在 8000-96000 之间,通常 44100hz 的采样率最为常见。

close

关闭WebAudioContext

注意事项 同步关闭对应的 WebAudio 上下文。close 后会立即释放当前上下文的资源,不要在 close 后再次访问 state 属性

支持情况:

参考文档

() => Promise<void>

示例代码

const audioCtx = Taro.createWebAudioContext()
audioCtx.close().then(() => {
console.log(audioCtx.state) // bad case:不应该在close后再访问state
})

resume

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

支持情况:

参考文档

() => Promise<void>

suspend

同步暂停 WebAudioContext 上下文

支持情况:

参考文档

() => Promise<void>

createIIRFilter

创建一个 IIRFilterNode

支持情况:

参考文档

(feedforward: number[], feedback: number[]) => IIRFilterNode
参数类型说明
feedforwardnumber[]一个浮点值数组,指定IIR滤波器传递函数的前馈(分子)系数。
feedbacknumber[]一个浮点值数组,指定IIR滤波器传递函数的反馈(分母)系数。

示例代码

let lowPassCoefs = [
{
frequency: 200,
feedforward: [0.00020298, 0.0004059599, 0.00020298],
feedback: [1.0126964558, -1.9991880801, 0.9873035442]
},
{
frequency: 500,
feedforward: [0.0012681742, 0.0025363483, 0.0012681742],
feedback: [1.0317185917, -1.9949273033, 0.9682814083]
},
{
frequency: 1000,
feedforward: [0.0050662636, 0.0101325272, 0.0050662636],
feedback: [1.0632762845, -1.9797349456, 0.9367237155]
},
{
frequency: 5000,
feedforward: [0.1215955842, 0.2431911684, 0.1215955842],
feedback: [1.2912769759, -1.5136176632, 0.7087230241]
}
]

const feedForward = lowPassCoefs[filterNumber].feedforward
const feedBack = lowPassCoefs[filterNumber].feedback
const iirFilter = audioContext.createIIRFilter(feedForward, feedBack)

createWaveShaper

创建一个 WaveShaperNode

支持情况:

参考文档

() => WaveShaperNode

createConstantSource

创建一个 ConstantSourceNode

支持情况:

参考文档

() => ConstantSourceNode

createOscillator

创建一个 OscillatorNode

支持情况:

参考文档

() => OscillatorNode

createGain

创建一个 GainNode

支持情况:

参考文档

() => GainNode

createPeriodicWave

创建一个 PeriodicWaveNode

注意 realimag 数组必须拥有一样的长度,否则抛出错误

const real = new Float32Array(2)
const imag = new Float32Array(2)
real[0] = 0
imag[0] = 0
real[1] = 1
imag[1] = 0

const waveNode = audioContext.createPeriodicWave(real, imag, {disableNormalization: true})

支持情况:

参考文档

(real: Float32Array, imag: Float32Array, constraints: Constraints) => PeriodicWave
参数类型说明
realFloat32Array一组余弦项(传统上是A项)
imagFloat32Array一组余弦项(传统上是A项)
constraintsConstraints一个字典对象,它指定是否应该禁用规范化(默认启用规范化)

createBiquadFilter

创建一个BiquadFilterNode

支持情况:

参考文档

() => BiquadFilterNode

createBufferSource

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

支持情况:

参考文档

() => AudioBufferSourceNode

createChannelMerger

创建一个ChannelMergerNode

支持情况:

参考文档

(numberOfInputs: number) => ChannelMergerNode
参数类型说明
numberOfInputsnumber输出流中需要保持的输入流的个数

createChannelSplitter

创建一个ChannelSplitterNode

支持情况:

参考文档

(numberOfOutputs: number) => ChannelSplitterNode
参数类型说明
numberOfOutputsnumber要分别输出的输入音频流中的通道数

createDelay

创建一个DelayNode

支持情况:

参考文档

(maxDelayTime: number) => DelayNode
参数类型说明
maxDelayTimenumber最大延迟时间

示例代码

let audioCtx = Taro.createWebAudioContext()
const delayNode = audioCtx.createDelay(5)

createDynamicsCompressor

创建一个DynamicsCompressorNode

支持情况:

参考文档

() => DynamicsCompressorNode

示例代码

let audioCtx = Taro.createWebAudioContext()
let compressor = audioCtx.createDynamicsCompressor()

compressor.threshold.value = -50
compressor.knee.value = 40
compressor.ratio.value = 12
compressor.attack.value = 0
compressor.release.value = 0.25

createScriptProcessor

创建一个ScriptProcessorNode

支持情况:

参考文档

(bufferSize: number, numberOfInputChannels: number, numberOfOutputChannels: number) => ScriptProcessorNode
参数类型说明
bufferSizenumber缓冲区大小,以样本帧为单位
numberOfInputChannelsnumber用于指定输入 node 的声道的数量
numberOfOutputChannelsnumber用于指定输出 node 的声道的数量

示例代码

let audioCtx = Taro.createWebAudioContext()
const sampleSize = 4096
audioContext.createScriptProcessor(sampleSize, 1, 1)

createPanner

创建一个PannerNode

支持情况:

参考文档

() => PannerNode

createBuffer

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

支持情况:

参考文档

(numOfChannels: number, length: number, sampleRate: number) => AudioBuffer
参数类型说明
numOfChannelsnumber定义了 buffer 中包含的声频通道数量的整数
lengthnumber代表 buffer 中的样本帧数的整数
sampleRatenumber线性音频样本的采样率,即每一秒包含的关键帧的个数

示例代码

const audioCtx = Taro.createWebAudioContext()
const channels = 2, frameCount = audioCtx.sampleRate * 2.0
const myArrayBuffer = audioCtx.createBuffer(channels, frameCount, audioCtx.sampleRate)

decodeAudioData

异步解码一段资源为AudioBuffer。

支持情况:

参考文档

() => AudioBuffer

示例代码

Taro.request({
url: url, // 音频 url
responseType: 'arraybuffer',
success: res => {
audioCtx.decodeAudioData(res.data, buffer => {
console.log(buffer)
}, err => {
console.error('decodeAudioData fail', err)
})
}
})

参数

createPeriodicWave

Constraints

字典对象

参数类型默认值必填说明
disableNormalizationbooleanfalse如果指定为 true 则禁用标准化

示例代码

监听状态

const audioCtx = Taro.createWebAudioContext()
audioCtx.onstatechange = () => {
console.log(ctx.state)
}
setTimeout(audioCtx.suspend, 1000)
setTimeout(audioCtx.resume, 2000)

API 支持度

API微信小程序H5React Native
WebAudioContext✔️
WebAudioContext.close✔️
WebAudioContext.resume✔️
WebAudioContext.suspend✔️
WebAudioContext.createIIRFilter✔️
WebAudioContext.createWaveShaper✔️
WebAudioContext.createConstantSource✔️
WebAudioContext.createOscillator✔️
WebAudioContext.createGain✔️
WebAudioContext.createPeriodicWave✔️
WebAudioContext.createBiquadFilter✔️
WebAudioContext.createBufferSource✔️
WebAudioContext.createChannelMerger✔️
WebAudioContext.createChannelSplitter✔️
WebAudioContext.createDelay✔️
WebAudioContext.createDynamicsCompressor✔️
WebAudioContext.createScriptProcessor✔️
WebAudioContext.createPanner✔️
WebAudioContext.createBuffer✔️
WebAudioContext.decodeAudioData✔️