2011-10-20 14 views

Odpowiedz

6

Zapraszam do obejrzenia przykładu here.

W szczególności utworzyć krzywą Waveshaper tej funkcji:

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)); 
    } 

} 

Wtedy "ładowania", to w węźle Waveshaper tak:

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

Everytime trzeba zmienić parametr zniekształceń , I ponownie utworzyć krzywą Waveshaper:

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

(używam distCorrect aby dist ortion brzmi ładniej, wartości znalezione euristycznie). Możesz znaleźć algorytm, którego używam do utworzenia krzywej falowej here

Powiązane problemy