javascript - Chrome 扩展 : Record Microphone and Speaker in Background JS

标签 javascript google-chrome-extension audio-recording

根据最新更新,在后台 js 中捕获麦克风和扬声器音频以进行实时音频处理的正确方法是什么。我被困在这我已经尝试了所有媒体记录器 api、记录 js api 和 chrome 桌面捕获,但它们都在返回麦克风音频。他们都无法捕捉到扬声器的音频。请提出一种实现此方案的方法

下面是捕获麦克风但不捕获扬声器的示例代码:

var audioChunks;
startRecord.onclick = e => {
  startRecord.disabled = true;
  stopRecord.disabled=false;
  // This will prompt for permission if not allowed earlier
  navigator.mediaDevices.getUserMedia({audio:true})
    .then(stream => {
      audioChunks = []; 
      rec = new MediaRecorder(stream);
      rec.ondataavailable = e => {
        audioChunks.push(e.data);
        if (rec.state == "inactive"){
          let blob = new Blob(audioChunks,{type:'audio/x-mpeg-3'});
          recordedAudio.src = URL.createObjectURL(blob);
          recordedAudio.controls=true;
          recordedAudio.autoplay=true;
          audioDownload.href = recordedAudio.src;
          audioDownload.download = 'mp3';
          audioDownload.innerHTML = 'download';
       }
      }
    rec.start();  
    })
    .catch(e=>console.log(e));
}
stopRecord.onclick = e => {
  startRecord.disabled = false;
  stopRecord.disabled=true;
  rec.stop();
}

最佳答案

当您第一次调用 getUserMedia 时您可用的设备只有音频(即麦克风)和摄像头(默认网络摄像头)。但是,如果您调用 enumerateDevices您将获得所有可用音频设备的列表。然后,您可以像这样指定声卡的特定 ID:

navigator.mediaDevices.getUserMedia({audio:{deviceId:{exact: deviceId}}})
这需要两次调用 getUserMedia 并在那里等待才能正常工作。另外,我应该注意 devicechange mediaDevices 的 Chromium 浏览器中不会触发事件.这将使检测配置更改变得更加困难。
对于背景扩展,我认为您必须尝试一下才能使其正常工作。您可以将设备列表呈现给用户并让他们选择,但这会将一些消息传递给您的前端脚本并再次返回,从而使您的设置复杂化。

关于javascript - Chrome 扩展 : Record Microphone and Speaker in Background JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60496313/

相关文章:

javascript - BookshelfJS 返回 BelongsToMany 的多个主元

javascript - 如何在谷歌浏览器中调试以编程方式注入(inject)的 JS 文件?

javascript - 在谷歌浏览器扩展中获取鼠标坐标

javascript - 如何构建我的应用程序以在网站上运行时使用 localStorage,而在作为 Chrome 应用程序运行时使用 chrome.storage?

python - 尝试从麦克风录制并实时播放

C# 从声卡录制音频

javascript - 请求 Node 模块不提供 html

javascript - ES6 (ECMAScript 2015) 模块 : import index. js

javascript - 动态添加数据点到人力车图

ffmpeg - 压缩大部分包含静音的 mp3