Node.js Socket.io与AudioContext在接收时发送和接收音频错误
我正在尝试构建一些东西,用户可以使用socket.io、audioContext、js(前端)和Node.js、socket.io(服务器)立即向许多人发送音频 我可以录制音频,将其发送到服务器并发送回其他用户,但我无法播放数据。我想这一定是我如何发送它们或如何处理接收它们的缓冲区的问题 我收到以下错误:更新强> 传递给decodeAudioData的缓冲区包含未知的内容类型 音频传输正常,创建的缓冲区没有错误,但没有声音反馈。 用户按下record并开始录制/流媒体,具有以下功能: 这就是一切的开始:Node.js Socket.io与AudioContext在接收时发送和接收音频错误,node.js,sockets,audio,socket.io,audiocontext,Node.js,Sockets,Audio,Socket.io,Audiocontext,我正在尝试构建一些东西,用户可以使用socket.io、audioContext、js(前端)和Node.js、socket.io(服务器)立即向许多人发送音频 我可以录制音频,将其发送到服务器并发送回其他用户,但我无法播放数据。我想这一定是我如何发送它们或如何处理接收它们的缓冲区的问题 我收到以下错误:更新 传递给decodeAudioData的缓冲区包含未知的内容类型 音频传输正常,创建的缓冲区没有错误,但没有声音反馈。 用户按下record并开始录制/流媒体,具有以下功能: 这就是一切的开
navigator.getUserMedia({audio: true,video: false}, initializeRecorder, errorCallback);
function initializeRecorder(stream) {
var bufferSize = 2048;
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var source = audioCtx.createMediaStreamSource(stream);
var recorder = audioCtx.createScriptProcessor(bufferSize, 1, 1);
recorder.onaudioprocess = recorderProcess;
source.connect(recorder);
recorder.connect(audioCtx.destination);
recording = true;
initialized = true;
play = false;
stop = true;
}
function recorderProcess(e) {
var left = e.inputBuffer.getChannelData(0);
socket.emit('audio-blod-send', convertFloat32ToInt16(left));
}
function convertFloat32ToInt16(buffer) {
l = buffer.length;
buf = new Int16Array(l);
while (l--) {
buf[l] = Math.min(1, buffer[l])*0x7FFF;
}
return buf.buffer;
}
然后,服务器使用套接字广播原始发件人发送的内容:
socket.on('audio-blod-send',function(data){
socket.broadcast.to(roomName).emit('audio-blod-receive', data);
});
然后播放数据:更新强>
我使用的是audioContext.decodeData,我发现它只用于读取/解码MP3或WAV文件中的音频,而不是流媒体。使用新代码时,不会出现错误,但不会出现音频反馈
socket.on('audio-blod-receive',function(data) {
playAudio(data);
});
function playAudio(buffer)
{
var audioCtx;
var started = false;
if(!audioCtx) {
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
}
source = audioCtx.createBufferSource();
audioBuffer = audioCtx.createBuffer( 1, 2048, audioCtx.sampleRate );
audioBuffer.getChannelData( 0 ).set( buffer );
source.buffer = audioBuffer;
source.connect( audioCtx.destination );
source.start(0);
console.log(buffer);
}
如果有人对我正在做的事情感兴趣,请随时与我联系。您好,音频反馈有什么进展吗?我也有同样的问题。嗨@drakoumelitos,你有没有让它正常工作过?我们正试图让音频流以类似的方式工作,但在播放音频时遇到问题。@AlanHollis没人,我放弃了,有时它会工作,而我会听到静态的其他人什么也听不到。@drakoumelitos你成功了吗,请提供到你的github repo的链接。这是我的邮件sourab。reddy2k14@gmail.com,请你重新发送,我没有收到你的原始邮件,我的坏消息。