/**
* This function creates the instance of Float32Array for curve property in WaveShaperNode.
* @param {number} amount This argument is distortion level.
* @param {number} numberOfSamples This argument is size of Float32Array.
* @return {Float32Array|null} This is curve property in WaveShaperNode.
*/
var createCurve = function(amount, numberOfSamples) {
if ((amount > 0) && (amount < 1)) {
var curves = new Float32Array(numberOfSamples);
var k = (2 * amount) / (1 - amount);
for (var i = 0; i < numberOfSamples; i++) {
// LINEAR INTERPOLATION: x := (c - a) * (z - y) / (b - a) + y
// a = 0, b = 2048, z = 1, y = -1, c = i
var x = (((i - 0) * (1 - (-1))) / (numberOfSamples - 0)) + (-1);
curves[i] = ((1 + k) * x) / (1 + k * Math.abs(x));
}
return curves;
} else {
return null; // Clean sound (default value)
}
};
/*
* Add code to sample code 01
*/
// ....
var NUM_SUMPLES = 4096;
/**
* This function creates the instance of Float32Array for curve property in WaveShaperNode.
* @param {number} amount This argument is distortion level.
* @return {Float32Array|null} This is curve property in WaveShaperNode.
*/
var createCurve = function(amount) {
if ((amount > 0) && (amount < 1)) {
var curves = new Float32Array(NUM_SUMPLES);
var k = (2 * amount) / (1 - amount);
for (var i = 0; i < NUM_SUMPLES; i++) {
// LINEAR INTERPOLATION: x := (c - a) * (z - y) / (b - a) + y
// a = 0, b = 2048, z = 1, y = -1, c = i
var x = (((i - 0) * (1 - (-1))) / (NUM_SUMPLES - 0)) + (-1);
curves[i] = ((1 + k) * x) / (1 + k * Math.abs(x));
}
return curves;
} else {
return null; // Clean sound (default value)
}
};
var DISTORTIONS = {
CRUNCH : 0.5,
OVERDRIVE : 0.7,
DISTORTION : 0.8,
FUZZ : 0.9
};
// Set curve
distortion.curve = createCurve(DISTORTIONS.OVERDRIVE);