WaveShaperNode - 表示一个非线性失真器

WaveShaperNode 接口表示一个非线性失真器。它是一个 AudioNode,使用曲线向信号施加波形畸变。除了明显的失真效果外,它通常还用于为信号添加暖调的感觉。

WaveShaperNode 始终只有一个输入和一个输出。

输入数量 1
输出数量 1
通道计数模式 "max"
通道数 2(在默认计数模式下不使用)
通道解释 "speakers"

构造函数

WaveShaperNode()

创建一个 WaveShaperNode 对象的新实例。

属性

从其父接口 AudioNode 继承了属性。

WaveShaperNode.curve

一个 Float32Array 数字,描述了要应用的失真值。

WaveShaperNode.oversample

一个枚举值,指示是否必须使用过采样。过采样是一种在将失真效果应用于音频信号之前创建更多采样(上采样)的技术。

方法

没有特有的方法,从其父接口 AudioNode 继承了属性。

实例

以下实例显示了 AudioContext 创建波形整形器节点的基本用法。有关应用实例 / 信息,请查看我们的 Voice-change-O-matic 实例参见 app.js 相关代码)。

注意:由于其自然特性,Sigmoid 函数通常用于失真曲线。例如,它们的 S 形有助于产生更平滑的声音效果。我们在 Stack Overflow 中找到了以下失真曲线代码。

var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var distortion = audioCtx.createWaveShaper();

// ...

function makeDistortionCurve(amount) {
  var k = typeof amount === 'number' ? amount : 50,
    n_samples = 44100,
    curve = new Float32Array(n_samples),
    deg = Math.PI / 180,
    i = 0,
    x;
  for ( ; i < n_samples; ++i ) {
    x = i * 2 / n_samples - 1;
    curve[i] = ( 3 + k ) * x * 20 * deg / ( Math.PI + k * Math.abs(x) );
  }
  return curve;
};

// ...

distortion.curve = makeDistortionCurve(400);
distortion.oversample = '4x';

规范

规范 状态 备注
Web Audio API
WaveShaperNode 的定义
工作草案 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持14≤1825 不支持156
WaveShaperNode() 构造函数551≤7953 不支持42 未知
curve141225 不支持156
oversample141226 不支持156

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 支持18 未知26 未知14 支持
WaveShaperNode() 构造函数551551 未知53 未知42 未知
curve 支持18 未知26 未知14 支持
oversample 支持18 未知26 未知14 支持

1. 在 Chrome 59 之前,不支持默认值。

2. 在 Samsung Internet 7.0 之前,不支持默认值。

相关链接