Вход с 20+ микрофонов - PullRequest
10 голосов
/ 23 июня 2010

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

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

Требуется Ubuntu, а Alsa - нет, а Python - идеал.

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

Вопросы:

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

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

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

Последнее, если используется необработанный доступ, как мне лучше всего получить данные (нет опыта работы с pyUSB) и какое преобразование (если требуется) требуется от raw -> audio?

Редактировать:

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

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

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

Где найти дополнительную информацию о реализации драйвера класса USB audio?

Ответы [ 8 ]

7 голосов
/ 23 июня 2010

Определение «монитор» здесь очень большая переменная. «Монитор» может означать «запись на диск», «обнаруживать уровни громкости выше определенного порога» или «выполнять анализ более высокого уровня в частотной области (то есть при обычной обработке сигналов)». Эти три имеют очень разные значения для использования процессора и возможности 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 с полной скоростью или медленнее), чтобы быть уверенным, что у вас достаточно пропускной способности восходящего канала. Если у вас есть такая возможность, несложно получить карты USB-адаптера PCI с 4 или 5 внешними USB-портами. Кстати, USB-устройство, которое вы показываете, имеет только стереовыход и микрофонный вход (без линейного входа).

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

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

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

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

4 голосов
/ 23 июня 2010

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

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

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

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

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

1 голос
/ 23 июня 2010

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

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

0 голосов
/ 05 сентября 2013

Интересно рассказать, чем ты закончил.Мне интересно, может ли что-то простое, например, захватить 20 arecord процессов, и один процесс aplay может выполнить эту работу.

Например, вы запускаете 20 процессов захвата arecord и перенаправляете их стандартный вывод на teeв свою очередь пишет в файл и в трубу.Запустите также 20 cat процессов для перекачки труб до /dev/null.Вам необходимо отслеживать PID всех этих процессов.Если вы хотите отслеживать некоторые из входов, просто убейте соответствующий процесс cat и начните подавать aplay из канала (возможно, снова используя процесс cat).

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

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

0 голосов
/ 20 августа 2010

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

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

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

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

0 голосов
/ 20 августа 2010

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

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

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

0 голосов
/ 23 июня 2010

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

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

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

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

0 голосов
/ 23 июня 2010

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

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

...