WaveShaperNode
接口的 curve
属性是一个描述要被应用的畸变的Float32Array
数组.
数组的中间元素被应用于每个信号数值 0
, 第一个应用于信号数值 -1
,最后一个应用于信号数值 1
; 小于 -1
或者大于 1
的数值分别按照 -1
和 1
来处理。
如有必要, 使用线性插值计算畸变曲线的中间值。
注意: 数组的值可以是 null
: 在这个情况下, 不会有畸变被应用到输入的信号上。
语法
var audioCtx = new AudioContext();
var distortion = audioCtx.createWaveShaper();
distortion.curve = myCurveDataArray; // myCurveDataArray is a Float32Array
Value
一个 Float32Array
.
示例
The following example shows basic usage of an AudioContext to create a wave shaper node. For applied examples/information, check out our Voice-change-O-matic demo (see app.js for relevant code).
Note: Sigmoid functions are commonly used for distortion curves because of their natural properties. Their S-shape, for instance, helps create a smoother sounding result. We found the below distortion curve code on 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';
规范
Specification | Status | Comment |
---|---|---|
Web Audio API curve |
Working Draft |
浏览器兼容性
BCD tables only load in the browser
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.