2011-10-20 19 views

Respuesta

6

Siéntase libre de mirar un ejemplo here.

En detalle, I crear una curva waveshaper con esta función:

WAAMorningStar.prototype.createWSCurve = function (amount, n_samples) { 

if ((amount >= 0) && (amount < 1)) { 

    ND.dist = amount; 

    var k = 2 * ND.dist/(1 - ND.dist); 

    for (var i = 0; i < n_samples; i+=1) { 
     // 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))/(n_samples - 0) + (-1); 
     this.wsCurve[i] = (1 + k) * x/(1+ k * Math.abs(x)); 
    } 

} 

Entonces "carga" en un nodo waveshaper como esto:

this.createWSCurve(ND.dist, this.nSamples); 
this.sigmaDistortNode = this.context.createWaveShaper(); 
this.sigmaDistortNode.curve = this.wsCurve; 

Cada vez que tenga que cambiar el parámetro de distorsión , Recreé la curva wavehasper:

WAAMorningStar.prototype.setDistortion = function (distValue) { 
    var distCorrect = distValue; 
    if (distValue < -1) { 
     distCorrect = -1; 
    } 
    if (distValue >= 1) { 
     distCorrect = 0.985; 
    } 
    this.createWSCurve (distCorrect, this.nSamples); 
} 

(Yo uso distCorrect para hacer el dist el sonido de ortion es más agradable, los valores se encuentran en términos generales). Puede encontrar el algoritmo que utilizo para crear la curva del wavepasper here