How to capture audio in javascript?

前端 未结 3 1886
无人及你
无人及你 2020-12-12 23:41

I am currently using getUserMedia(), which is only working on Firefox and Chrome, yet it got deprecated and works only on https (in Chrome). Is there any other/

3条回答
  •  佛祖请我去吃肉
    2020-12-13 00:06

    Chrome 60+ does require using https, since getUserMedia is a powerful feature. The API access shouldn't work in non-secure domains, as that API access may get bled over to non-secure actors. Firefox still supports getUserMedia over http, though.

    I've been using RecorderJS and it served my purposes well. Here is a code example. (source)

    function RecordAudio(stream, cfg) {
    
      var config = cfg || {};
      var bufferLen = config.bufferLen || 4096;
      var numChannels = config.numChannels || 2;
      this.context = stream.context;
      var recordBuffers = [];
      var recording = false;
      this.node = (this.context.createScriptProcessor ||
        this.context.createJavaScriptNode).call(this.context,
        bufferLen, numChannels, numChannels);
    
      stream.connect(this.node);
      this.node.connect(this.context.destination);
    
      this.node.onaudioprocess = function(e) {
        if (!recording) return;
        for (var i = 0; i < numChannels; i++) {
          if (!recordBuffers[i]) recordBuffers[i] = [];
          recordBuffers[i].push.apply(recordBuffers[i], e.inputBuffer.getChannelData(i));
        }
      }
    
      this.getData = function() {
        var tmp = recordBuffers;
        recordBuffers = [];
        return tmp; // returns an array of array containing data from various channels
      };
    
      this.start() = function() {
        recording = true;
      };
    
      this.stop() = function() {
        recording = false;
      };
    }
    

    The usage is straightforward:

    var recorder = new RecordAudio(userMedia);
    recorder.start();
    recorder.stop();
    var recordedData = recorder.getData()
    

    Edit: You may also want to check this answer if nothing works.

提交回复
热议问题