Управление звуком

Введение #

Звуковая подсистема состоит из нескольких уровней:

Hardware — это физическое аудиоустройство: встроенный аудиокодек, HDMI-аудио, USB-звуковая карта, микрофонный вход, линейный выход и т.д.

Kernel Space — это драйверы Linux. Они знают, как работать с конкретным железом: какие регистры нужно включить, какие аудиомаршруты доступны, где находятся регуляторы громкости, переключатели и входы/выходы.

User Space — это пользовательские программы, которые обращаются к звуковой подсистеме через ALSA (Advanced Linux Sound Architecture). Например: alsamixer, amixer, aplay, arecord, PulseAudio или PipeWire.

В обычной работе пользователь взаимодействует не с драйвером напрямую, а с ALSA-устройствами и ALSA-микшером. Драйвер создает элементы управления, а alsamixer и amixer показывают их в удобном виде.

Как посмотреть доступные звуковые карты #

Список звуковых карт:

cat /proc/asound/cards

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

aplay -l

Список устройств записи:

arecord -l

Более подробная информация о PCM-устройствах (Pulse-Code Modulation - устройство, через которое программа может воспроизводить или записывать звук):

cat /proc/asound/pcm

Как посмотреть элементы микшера #

Открыть интерактивный микшер:

alsamixer

Посмотреть полные имена ALSA controls:

amixer controls

Посмотреть текущие значения всех простых элементов микшера:

amixer scontents

Важно помнить, что имена в alsamixer могут быть короче, чем имена из amixer controls. ALSA разбирает имя элемента на несколько частей:

Master Playback Volume
│      │        └─ тип элемента: Volume
│      └────────── направление: Playback
└───────────────── основное имя: Master

Служебные слова помогают ALSA понять, что это за элемент:

Playback = относится к воспроизведению
Capture  = относится к записи
Volume   = регулятор громкости или усиления
Switch   = переключатель включено/выключено
Route    = выбор маршрута или источника сигнала

Поэтому Master Playback Volume в alsamixer может отображаться просто как Master. При этом ALSA все равно знает, что это элемент воспроизведения и что он управляет громкостью.

Похожий пример:

Line Out Playback Switch -> Line Out
MIC1 Capture Switch      -> MIC1
MIC1 Boost Volume        -> MIC1 Boost

Полные имена всегда можно посмотреть через:

amixer controls

Repka Pi 4 #

К СВЕДЕНИЮ

Обратите внимание, что в данном разделе мы рассматриваем управление звуком только через аудиокодек AC200, не затрагивая управление через sun9i-hdmi

На Repka Pi 4 используется аудиокодек AC200. В ALSA звуковая карта может отображаться как ac200-audio.

К СВЕДЕНИЮ

Официальный Datasheet на данный аудиокодек AC200 доступен по ссылке.

К СВЕДЕНИЮ

Исходный код драйвера находится по пути sound/soc/codecs/ac200.c в репозитории repka-os_kernel

Связь аудиокодека AC200 с SoC Allwinner H6

Схема аудиокодека AC200 из Datasheet

Проверка устройства #

Проверить, что звуковая карта AC200 появилась в системе:

cat /proc/asound/cards

В результате выполнения команды вы увидите:

 1 [ac200audio     ]: simple-card - ac200-audio
                      ac200-audio

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

aplay -l

Результат выполнения команды:

**** Список PLAYBACK устройств ****
карта 1: ac200audio [ac200-audio], устройство 0: 508f000.i2s-ac200-dai ac200-dai-0 [508f000.i2s-ac200-dai ac200-dai-0]
  Подустройства: 1/1
  Подустройство №0: subdevice #0

Проверить устройства записи:

arecord -l

Результат выполнения команды:

**** Список CAPTURE устройств ****
карта 1: ac200audio [ac200-audio], устройство 0: 508f000.i2s-ac200-dai ac200-dai-0 [508f000.i2s-ac200-dai ac200-dai-0]
  Подустройства: 1/1
  Подустройство №0: subdevice #0

Открыть микшер для карты AC200:

alsamixer

Если карт несколько, выберите ac200-audio через F6.

Результат выполнения команды alsamixer

Общая схема AC200 #

Упрощенно в AC200 есть два основных направления:

Воспроизведение:
I2S -> DAC -> Output Mixer -> Line Out

Запись:
MIC1 / MIC2 -> Input Mixer -> ADC -> I2S

