Как настроить PulseAudio на использование только одного устройства ALSA для ввода и вывода?

Конфигурация PulseAudio по умолчанию заставляет PulseAudio открывать все устройства ALSA при запуске. Это делает невозможным использование PulseAudio вместе с другими клиентами ALSA. Многие люди предпочитают PulseAudio ALSA, но другие пользователи расстраиваются. Что бы там ни было, PulseAudio стал стандартом, и несколько популярных приложений для Linux, таких как Skype и Firefox, поддерживают вывод звука только через PulseAudio.

Некоторые пользователи предпочитают работать с аудиоклиентами, которые выводят напрямую в ALSA, другие выводят в другую звуковую среду, например JACK, но хотят, чтобы JACK обращался к ALSA напрямую. Для этих пользователей легко освободить все устройства ALSA, удалив PulseAudio. Однако удаление PulseAudio делает невозможным использование звука в Skype и Firefox.

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

2 ответа2

3

Вы не настраиваете PulseAudio для использования устройства ALSA по умолчанию. Вместо этого вы настраиваете ALSA для использования pulse в качестве устройства по умолчанию:

pcm.!default pulse
ctl.!default pulse

Таким образом, приложения ALSA, которые не знают о PulseAudio, будут использовать PulseAudio через этот уровень косвенности.

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

Если у вас есть устаревшее приложение, которое по какой-то причине не работает, вы можете использовать pasuspender для временной приостановки PulseAudio для запуска этого конкретного приложения.

На самом деле я был в такой же ситуации, как и вы, я долгое время пользовался ALSA и был счастлив, а затем был вынужден переключиться на PulseAudio. PulseAudio в принципе имеет более приятную, более общую структуру, чем ALSA (потоки и источники / приемники), и хотя иногда он имеет бородавки, с этим можно жить.

Вы можете отладить проблемы, запустив pulseaudio вручную и добавив флаги -v , например, pulseaudio -vv start и т.д. Сообщения журнала попадают в системный журнал. Если вы хотите переключать устройства, pavucontrol - это простой в использовании графический интерфейс, а если вы хотите более прямого управления, вы можете использовать pacmd или pactl (я никогда не понимал , почему существуют две программы) в качестве командной строки командной строки. Используйте аргумент help для более подробной информации. Если вы предпочитаете файлы, все легко для сценариев.

Я также рекомендую взглянуть на доступные модули.

2

Этот ответ основан на ответе @ dirkt, так что спасибо ему.

  1. Вы можете редактировать ~/.config/pulse/default.pa . Он указан в разделе ФАЙЛЫ на странице руководства «pulseaudio (1)». Если он присутствует, глобальный default.pa не используется. Для меня я могу получить рабочую настройку со следующей минимальной конфигурацией:

    load-module module-alsa-sink device=default
    load-module module-alsa-source device=default
    
    load-module module-native-protocol-unix
    

    Тем не менее, вы можете посмотреть глобальную версию (/etc/pulse/default.pa в моей системе), чтобы узнать, что еще может быть в этом файле. Здесь настраиваются все виды наворотов: модули для восстановления настроек громкости, обнаружения устройств Bluetooth, взаимодействия с JACK, автоматического выхода из демона при выходе пользователя из системы и т.д. Если вы решите скопировать глобальный файл в свой домашний каталог и отредактировать его или даже отредактировать глобальный файл напрямую, вам нужно будет сделать следующее:

    • Закомментируйте load-module module-udev-detect , который ищет аппаратные устройства ALSA и переопределяет аргумент устройства, который вы передали модулям ALSA выше.
    • Затем добавьте module-alsa-sink и module-alsa-source . Строка module-native-protocol-unix уже должна присутствовать.
    • Возможно, вам придется закомментировать строку load-module module-suspend-on-idle ; это вызвало у меня проблемы при тестировании с определенными устройствами вывода . Симптом заключается в том, что mplayer -ao pulse ... сообщает «Звуковое устройство застряло!"и mpv -ao pulse ... сообщает" [ao/pulse] Поток приостановлен. Выручение ". Закомментирование этого модуля решило проблему.
  2. Если вы выберете устройства, отличные от device=default выше, например, два отдельных устройства ALSA для записи и воспроизведения, то, по моему опыту, это не сработает - parecord пытается выполнить запись с устройства- получателя, а не с устройства-источника. Если вы настроили отдельные устройства для ввода и вывода через ALSA и хотите, чтобы их имена назывались одним и тем же устройством PCM , вам нужно поместить что-то вроде этого в ~/.asoundrc:

    pcm.!default {     # "!" means "override" the previous definition
        type asym
        playback.pcm "hw4mix"
        capture.pcm "hw:5"
    }
    

    Здесь hw4mix называет устройство dmix, определенное ранее в файле; в то время как hw:5 указывает аппаратное устройство для моего USB-микрофона. Это делает PulseAudio счастливым. Если вы хотите использовать специальное устройство для клиентов PulseAudio, вы можете назвать его "special_pulseaudio_device" вместо "default" (и, конечно, обновить default.pa чтобы обратиться к нему).

  3. Тестовое задание. Используйте pulseaudio -k или killall pulseaudio чтобы убить текущего демона PulseAudio. Затем начните его снова с pulseaudio -vv . Конечно, вам нужно будет делать это каждый раз, когда вы редактируете ~/.asoundrc . Как только у вас будет рабочая установка, вы можете попробовать что-то вроде pactl exit; pulseaudio --start . Опция --start заставляет его работать в фоновом режиме, где вы не сможете видеть сообщения об ошибках.

    Используйте parecord -v t.wav и paplay -v t.wav для записи и воспроизведения файла WAV. Вы должны иметь возможность запускать эти команды одновременно.

    • Поскольку я использую устройство dmix для воспроизведения, я могу использовать paplay и aplay вместе, и микширование происходит автоматически. Тем не менее, микрофон не может быть общим в моей настройке; Я не могу записывать с него с помощью arecord когда PulseAudio работает ("Устройство или ресурс занят"). Для этого мне нужно создать устройство dsnoop и поставить его имя вместо hw:5 выше.

    • Если вы пытаетесь настроить Skype на работу, воспользуйтесь Skype "Echo / Sound Test Service", чтобы проверить свои настройки. Имейте в виду, что Skype, возможно, уже работает в фоновом режиме - попробуйте killall skype перед его запуском, чтобы заставить его установить новое соединение PulseAudio. По моему опыту, Skype не сообщает о каких-либо ошибках, когда не может подключиться к демону PulseAudio.

Желательно иметь хорошую конфигурацию ALSA, хотя бы потому, что некоторые приложения (Ecasound? устаревший код?) не работает с PulseAudio. Я надеюсь, что эти инструкции полезны для всех, кто, настроив ALSA по своему вкусу, теперь хочет иметь возможность использовать такие программы, как Skype, которые зависят от PulseAudio.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .