API веб-аудио WaveShaperNode - PullRequest
       19

API веб-аудио WaveShaperNode

7 голосов
/ 20 октября 2011

Как вы используете wavehapernode в веб-аудио API?конкретный атрибут кривой Float32Array?

1 Ответ

6 голосов
/ 16 ноября 2011

Не стесняйтесь смотреть пример здесь .

Подробно, я создаю кривую волновой формы с помощью этой функции:

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, чтобы сделать искажениезвучит приятнее, ценности найдены эвристически).Вы можете найти алгоритм, который я использую для создания кривой волновода здесь

...