Differences

This shows you the differences between two versions of the page.

Link to this comparison view

os:linux:sound:current [2019/09/10 15:30] (current)
owlbook created
Line 1: Line 1:
 +===== Мой текущий сетап =====
  
 +Как только мне понадобилось использовать больше одного звукового потока (например завести весь звук, который проигрывается в системе в утилиту для записи с экрана или в тот же ardour5 завести несколько каналов одновременно) я столкнулся с отсутствием гибкости в ALSA((а может я просто неосилятор)). Второй проблемой стало то, что некоторые проблемы прям физически дропают поддержку alsa и требуют <​del>​поделку Лёни Пёттеринга</​del>​ pulseaudio.
 +
 +В конечном итоге прогуглив интернеты и пообщавшись со знакомцами был рождён жизнеспособный сетап, который позволяет обслужить практически все утилиты,​ которые я использую и дают достаточно большую гибкость в работе с несколькими звуковыми девайсами((Тут тоже есть свои подводные камни)).
 +
 +Итак, вкратце всё выглядит так:
 +
 +  ALSA ----> PulseAudio -----> JACK ----> ALSA
 +
 +Выглядит как кольцо,​ однако всё не совсем так, как кажется на первый взгляд. Начнём по порядку.
 +
 +==== ALSA ====
 +
 +Весь выхлоп от приложений заворачивается безусловно в PulseAudio. Просто потому что так проще.
 +
 +<file alsaconf ~/​.asoundrc>​
 +pcm.!default {
 +  type pulse
 +  fallback "​sysdefault"​
 +  hint {
 +    show on
 +    description "​Default ALSA Output (currently PulseAudio Sound Server)"​
 +  }
 +}
 +
 +ctl.!default {
 +  type pulse
 +  fallback "​sysdefault"​
 +}
 +
 +# vim:set ft=alsaconf:​
 +</​file>​
 +
 +==== PulseAudio ====
 +
 +Является к сожалению((или счастью)) основным звуковым сервером в системе. Работает,​ есть не просит,​ иногда сходит с ума и выбирает неправильный sink для вывода звука, но после пары отточенных ударов палкой всё становится снова хорошо.
 +
 +У меня в конфиге default.pa от мейнтейнеров уже всё прописано,​ но всё же стоит убедиться,​ что в конфиге есть следующие строчки
 +
 +<​code>​
 +...
 +load-module module-jackdbus-detect channels=2
 +load-module module-jack-sink.so
 +load-module module-jack-source.so
 +...
 +</​code>​
 +
 +==== JACK ====
 +
 +Используется для коммутации разных звуковых каналов между собой. Я использую jack2, если что. Почему-то мейнтейнеры решили,​ что в новой версии пакета такие прекрасные приложения как alsa_in и alsa_out не нужны, хотя по сути если у тебя в системе больше одной звуковой карты кроме как через эти прилаги сделать вывод/​ввод сразу с двух карточек невозможно (jack умеет работать только с одним девайсом одновременно)
 +
 +Для управления jack я использую qjackctl просто потому что есть вещи, которые удобнее делать мышкой,​ но наверняка можно и через jack_control крутить коннекты. Времени и желания разбираться не было, но это всегда может стать вашей домашкой,​ be careful with questions.
 +
 +==== Запуск звуковой подсистемы ====
 +
 +По умолчанию конечно же ничего не запускается,​ поэтому у меня в bspwmrc запускается скрипт инициализации,​ который на основании подключённых звуковых карточек делает ту или иную основной и выставляет нужные крутилки. Не будем далеко ходить
 +
 +<file bash jack>
 +#!/bin/bash
 +
 +pidof alsa_in && pkill alsa_in
 +pidof alsa_out && pkill alsa_out
 +pulseaudio -k
 +jack_control stop
 +
 +pidof jackd && kill jackd
 +if [[ -n $(aplay -l | grep Pro) ]]; then
 +  jack_control dps device hw:Pro
 +  jack_control dps playback hw:Pro
 +  jack_control dps capture hw:Pro
 +  #alsa_in -j PCH -d hw:PCH &
 +  #alsa_out -j PCH -d hw:PCH &
 +else
 +  jack_control dps device hw:PCH
 +  jack_control dps playback hw:PCH
 +  jack_control dps capture hw:PCH
 +fi
 +jack_control start
 +sleep 1
 +pulseaudio -D
 +</​file>​
 +
 +==== Хитрости ====
 +
 +Если я, например,​ в данный момент использую Pro карту для вывода звука, то и ввод, очевидно,​ у меня может быть только с неё, однако в офисе, например,​ у меня нет микрофона,​ который можно засунуть в Pro карту, зато есть встроенный микрофон в PCH.
 +
 +Здесь-то нам и понадобятся те утилитки,​ о которых я написал выше
 +
 +  $ alsa_in -d alsa -d hw:PCH
 +
 +Прилага запускается в интерактивном режиме и создаёт source в jack, который можно уже скоммутировать с нужным output портом,​ которому требуется микрофон.