0

I am trying to send audio file (or chunk) via socket.io.

I tried:

// server
    socket.on('client-get-audio', function (data) {
      //data.fname - name of requested file
      var buffer = fs.readFileSync(data.fname, null);
      // try 2 - read arraybuffer
      //var buffer = fs.readFileSync(data.fname, null).buffer;
      buffer = new Uint8Array(buffer);
      socket.emit('audio-data', {count: 1, buff: buffer});
    });

I can not decode data:

// client
// ctx - AudioContext
// source - buffer source
socket.on('audio-data', function(data){
  ctx.decodeAudioData(data.buff, decoded => {
  source.buffer = decoded;
  source.start(0);
});

I will not describe all my attempts, there were a lot of them.

update

working variant

// server
socket.on('client-get-audio', function (data) {
    //data.fname - name of requested file
    var buffer = fs.readFileSync(data.fname, null);
    socket.emit('audio-data', {count: 1, buff: buffer});
});


// client

  function toArrayBuffer(buf) {
      var ab = new ArrayBuffer(buf.length);
      var view = new Uint8Array(ab);
      for (var i = 0; i < buf.length; ++i) {
          view[i] = buf[i];
      }
      return ab;
  }

// ctx - AudioContext
// source - buffer source
socket.on('audio-data', function(data){
  ctx.decodeAudioData(toArrayBuffer(data.buff.data), decoded => {
  source.buffer = decoded;
  source.start(0);
});

Maybe someone can suggest a more correct variant?

Kaen
  • 1
  • 2

0 Answers0