2011-10-20 106 views

回答

6

请随时查看示例here

详细地,创建一个波形成形曲线与此功能:

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

} 

然后,它在这样的波形成形器节点“负载”:

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

每次我需要改变失真参数,我重新创建波形曲线:

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

(我使用distCorrect使dist比例声音更好,价值发现euristically)。 您可以找到我用来创建波形曲线的算法here