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 的定义 |
工作草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 14 | ≤18 | 25 | 不支持 | 15 | 6 |
WaveShaperNode() 构造函数 | 551 | ≤79 | 53 | 不支持 | 42 | 未知 |
curve | 14 | 12 | 25 | 不支持 | 15 | 6 |
oversample | 14 | 12 | 26 | 不支持 | 15 | 6 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
WaveShaperNode() 构造函数 | 551 | 551 | 未知 | 53 | 未知 | 42 | 未知 |
curve | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
oversample | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
1. 在 Chrome 59 之前,不支持默认值。
2. 在 Samsung Internet 7.0 之前,不支持默认值。