如何在 javascript 中捕获音频?

新手上路,请多包涵

我目前正在使用 getUserMedia() ,它仅适用于 Firefox 和 Chrome,但它已被弃用并且仅适用于 https(在 Chrome 中)。是否有任何其他/更好的方法来获取适用于所有平台的 javascript 中的语音输入?

例如,像 web.whatsapp.com 应用程序这样的网站如何录制音频? getUserMedia() 提示初次使用的用户允许录音,而 Whatsapp 应用程序不需要用户的许可。

我目前使用的 getUserMedia() 看起来像这样:

 navigator.getUserMedia(
    {
        "audio": {
            "mandatory": {
                "googEchoCancellation": "false",
                "googAutoGainControl": "false",
                "googNoiseSuppression": "false",
                "googHighpassFilter": "false"
            },
            "optional": []
        },
    }, gotStream, function(e) {
        console.log(e);
    });

原文由 user2212461 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 734
2 个回答

Chrome 60+ 确实 需要使用 https ,因为 getUserMedia 是一项强大的 功能。 API 访问不应该在非安全域中工作,因为 API 访问可能会流向非安全参与者。不过,Firefox 仍然支持 getUserMedia 通过 http

我一直在使用 RecorderJS ,它很好地满足了我的目的。这是一个代码示例。 ( 来源

 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;
  };
}

用法很简单:

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

编辑:如果没有任何效果,您可能还想检查这个 答案

原文由 George Netu 发布,翻译遵循 CC BY-SA 4.0 许可协议

Recorder JS 为您完成简单的工作。它适用于网络音频 API 节点

Chrome 和 Firefox 浏览器现已进化。有一个内置的 MediaRecoder API 可以为您录音。

 navigator.mediaDevices.getUserMedia({audio:true})
    .then(stream => {
        rec = new MediaRecorder(stream);
        rec.ondataavailable = e => {
            audioChunks.push(e.data);
            if (rec.state == "inactive"){
               // Use blob to create a new Object URL and playback/download
            }
        }
    })
    .catch(e=>console.log(e));

工作 演示

MediaRecoder 支持从

Chrome 支持:47

Firefox 支持:25.0

原文由 Sasi Varunan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题