Я пытаюсь транслировать захваченный звук микрофона через веб-сокет. Я вижу, что буферный массив отправляется, и в массиве есть действительные данные, но принимающая сторона клиента не может их слышать. Я почти уверен, что моя функция воспроизведения правильная, потому что я могу генерировать белый шум, заполняя массив случайными числами и используя функцию воспроизведения, чтобы услышать его. Я думаю, может быть, звук, который он транслирует, слишком тихий, чтобы его можно было услышать, потому что числа, сгенерированные в массиве, в основном находятся в диапазоне .000###. Есть идеи? Захват звука с микрофона и его трансляция кажутся слишком сложными... :/
//broadcasting side
navigator.mediaDevices.getUserMedia({audio: true,video: false}) // request cam
.then(stream => {
vid.srcObject = stream;
context = new AudioContext();
var source = context.createMediaStreamSource(stream);
var processor = context.createScriptProcessor(1024, 2, 2);
source.connect(processor);
processor.connect(context.destination);
processor.onaudioprocess = function(e) {
audiodata = e.inputBuffer.getChannelData(1);
socket.send(JSON.stringify({sound: audiodata, to: to, from: '$username', text:''}));
};
return vid.play(); // returns a Promise
});
//receiving side object to array
if(typeof (message.sound) != "undefined"){
//$('#video_stream_btn').trigger('click');
var json_sound = message.sound;
var array_sound = [];
for(var i in json_sound){
array_sound.push([i, json_sound [i]]);
}
if(typeof(context) == 'undefined'){
context = new AudioContext();
}
play_sound(array_sound, context);
return;
}
// receiving side play sound function
function play_sound(raw,context){
//alert(raw.length);
var audioBuffer = context.createBuffer(1, raw.length, context.sampleRate);
audioBuffer.getChannelData(0).set(raw);
var source = context.createBufferSource();
source.buffer = audioBuffer;
source.connect(context.destination);
source.start(0);
}