Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Socket.io与AudioContext在接收时发送和接收音频错误_Node.js_Sockets_Audio_Socket.io_Audiocontext - Fatal编程技术网

Node.js Socket.io与AudioContext在接收时发送和接收音频错误

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并开始录制/流媒体,具有以下功能: 这就是一切的开

我正在尝试构建一些东西,用户可以使用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,请你重新发送,我没有收到你的原始邮件,我的坏消息。