Вход от 20 + микрофоны

Меня спросили (если это возможно) записать программу, контролирующую вход по крайней мере 20 микрофонов, на одиночном компьютере.

В настоящее время я моделирую в Python (2.6) на системном использовании Ubuntu Alsa. Мои попытки до сих пор создали довольно много вопросов...

Ubuntu является требованием, Alsa не, и Python является идеалом.

Для аппаратных средств одно предложение является несколькими звуковыми картами. Другой серия концентраторов usb и адаптеров микрофона (как они) (В этом случае, устройства все были бы идентичны и на той же Шине USB),

Вопросы:

Как я могу одновременно записать несколько микрофонов с единственной звуковой карты? (например, строка использования - в, а также микрометр, премия для любого, кто знает, как я могу использовать больше, чем всего два исходных данных!)

В установке USB, как я могу определить, которые располагают звуковую карту (USB-адаптер) во включенный к концентратору USB (или цепочка концентраторов USB).

Если решением является необработанный доступ к микрофонам через USB, позиция устройств по шине USB, зависят только, на котором порте на USB концентрируют, они включены или делают это могло измениться между включением компьютера и прочь?

Наконец, при использовании необработанного доступа, как я лучше всего получаю данные (никакой текущий опыт с pyUSB) и какое преобразование (если таковые имеются) требуется от сырых данных-> аудио?

Править:

Монитором меня попросили записать вход к диску (идеально выше порога набора, который speex кодек выглядит идеальным для), уровни громкости монитора, обеспечьте графическую обратную связь и настройте по крайней мере один вывод что циклы через все активные микрофоны.

Python не является долгосрочным требованием, просто самый легкий способ, которым я нашел до сих пор для получения данных PCM из звуковой карты (микрофон только однако)

Я намереваюсь иметь опрос звуковых карт, и обработка данных происходят в отдельных потоках, область, с которой у меня нет большого опыта.

Где я нашел бы больше информации о реализации драйвера класса аудио USB?

10
задан Paul O'Reilly 23 June 2010 в 11:02
поделиться

7 ответов

Определение «монитора» здесь очень большая переменная. Монитор может означать «запись на диск», «обнаружение уровней громкости выше определенного порога» или «выполнение анализа более высокого уровня в частотной области (т.е. обычная обработка сигналов)». Эти три имеют очень разные последствия для использования ЦП и возможностей Python. Python может не подходить лучше всего в зависимости от того, что вы хотите делать.

Если вы выберете Python, я отмечу следующее:

  • Поддержка звука в Python очень слабая
  • Привязки Python ALSA (pyalsa) предназначены для секвенсора, микшера и управления оборудованием, а не для чтения образцов PCM (хотя привязки могут быть полезны для управления устройствами)
  • Python имеет проблемы в определенных многопоточных условиях (см. GIL - глобальная блокировка интерпретатора), которых можно полностью избежать, имея отдельные процессы Python, но это нежелательно во всех случаях. случаев тоже (я предполагаю, что вы работаете в многоядерной / процессорной системе и хотите разделить нагрузку на мониторинг 20 аудиовходов между процессорами).
  • Интенсивные операции с ЦП и памятью, которые можно было бы ожидать при анализе звука, не являются сильной стороной Python. При этом данные PCM могут быть распакованы с помощью struct.unpack (), а анализ сигналов может быть выполнен с помощью подпрограмм, найденных в NumPy и SciPy.

Каждый линейный вход и микрофон должны быть стереоскопическими, обеспечивая по два микрофонных входа каждый, то есть четыре микрофона на звуковую карту. Если предположить, что всего 20 входов, это означает пять аудиоадаптеров USB. Кстати, чтобы использовать линейный вход, вам понадобится какой-то микрофонный предусилитель, который может быть дороже, чем вам хотелось бы.В этом случае вам понадобится 10 аудиоадаптеров USB на 20 входов.

Я бы предупредил, что большинство концентраторов начального уровня, вероятно, не смогут обрабатывать трафик для 5-10 аудиоадаптеров. В этом отношении я был бы уверен, что у вас есть концентратор USB 2.0 Highspeed (даже если фактические аудиоустройства являются полноскоростными USB 1.1 или медленнее), чтобы быть уверенным, что у вас достаточно пропускной способности восходящего потока. Если у вас есть возможность, нетрудно получить адаптерные карты PCI USB с 4 или 5 внешними портами USB. Кстати, USB-устройство, которое вы показываете, имеет только стереовыход и микрофонный вход (без линейного входа).

Кстати, в идеале вы должны использовать режим изохронной передачи USB, чтобы иметь низкую задержку и последовательную доставку, но я сомневаюсь, что драйверы ALSA поддерживают его.

Что касается логического и физического сопоставления звуковых карт USB, набор правил udev позволит вам предоставить полезную и последовательную схему именования устройств на основе иерархии USB или, если хотите, серийных номеров (если они есть на устройствах ) или другие атрибуты. В любом случае вы должны иметь возможность использовать правила udev для стабилизации сопоставления аудиоустройств по их идентичности или их физическому местоположению (по вашему выбору).

Я ничего не знаю о pyUSB, но вижу, что он поддерживает изохронный режим передачи. На первый взгляд, pyUSB обеспечит очень точное управление, но я подозреваю, что вы будете кодировать гораздо больше, чем намеревались (вам в основном нужно реализовать лучшие части драйвера USB-аудио класса на Python).

