Усилить MediaStreamTrack (аудио) перед трансляцией с помощью webrtc

Я использую getAudioTracks() для получения звука из элемента видео. Затем мне нужно усилить (увеличить громкость) этого audioTrack, прежде чем я добавлю его на холст с помощью addTrack() и перекачаю оба с помощью webrtc.

Есть ли способ сделать это на стороне клиента с помощью javascript?


person ThanosSar    schedule 30.01.2017    source источник


Ответы (1)


Я придумал решение. Для тех, кому нужно то же самое:

            // supposing we have the getUserMedia stream and a canvas
            // we want to stream the canvas content and the
            // amplified audio from user's microphone

            var s = canvas.captureStream();

            var context = new AudioContext(); 

            var gainNode = context.createGain();
            gainNode.gain.value = 1;

            // compress to avoid clipping
            var compressor = context.createDynamicsCompressor();
            compressor.threshold.value = -30;
            compressor.knee.value = 40;
            compressor.ratio.value = 4;
            compressor.reduction.value = -10;
            compressor.attack.value = 0;
            compressor.release.value = 0.25;

            var destination = context.createMediaStreamDestination();

            var input = context.createMediaStreamSource(stream); 

            input.connect(compressor); 
            compressor.connect(gainNode); 
            gainNode.connect( destination); 

            var audioTracks = destination.stream.getAudioTracks();

            // use a slider to alter the value of amplification dynamically
            var rangeElement = document.getElementById("amplifierSlider"); 
            rangeElement .addEventListener("input", function() {
                gainNode.gain.value = parseFloat(rangeElement .value); 
            }, false); 

            for (var i=0; i < audioTracks.length; i++) {  
                s.addTrack(audioTracks[i]);   
            } 

            // stream the canvas with the added audio tracks

https://jsfiddle.net/Thanos_Sar/Lt00nr8g/

person ThanosSar    schedule 05.02.2017
comment
Это действительно здорово, но вы не знаете, как отменить обратную связь?? - person Dara Java; 03.02.2019