Thursday, 4 May 2017

Using nodejs to stream microphone from one client to others

I am trying to take audio recorded by one client and send it to other connected clients in realtime. The objective being a sort of "broadcast". I have read many explanations to help guide me, with no luck.

Currently I have the audio being written to file like so:

var fileWriter = new wav.FileWriter(outFile, {
  channels: 1,
  sampleRate: 44100,
  bitDepth: 16
});

client.on('stream', function(stream, meta) {
  stream.pipe(fileWriter); 
  stream.on('end', function() {
      fileWriter.end();
      console.log('wrote to file ' + outFile);
    });
  });
});

As you can see, I'm currently using Binaryjs to send the audio data to the server, at which point I pipe the stream to the FileWriter

I then tried to read the file and pipe it to the response

app.get('/audio', function(req, res) {
  fs.createReadStream(__dirname + '/demo.wav').pipe(res);
})

As I'm sure you've already noticed, this doesn't work. I thought that (maybe) while the file is being constructed, it would playback all updated content added to the file as well. This didn't happen, it played up to the point a client requested the file and then ended.

I am unsure of how to pass the stream data in real time to the clients requesting it. As a result of being completely new to nodejs I am not sure of the methods and terms used for this procedure and have been unable to find any direct working examples.



via zillaofthegods

No comments:

Post a Comment