В alsamixer для этих путей есть три типа элементов:

Volume = громкость или усиление
Switch = включить или отключить часть пути
Route  = выбрать маршрут сигнала

Воспроизведение звука #

Для вывода звука обычно участвуют такие элементы:

Элемент Что делает
Master Playback Volume Общая громкость воспроизведения
Line Out Playback Volume Громкость выхода Line Out
Line Out Playback Switch Включает левый и правый каналы Line Out
Line Out Source Playback Route Выбирает режим выхода: Stereo или Mono
ADC Playback Volume Уровень сигнала ADC, который можно подмешать в путь воспроизведения
ADC Playback Switch Подключает сигнал ADC к DAC mixer для воспроизведения/мониторинга
DAC I2S Playback Volume Уровень сигнала из I2S в DAC mixer
DAC I2S Playback Switch Подключает I2S/DAC-путь для воспроизведения
DAC Playback Switch Подключает DAC к выходному микшеру
DAC Reversed Playback Switch Подключает DAC к выходному микшеру с перестановкой левого и правого каналов
MIC1 Playback Volume Уровень MIC1, который можно подмешать в выходной микшер
MIC1 Playback Switch Подключает MIC1 к выходному микшеру
MIC1 Boost Volume Дополнительное усиление MIC1
MIC2 Playback Volume Уровень MIC2, который можно подмешать в выходной микшер
MIC2 Playback Switch Подключает MIC2 к выходному микшеру
MIC2 Boost Volume Дополнительное усиление MIC2

Соответствие полных имен ALSA и коротких имен в alsamixer:

Элемент Элемент в alsamixer Клавиши
Master Playback Volume Master /
Line Out Playback Volume Line Out /
Line Out Playback Switch Line Out M
Line Out Source Playback Route Line Out Source /
ADC Playback Volume ADC /
ADC Playback Switch ADC M
DAC I2S Playback Volume DAC I2S /
DAC I2S Playback Switch DAC I2S M
DAC Playback Switch DAC M
DAC Reversed Playback Switch DAC Reversed M
MIC1 Playback Volume MIC1 /
MIC1 Playback Switch MIC1 M
MIC1 Boost Volume MIC1 Boost /
MIC2 Playback Volume MIC2 /
MIC2 Playback Switch MIC2 M
MIC2 Boost Volume MIC2 Boost /

Воспроизведение звука в alsamixer

Запись с микрофона #

Для записи с микрофона обычно участвуют такие элементы:

Элемент Что делает
Master Capture Volume Общая громкость захвата
ADC Volume Усиление входного ADC
MIC1 Boost Volume Дополнительное усиление MIC1
MIC2 Boost Volume Дополнительное усиление MIC2
MIC1 Capture Switch Подключает MIC1 к input mixer
MIC2 Capture Switch Подключает MIC2 к input mixer
I2S ADC Capture Volume Уровень сигнала ADC перед отправкой в I2S
I2S ADC Capture Switch Подключает ADC/input mixer к I2S capture
I2S DAC Capture Volume Уровень сигнала DAC, который можно отправить в I2S capture
I2S DAC Capture Switch Подключает DAC к I2S capture
Output Mixer Capture Switch Подключает output mixer к input mixer для захвата
Output Mixer Reverse Capture Switch Подключает output mixer к input mixer для захвата с перестановкой левого и правого каналов

Соответствие полных имен ALSA и коротких имен в alsamixer:

Элемент Элемент в alsamixer Клавиши
Master Capture Volume Master /
ADC Volume ADC /
I2S ADC Capture Volume I2S ADC /
I2S ADC Capture Switch I2S ADC Пробел
I2S DAC Capture Volume I2S DAC /
I2S DAC Capture Switch I2S DAC Пробел
MIC1 Capture Switch MIC1 Пробел
MIC1 Boost Volume MIC1 Boost /
MIC2 Capture Switch MIC2 Пробел
MIC2 Boost Volume MIC2 Boost /
Output Mixer Capture Switch Output Mixer Пробел
Output Mixer Reverse Capture Switch Output Mixer Reverse Пробел

Запись звука в alsamixer

После настройки можно проверить запись:

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

И воспроизвести записанный файл:

aplay test.wav

Если AC200 не является картой 0, номер hw:0,0 нужно заменить на номер, который показывает arecord -l.


10 просмотров0 комментариев
0

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы

Навигация

ВойтиРегистрация