Hatred's Log Place

DON'T PANIC!

Sep 26, 2017 - 2 minute read -

Совместное использование ALSA и PulseAudio

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

Что бы решить проблему нужна пара простых (по факту, но не по пути, которым к ним пришёл) шагов. Но для начала нужно посмотреть соответствующий раздел в вики Арчика: https://wiki.archlinux.org/index.php/PulseAudio#ALSA.2Fdmix_without_grabbing_hardware_device

Идея проста: сказать пульсе работать через dmix для воспроизведения и через dsnoop для записи.

Что бы не гадить в системные файлы, будем настраивать для отдельного пользователя (при желании, можно в /etc/skel добавить).

Для начала нужно научить саму ALSA ходить в dmix/dsnoop по умолчанию. Правим файл ~/.asoundrc:

pcm.!default {
    type plug
    slave.pcm "duplex"
}

pcm.duplex {
    type asym
    playback.pcm "dmix"
    capture.pcm "dsnoop"
}

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

Следующим шагом правим файл ~/.config/pulse/default.pa:

#!/usr/bin/pulseaudio -nF

load-module module-alsa-sink device=dmix
load-module module-alsa-source device=dsnoop

# include upstream settings
.include /etc/pulse/default.pa

# Set defaults to our mix devices
set-default-sink alsa_output.dmix
set-default-source 0 alsa_input.dsnoop

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

Проверить воспроизведение просто, например при помощи VLC: vlc some_file.wav –aout=pulse vlc some_file.wav –aout=alsa

Запись: ffmpeg -f pulse -i default -y out_pulse.wav ffmpeg -f alsa -i default -y out_alsa.wav

Полезные ссылки и команды

  • команды default.pa: https://manned.org/pulse-cli-syntax.5
  • список устройств записи (pulse): pacmd list-sources
  • список устройств воспроизведение (pulse): pacmd list-sinks