AudioMixer (pwmicmix) — веб-микшер поверх PipeWire

 

AudioMixer (pwmicmix) — веб-микшер поверх PipeWire

Задача была конкретная: подключить микшерский пульт с несколькими отдельными USB-каналами, и я хотел превратить каждый канал в собственный виртуальный микрофон, который видят Chrome, OBS, Zoom, Discord — что угодно, что умеет выбирать вход.

 

AudioMixer — тёмная адаптивная консоль в браузере, которая берёт любой порт любого устройства (или монитор синка) и публикует его как отдельный Audio/Source:

  • 🎙️ виртуальные микрофоны из любого порта — источники и мониторы синков;
  • 📊 живые VU-метры: логарифмическая шкала, быстрая атака / медленный релиз, peak hold, индикатор клиппинга;
  • 🎚️ дБ-фейдеры с бустом до +12 дБ, регулировка колесом мыши или вводом точного значения;
  • 🔇 mute и 🟡 solo на канал, плюс общий master mute (solo глушит остальных и снимает мьют с выбранного);
  • 🚪 шумовой гейт на канал — threshold, attack, hold, release, hysteresis, с применением настроек ко всем сразу или к связанной группе;
  • 🔗 линковка фейдеров (двигаются как один) и выравнивание по опорному;
  • 🎬 сцены-пресеты — снимок всего микса (гейн, мьют, соло, гейт, мастер, связки) с плавным «моторизованным» переездом фейдеров при вызове;
  • 📱 доступ с телефона в той же сети — кнопка QR с зашитым PIN и выбором сетевого интерфейса;
  • ♻️ переживает рестарт сервера — виртуальные микрофоны продолжают работать, приложения не теряют вход и не ловят шум.

Технически всё крутится вокруг pw-loopback: захватывающая сторона явно линкуется на порт устройства, отдающая сторона — это и есть виртуальный моно Audio/Source, который видят приложения. Итоговая громкость канала — gain × master × gate_envelope (ноль, если замьючено или «отсолено» другим каналом). Уровни и предусиление для гейта берутся через pw-record.

Hardware port  --pw-link-->  am_cap_<id> (loopback capture)
                                  |
                                  v
                          am_mic_<id> (Audio/Source)  <-- сюда пишут приложения

Собирается в один AppImage (~200 МБ: портативный Python + Flask/numpy/qrcode + pywebview на Qt WebEngine для нативного окна с иконкой в таскбаре GNOME и KDE). Сами pw-* тулы не бандлятся — используются те, что уже стоят в системе, чтобы точно совпадать с версией демона. Релизы собираются автоматически по тегам vX.Y.Z через CI.

Запуск без AppImage — тоже минута:

git clone git@github.com:metallcorn/pwmicmix.git
cd pwmicmix
./run.sh

Открывается http://localhost:8723 — локально без PIN, с других устройств в сети по 4-значному коду из баннера запуска.

Репозиторий: github.com/metallcorn/pwmicmix

Комментарии

Популярные сообщения из этого блога

Делаем себя развидеть это, или Право на предварительную правку

HP2727 сканирование в сеть

Mikrotik и Ubiquiti

Ubuntu без Unity. Как все начиналось, и что имеем сейчас

Xubuntu Unity-like