Удовольствие от маршрутизации аудио без дополнительных затрат

Старые неуклюжие дни работы со сломанными аудиодрайверами и устройствами в Linux остались позади. В настоящее время существуют целые дистрибутивы, посвященные звуковому дизайну и производству музыки. Вы можете взять самые популярные готовые дистрибутивы и ожидать, что многие аудиоинтерфейсы будут работать без проблем.

Но что происходит, когда вам нужно немного больше гибкости с маршрутизацией звука и соединениями?

Существует много больших и сложных звуковых фреймворков, таких как Jack и PluseAudio для Linux. У них так много настраиваемых параметров и движущихся частей, что вас тошнит. Если все, что вы хотите сделать, это развернуть несколько дополнительных петлевых интерфейсов, это немного излишне. Кроме того, вы, скорее всего, потратите больше времени на их настройку, чем на создание необходимых интерфейсов.

В этой статье мы рассмотрим простой способ создания виртуальных интерфейсов с использованием звуковой подсистемы, общей для многих дистрибутивов Linux. Проект ALSA предоставляет простой и понятный способ управления аудиоинтерфейсами и базовой конфигурацией. Давайте попробуем.

Основные команды

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

Если вы еще не установили пакет утилит ALSA, сделайте это в первую очередь:

sudo apt install alsa-utils

Теперь давайте рассмотрим несколько основных команд списка. Эти команды показывают подключенные устройства, которые видит ваша операционная система.

Показать все устройства воспроизведения:

aplay -l

Показать все записывающие устройства:

arecord -l

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

Следующая команда вызовет панель микширования для ALSA. Это позволяет настраивать уровни ввода и вывода и вносить небольшие изменения в конфигурацию каждого устройства:

alsamixer

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

Загрузка модуля обратной связи

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

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

Давайте загрузим модуль, используя следующую команду:

sudo modprobe snd-aloop

Теперь, если вы запустите arecord -l или aplay -l, вы должны увидеть следующие дополнения:

card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 7/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7

Эти два интерфейса обеспечивают вход и выход для маршрутизации и захвата звука. Первое устройство в списке (device 0) — это то, на которое вы будете направлять аудиовход. Второе устройство (device 1) — это место, где вы можете слышать звук с первого устройства. Все, что вы отправляете на первый интерфейс, появляется на втором.

Если вы хотите направить звук на аппаратный идентификатор первого интерфейса, вы должны сделать что-то вроде этого:

hw:1,0,0

И если вы хотите сослаться на второй интерфейс, чтобы прослушать его, вы должны сделать это:

hw:1,1,0

Вы можете использовать как arecord, так и aplay, чтобы проверить это, воспроизведя WAV-файл на первом интерфейсе и прослушав его (записав) на втором.

Настройка петлевых интерфейсов

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

Создайте следующий файл /etc/modprobe.d/alsa-loopback.conf и заполните его следующим содержимым:

option snd-aloop enable=1,1,1,1 index=0,1,2,3

Это создаст четыре отдельные пары петлевых интерфейсов. Вы можете изменить количество включенных интерфейсов, добавив или удалив 1 после enable и соответственно добавив значения index.

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

Выполните следующую команду, чтобы убедиться, что модуль snd-aloop загружается при загрузке:

echo "snd_aloop" > /etc/modules-load.d/snd-aloop.conf

Теперь при каждой перезагрузке у вас должен загружаться модуль snd-aloop с заданным вами количеством интерфейсов.

Пробовать это

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

Если вам нужны тестовые файлы, вы можете попробовать некоторые из бесплатных файлов WAV, доступных на freesound.org.

Следующее будет воспроизводить тестовый файл во входной шлейфе:

aplay -D hw:1,0,0 test_input.wav

И следующее запишет его из выходного шлейфа:

arecord -D hw:1,1,0 -f S16_LE -c 2 -r 48000 test_output.wav

Надеюсь, теперь вы достигли нирваны маршрутизации аудио без всех головных болей, связанных с реализацией более сложной структуры аудиосервера. Если вам нужна дополнительная информация об ALSA, вы можете ознакомиться с официальной документацией доступной здесь.

Спасибо за прочтение! Посмотрите еще несколько постов ниже: