объединение данных двух каналов из аудиобуфера в javascript - PullRequest
1 голос
/ 28 мая 2020

как мы можем объединить данные из двух каналов звукового буфера в arrayBuffer, чтобы мы могли преобразовать этот arrayBuffer в Blob?

var floatarray1 = new Float32Array();
audioBuffer.copyFromChannel(floatarray1,0);

var floatarray2 = new Float32Array();
audioBuffer.copyFromChannel(floatarray2,1);

как мы можем объединить "floatarray1" и "floatarray2", которые копируются из «audioBuffer» в один «arrayBuffer»?

1 Ответ

1 голос
/ 28 мая 2020

Для «слияния» двух аудиоканалов в один канал. Это можно назвать звуковым «миксом». Очень простой микс - просто сложить вместе каждый соответствующий сэмпл, например:

var mixed = new Float32Array(floatarray1.length)

for(i=0;i<floatarray1.length;i++){
    mixed[i] = floatarray1[i]+floatarray2[i]
}

Если громкость звука довольно высока и, возможно, «переполнена», вам может потребоваться выбрать коэффициент (<1.0 ) для умножения на каждую выборку, чтобы уменьшить риск переполнения: </p>

const voladj = 0.6
var mixed = new Float32Array(floatarray1.length)

for(i=0;i<floatarray1.length;i++){
    mixed[i] = (floatarray1[i]+floatarray2[i])*voladj
}

Я думаю, что этот простой алгоритм уже достаточно хорош, чтобы вычислить его в Javascript.

Надеюсь, это поможет.

...