javascript - 如何从 javascript 上的 getUserMedia() 获取超过 3 声道的音频输入

标签 javascript windows macos google-chrome audio

我想从 javascript 上的 getUserMedia() 获得超过 3ch 的音频输入。

我使用谷歌浏览器。
我用Windows10连接了3ch以上音频输入的音频接口(interface),
使用 USB 电缆。
我尝试使用“navigator.mediaDevices.getUserMedia(constraints);”从音频接口(interface)获取声音在 JavaScript 上。
我可以得到 1 和 2 声道音频输入。
但我不能从音频接口(interface)获得超过 3 声道的音频输入。

音频接口(interface)附带的数字混音器软件可以获得3ch以上的音频输入。

我认为 getUserMedia() 从默认的 Windows 音频驱动程序中获取声音。
所以我可以获得 1 和 2 声道音频输入。

听说mac OS的音频驱动是USB AUDIO CLASS 2.0。
我在mac OS上试过了。
我可以得到 1 和 2 声道音频输入。
但我不能使用 getUserMedia() 获得超过 3 声道的音频输入。

如何从 javascript 的音频接口(interface)获得超过 3ch 的音频输入?

我认为如果 getUserMedia() 从 ASIO 驱动程序中获取声音,我可以做到。
但我不确定如何在 javascript 上的 getUserMedia() 上使用 ASIO 驱动程序。

如果你知道什么,请告诉我。
先感谢您。

最佳答案

首先让我先说,即使您确实在浏览器中使用 JS 进行多 channel (3+ channel )输入记录,我会惊讶地看到它运行良好且至少没有非常高的延迟。话虽如此,在此过程中尝试和学习总是值得的。

Chrome 的 audio_input_controller.cc

如果您查看 Chromium 的源代码(Chrome 是基于其构建的),文件 audio_input_controller.cc状态:

Line 31 >> const int kMaxInputChannels = 3;

这表明,如果您想进入 3 个以上的 channel ,我认为这是不可能的。这是假设 Chrome 没有在此基础上进一步构建并添加更多 channel 输入支持,但是到目前为止,我还没有看到任何直接通过 Chrome 支持高于立体声 channel 输入的东西。这是在没有特定操作系统的 GitHub 文件夹中,所以我假设它在所有桌面平台上都使用。

media.getusermedia.channels

MediaDevices.getUserMedia() docs 中所述:

The preference media.getusermedia.channels lets you control the maximum number of channels to be captured; a value of 0, the default, tells getUserMedia() to capture all of the available, supported, channels.



因此,为了测试实际支持的最大输入 channel 数,我将此参数设置为 0 并查看实际返回了多少音频缓冲区 - 这样您就可以确定系统的 channel 限制。

概括

我不确定您的应用程序的目标是什么,但就通过浏览器的多 channel 输入而言,除了等到浏览器本身支持多 channel 输入之外别无选择。就像你说的,你的 DAW 可以访问超过 3ch 的输入,因为这是一个独立于浏览器运行的编译软件,并且可以访问所有系统级信息(即你的声卡硬件及其所有通信)。

推荐

我不确定您的编程经验水平,但是对于这种事情,您通常会使用 C++(或其他语言,但 C++ 通常是音频的首选)来构建一个与您的浏览器分开的应用程序并在您的浏览器上运行它个人电脑。要在 C++ 中获得多声道音频输入,您可以使用像 JUCE 这样的框架。或 portaudio .

如果您致力于在 Web 浏览器中使用 JS,则可以创建一个将音频从桌面发送到本地网页的进程。这可以在 C++ 中完成,或者如果您对此比较陌生,也许 Python 使用 PyAudio上手会更简单。

此外,如果您熟悉/没有被介绍给 Electron.js,您还可以构建一个已编译的应用程序(即 Windows 上的 .exe),它可以访问所有音频 channel ,因为它不在浏览器中运行,而只是使用浏览器来解释 javascript。我找到了 binding for portaudio在应支持多 channel 输入的 Electron.js 中使用。这样你就可以只使用 JavaScript/HTML/CSS 编写一个桌面应用程序并拥有多声道音频输入!

关于javascript - 如何从 javascript 上的 getUserMedia() 获取超过 3 声道的音频输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51123229/

相关文章:

java - Windows 7 上 0MQ/ZeroMQ 和 Java 的明确万无一失的步骤?

php - 在 osx 10.9 上编译 phalcon 时出现问题

javascript - 附加组件 SDK Mozilla Firefox currentURI

javascript - $error.pattern 无法正常工作

javascript - 如何使我的 Electron 应用程序表现得像移动设备

c++ - 将消息格式化为不同的语言

linux - Rust非交互式标准输入

Javascript 将功能添加到影子根中的自定义元素

c# - 已编译的单声道缺少默认 .NET 库 - 未定义或导入 System.Object

mysql - MAMP 专业版 : How to connect to MySql server on Mac OS via Network?