title: WebAudioContext

sidebar_label: WebAudioContext

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

支持情况:WebAudioContext - 图1 WebAudioContext - 图2 WebAudioContext - 图3

参考文档

方法

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

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

close

关闭WebAudioContext

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

支持情况:WebAudioContext - 图4 WebAudioContext - 图5 WebAudioContext - 图6

参考文档

  1. () => Promise<void>

示例代码

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

resume

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

支持情况:WebAudioContext - 图7 WebAudioContext - 图8 WebAudioContext - 图9

参考文档

  1. () => Promise<void>

suspend

同步暂停 WebAudioContext 上下文

支持情况:WebAudioContext - 图10 WebAudioContext - 图11 WebAudioContext - 图12

参考文档

  1. () => Promise<void>

createIIRFilter

创建一个 IIRFilterNode

支持情况:WebAudioContext - 图13 WebAudioContext - 图14 WebAudioContext - 图15

参考文档

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

示例代码

  1. let lowPassCoefs = [
  2. {
  3. frequency: 200,
  4. feedforward: [0.00020298, 0.0004059599, 0.00020298],
  5. feedback: [1.0126964558, -1.9991880801, 0.9873035442]
  6. },
  7. {
  8. frequency: 500,
  9. feedforward: [0.0012681742, 0.0025363483, 0.0012681742],
  10. feedback: [1.0317185917, -1.9949273033, 0.9682814083]
  11. },
  12. {
  13. frequency: 1000,
  14. feedforward: [0.0050662636, 0.0101325272, 0.0050662636],
  15. feedback: [1.0632762845, -1.9797349456, 0.9367237155]
  16. },
  17. {
  18. frequency: 5000,
  19. feedforward: [0.1215955842, 0.2431911684, 0.1215955842],
  20. feedback: [1.2912769759, -1.5136176632, 0.7087230241]
  21. }
  22. ]
  23. const feedForward = lowPassCoefs[filterNumber].feedforward
  24. const feedBack = lowPassCoefs[filterNumber].feedback
  25. const iirFilter = audioContext.createIIRFilter(feedForward, feedBack)

createWaveShaper

创建一个 WaveShaperNode

支持情况:WebAudioContext - 图16 WebAudioContext - 图17 WebAudioContext - 图18

参考文档

  1. () => WaveShaperNode

createConstantSource

创建一个 ConstantSourceNode

支持情况:WebAudioContext - 图19 WebAudioContext - 图20 WebAudioContext - 图21

参考文档

  1. () => ConstantSourceNode

createOscillator

创建一个 OscillatorNode

支持情况:WebAudioContext - 图22 WebAudioContext - 图23 WebAudioContext - 图24

参考文档

  1. () => OscillatorNode

createGain

创建一个 GainNode

支持情况:WebAudioContext - 图25 WebAudioContext - 图26 WebAudioContext - 图27

参考文档

  1. () => GainNode

createPeriodicWave

创建一个 PeriodicWaveNode

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

  1. const real = new Float32Array(2)
  2. const imag = new Float32Array(2)
  3. real[0] = 0
  4. imag[0] = 0
  5. real[1] = 1
  6. imag[1] = 0
  7. const waveNode = audioContext.createPeriodicWave(real, imag, {disableNormalization: true})

支持情况:WebAudioContext - 图28 WebAudioContext - 图29 WebAudioContext - 图30

参考文档

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

createBiquadFilter

创建一个BiquadFilterNode

支持情况:WebAudioContext - 图31 WebAudioContext - 图32 WebAudioContext - 图33

参考文档

  1. () => BiquadFilterNode

createBufferSource

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

支持情况:WebAudioContext - 图34 WebAudioContext - 图35 WebAudioContext - 图36

参考文档

  1. () => AudioBufferSourceNode

createChannelMerger

创建一个ChannelMergerNode

支持情况:WebAudioContext - 图37 WebAudioContext - 图38 WebAudioContext - 图39

参考文档

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

createChannelSplitter

创建一个ChannelSplitterNode

支持情况:WebAudioContext - 图40 WebAudioContext - 图41 WebAudioContext - 图42

参考文档

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

createDelay

创建一个DelayNode

支持情况:WebAudioContext - 图43 WebAudioContext - 图44 WebAudioContext - 图45

参考文档

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

示例代码

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

createDynamicsCompressor

创建一个DynamicsCompressorNode

支持情况:WebAudioContext - 图46 WebAudioContext - 图47 WebAudioContext - 图48

参考文档

  1. () => DynamicsCompressorNode

示例代码

  1. let audioCtx = Taro.createWebAudioContext()
  2. let compressor = audioCtx.createDynamicsCompressor()
  3. compressor.threshold.value = -50
  4. compressor.knee.value = 40
  5. compressor.ratio.value = 12
  6. compressor.attack.value = 0
  7. compressor.release.value = 0.25

createScriptProcessor

创建一个ScriptProcessorNode

支持情况:WebAudioContext - 图49 WebAudioContext - 图50 WebAudioContext - 图51

参考文档

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

示例代码

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

createPanner

创建一个PannerNode

支持情况:WebAudioContext - 图52 WebAudioContext - 图53 WebAudioContext - 图54

参考文档

  1. () => PannerNode

createBuffer

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

支持情况:WebAudioContext - 图55 WebAudioContext - 图56 WebAudioContext - 图57

参考文档

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

示例代码

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

decodeAudioData

异步解码一段资源为AudioBuffer。

支持情况:WebAudioContext - 图58 WebAudioContext - 图59 WebAudioContext - 图60

参考文档

  1. () => AudioBuffer

示例代码

  1. Taro.request({
  2. url: url, // 音频 url
  3. responseType: 'arraybuffer',
  4. success: res => {
  5. audioCtx.decodeAudioData(res.data, buffer => {
  6. console.log(buffer)
  7. }, err => {
  8. console.error('decodeAudioData fail', err)
  9. })
  10. }
  11. })

参数

createPeriodicWave

Constraints

字典对象

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

示例代码

监听状态

  1. const audioCtx = Taro.createWebAudioContext()
  2. audioCtx.onstatechange = () => {
  3. console.log(ctx.state)
  4. }
  5. setTimeout(audioCtx.suspend, 1000)
  6. setTimeout(audioCtx.resume, 2000)

API 支持度

API 微信小程序 H5 React 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 ✔️