Надеюсь, это поможет!

7
ответ дан 4 December 2019 в 00:23
поделиться

Что касается оборудования, можно предложить несколько звуковых карт. Другой - это серия USB-концентраторов и микрофонных адаптеров (например, этих)

. Это также несколько звуковых карт: каждая из них представляет интерфейс USB Audio Device Class с независимой синхронизацией, что может вызвать проблемы при попытке синхронизации. их.

Я никогда не пытался запустить что-то вроде 20 из них одновременно, но, как мне кажется, это будет крайне ненадежно. Это дешевый потребительский комплект, который не предназначен для такого использования; хотя вы не будете беспокоиться об ограничении пропускной способности USB 2.0, я думаю, что они перестанут работать надежно задолго до этого. За то, что стоит конкретная модель, с которой вы связались, имеет очень плохие отзывы.

Если возможно, подумайте о звуковых картах более высокого класса с несколькими входами. Например, Delta-1010LT имеет разумную цену и, очевидно, поддерживается ALSA. Есть еще немало возможностей 8 + -входов с внешними боксами (USB, Firewire, всякие вещи от RME); ESI делает стойку на 16 входов, но ситуация с драйверами для ALSA выглядит сомнительной.

С единым синхронизированным устройством, из которого вы можете получить несколько каналов аудиовхода за один раз, будет намного проще справиться, чем с множеством отдельных звуковых карт. Вероятно, вы все равно не захотите возиться с примерами непосредственно в Python, но вы можете подключить к Python инструментарий обработки / анализа более высокого уровня с помощью чего-то вроде PySndObj .

4
ответ дан 4 December 2019 в 00:23
поделиться

Я лично предлагаю вам какое-то оборудование, например, цифровой микшерный пульт, который будет поддерживать все эти входы в первую очередь. Я действительно сомневаюсь, что иначе вы легко сможете заставить работать несколько микрофонов. И перед тем, как вы начнете писать какой-либо код для записи всех этих входных данных, логическим первым шагом является проверка того, может ли / как ПК даже справиться с таким сценарием.

И я бы не стал рекомендовать здесь Python. С одной стороны, это звучит как случай, когда производительность может быть критичной, с другой - на * nix я бы не хотел делать что-либо низкоуровневое, кроме C / C ++ (в Windows я, вероятно, сказал бы C ++ или C #).

1
ответ дан 4 December 2019 в 00:23
поделиться

Аудио через USB - это хорошо, если вас не беспокоит задержка, но я сильно сомневаюсь, что оно может работать с 20 каналами, особенно на 20 устройствах.

Купите несколько больших интерфейсов Firewire (8 каналов+), возможно, от Presonus. Найдите что-нибудь, поддерживаемое звуковой системой Linux, вы же не хотите иметь дело с какой-либо шиной самостоятельно. Если можете, используйте приложение DAW для получения звука. Если потребуется обработка, то, вероятно, проще написать плагин, чем начинать с нуля. Я не знаю хорошей библиотеки для многодорожечной записи в Python.

0
ответ дан 4 December 2019 в 00:23
поделиться

Просто совет: думайте о своих 20 звуковых входах как об аналоговых входах и записывайте их с помощью аналогового для Цифровые преобразователи, как например карты National Instruments.

Я даже слышал о профессиональных звуковых картах с использованием оборудования NatInst. И (по крайней мере, для Windows, я не знаю для Linux) поддержка программного обеспечения отличная.

Это USB-устройство сбора данных поддерживает 14 аналоговых входов SE (односторонних) только с одним портом USB на 14 бит, 48 кГц / с.

И да, по крайней мере, у Labview есть версия для Linux.

0
ответ дан 4 December 2019 в 00:23
поделиться

Сегодня существует программное обеспечение, которое может сделать это бесплатно или дешево. Проблема заключается в получении входных данных.

Если это для бизнеса, и его бизнес полагается на это, я предлагаю решение Logic Express / Logic Pro или Pro Tools. Потратьте пару долларов, и пусть все заработает.

Бесплатное программное обеспечение, которое будет хорошо работать, - это такие вещи, как: Audacity (все платформы), Garageband (Mac), Ardor (Linux, Mac) и т. Д.

Теперь, чтобы получить двадцать монофонических аудиовходов в систему, вам следует подумать о приобретении что-то с двадцатью входами (или больше) вместо того, чтобы подключать все 20 микрофонов к микшерному пульту и записывать микширование одного канала.

0
ответ дан 4 December 2019 в 00:23
поделиться

Похоже, что это на пару месяцев позже, но, возможно, кому-то это пригодится. Что касается идентификации нескольких USB-устройств и различения одного от другого, это довольно просто ... обычно.

Многие из самых дешевых USB-устройств не имеют уникального серийного номера, и даже некоторые довольно дорогие (например, Zoom 4595 Aircard). Если это так, то хорошего пути нет ... тот, кому удастся пробиться вперед в очереди, будет / dev / n0, следующий / dev / n1 и так далее.

Но если у них действительно есть уникальные серийные номера, вы можете написать правила udev, которые указывают, что определенный серийный номер должен быть / dev / n4. Правила Udev не для слабых, мне потребовались недели, чтобы овладеть ими, но они могут сделать эти вещи возможными.

0
ответ дан 4 December 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: