【问题标题】:Node JS access audio interfaceNode JS 访问音频接口
【发布时间】:2018-11-09 02:04:26
【问题描述】:

我想将来自我的音频接口 (focusrite saffire) 的音频信号发送到我的 nodejs 服务器。我该怎么做呢?最简单的方法是从浏览器 (html5) 访问音频接口,例如使用 getUserMedia (https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) 捕获麦克风输出,但找不到通过该库访问我的音频接口的方法。否则,我打算创建一个桌面应用程序,但不知道是否有允许访问我的 USB 连接音频接口的功能/库。

【问题讨论】:

  • 您使用的是什么操作系统?如果 linux 有很多工具可以查看和更改默认输入音频设备
  • @ScottStensland 感谢您的回复,操作系统将是 linux。因此,在将默认输入音频设备更改为操作系统上的音频接口后,我可以将其用于浏览器上 getUserMedia 中的输入吗?如果是这种情况,我会在拿到音频接口后报告。

标签: javascript node.js html audio web-audio-api


【解决方案1】:

这可能与 Javascript 或 MediaDevices API 无关。在 Linux 上,使用 Firefox,PulseAudio is required 与您的音频硬件接口。由于您的声卡是一个输入/输出接口,您应该可以通过在浏览器中播放任何声音文件来轻松测试它。

大部分PulseAudio configuration 可以使用pavucontrol GUI 实现。您应该检查“配置”选项卡以及“输入设备”和“输出设备”选项卡,以确保您的 Focusrite 已正确设置并用作声音 I/O。

完成此操作后,您应该能够使用以下内容访问音频流(仅在“安全上下文”中可用,即 localhost 或通过 HTTPS 提供服务,如您提到的 MDN 页面中所述):

navigator.mediaDevices.getUserMedia({ audio: true })
  .then(function(stream) {
    // do whatever you want with this audio stream
  })

(取自MDN page about MediaDevices的代码sn-p)

向服务器发送音频是另一回事。你试过什么吗?您是否正在寻找与服务器的实时通信?如果是这样,我会先看看WebSockets APIWebRTC 文档可能也值得一读,但它更面向客户端到客户端的通信。

【讨论】:

    【解决方案2】:

    如何使用准确的设备 ID

    使用media device constrain 传递准确的设备ID。

    一个样本是

    const preferedDeviceName = '<your_device_name>'
    const deviceList = await navigator.mediaDevices.enumerateDevices()
    const audio = devices.find((device) => device.kind === 'audioinput' && device.label === preferedDeviceName)
    const {deviceId} = audio;
    navigator.mediaDevices.getUserMedia({audio: { deviceId }}
    

    如何处理并发送到后端

    this 可能重复

    还不清楚关注this

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2018-06-22
      • 2015-02-18
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 2018-10-01
      相关资源
      最近更新 更多