Как получить более 3-х канальный аудиовход от getUserMedia () на JavaScript - PullRequest
0 голосов
/ 01 июля 2018

Я бы хотел получить более 3-х канальный аудиовход от getUserMedia () на javascript.

Я использую Google Chrome. Я подключил аудиоинтерфейс с более чем 3-канальным аудиовходом с Windows10, с помощью USB-кабеля. Я попытался получить звук из аудиоинтерфейса, используя "navigator.mediaDevices.getUserMedia (constraints);" на JavaScript Я могу получить 1 и 2-канальный аудио вход. Но я не могу получить более 3-х канального аудиовхода от аудиоинтерфейса.

Программное обеспечение цифрового микшера, подключенное к аудиоинтерфейсу, может получать более 3-х канального аудиовхода.

Я думаю, что getUserMedia () получит звук из аудио драйвера Windows по умолчанию. Таким образом, я могу получить 1 и 2-канальный аудиовход.

Я слышал, что аудиодрайвером Mac OS является USB AUDIO CLASS 2.0. Я попробовал это на Mac OS. Я могу получить 1 и 2-канальный аудио вход. Но я не могу получить более 3-х канального аудиовхода с помощью getUserMedia ().

Как я могу получить более 3-х канального аудиовхода через аудиоинтерфейс на javascript?

Я думаю, что если getUserMedia () получит звук из драйвера ASIO, я могу это сделать. Но я не уверен, как использовать драйвер ASIO на getUserMedia () на JavaScript.

Если вы что-то знаете, пожалуйста, дайте мне знать. Заранее спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Прежде всего, позвольте мне начать с того, что даже если вы получите многоканальную (3+ канала) запись ввода, работающую с JS в браузере, я был бы удивлен, увидев, что она работает хорошо, по крайней мере, с очень большой задержкой. При этом всегда стоит идти и учиться в процессе.

Chromium audio_input_controller.cc

Если вы проверите исходный код для Chromium (Chrome построен поверх), файл audio_input_controller.cc сообщает:

Line 31 >> const int kMaxInputChannels = 3;

Что говорит о том, что если вы хотите перейти выше 3 каналов, я не думаю, что это возможно. Предполагается, что Chrome больше не опирался на это и добавил больше поддержки ввода канала, однако я пока не видел ничего, что поддерживало бы более высокий уровень, чем вход стереоканала непосредственно через Chrome. Это было в папке GitHub без какой-либо конкретной ОС, поэтому я предполагаю, что он используется на всех настольных платформах.

media.getusermedia.channels

Как указано в MediaDevices.getUserMedia () документах :

Предпочтение media.getusermedia.channels позволяет вам контролировать максимальное количество каналов для захвата; значение 0, по умолчанию, говорит getUserMedia () для захвата всех доступных, поддерживаемых, каналы.

Таким образом, чтобы проверить максимальное количество фактически поддерживаемых входных каналов, я бы установил для этого параметра значение 0 и посмотрел, сколько буферов аудио фактически возвращено - таким образом, вы точно будете знать ограничение канала вашей системы.

Краткое описание

Я не уверен, какова цель вашего приложения, но с точки зрения многоканального ввода через браузер нет другой альтернативы, кроме как ждать, пока сам браузер поддерживает многоканальный ввод. Как вы сказали, ваш DAW может получить доступ к более чем 3-канальному входу, потому что это скомпилированная часть программного обеспечения, работающая отдельно от браузера и имеющая доступ ко всей информации системного уровня (т. Е. Оборудованию вашей звуковой карты и всей связи).

Рекомендация

Я не уверен в вашем уровне опыта программирования, но для такого рода вещей вы обычно используете C ++ (или другой язык, но C ++ обычно подходит для аудио), чтобы создать приложение, отдельное для вашего браузера, и запустить это на вашем ПК. Чтобы получить многоканальный аудиовход в C ++, вы должны использовать такую ​​структуру, как JUCE или portaudio .

Вы можете создать процесс, который будет отправлять аудио с вашего рабочего стола на веб-страницу локально, если вы решили использовать JS в веб-браузере. Это может быть сделано в C ++ или если вы новичок в этом, может быть, Python с PyAudio будет проще начать.

Кроме того, если вы знакомы / не знакомы с Electron.js, , вы также можете создать скомпилированное приложение (например, .exe на windows), которое будет иметь доступ ко всем аудио каналы, поскольку он не работает в браузере, а просто использует браузер для интерпретации JavaScript. Я нашел эту привязку для portaudio для использования в Electron.js, который должен поддерживать многоканальный ввод. Таким образом, вы можете написать настольное приложение, используя только JavaScript / HTML / CSS и иметь многоканальный аудиовход!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...