Зміст

Pulseaudio

Детектування входів

Для вимкнення детектування входів потрібно передати відповідні параметри модулю ядра snd-hda-intel. Для цього потрібно:

1. Створити файл

"/etc/modprobe.d/hda-jack-detection.conf"
options snd-hda-intel patch=hda-jack-detection.fw,hda-jack-detection.fw,hda-jack-detection.fw,hda-jack-detection.fw

Не знаю, навіщо тут чотири рази перераховано ім'я того самого файлу, скопіював звідси.

2. Створити власне сам файл, вказаний у попередньому:

"/lib/firmware/hda-jack-detection.fw"
[codec]
0x10ec0887 0x1458a182 0
 
[hints]
jack_detect=no

В цьому файлі є розділ [codec], до якого потрібно вписати параметри саме для вашої звукової карти. Згідно з документацією ядра Linux1), в цьому рядку очікуються три числа:

  1. Vendor ID
  2. Subsystem ID
  3. Address

Щоб дізнатися ці три числа для вашої звукової карти, можна виконати команду:

cat /proc/asound/card*/codec* | grep "Codec\|Vendor\|Subsystem\|Address"

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

Codec: Realtek ALC887-VD
Address: 0
Vendor Id: 0x10ec0887
Subsystem Id: 0x1458a182

Запис з кількох входів одночасно

Якщо в нас є кілька мікрофонів, і ми хочемо поєднати сигнал від них у єдиний запис, зробити це можна наступним чином 2).

Спочатку потрібно створити віртуальний звуковий пристрій, до якого ми спрямуємо сигнали від усіх потрібних входів. Для цього виконуємо команду:

pactl load-module module-null-sink sink_name=MixedOutput sink_properties=device.description="MixedOutput"

При успішному виконанні програма видасть у консоль число. Це число – умовний номер завантаженого модуля, за яким цей модуль можна згодом вимкнути (див. примітку у кінці).

Тут параметр sink_name=MixedOutput позначає умовне ім'я цього віртуального пристрою, за яким ми зможемо до нього надалі звертатись, а параметр sink_properties=device.description=“MixedOutput” задає текстовий опис пристрою, який буде показано у налаштуваннях гучності (pavucontrol).

Після цього у вікні налаштувань гучності (pavucontrol) на вкладці “Пристрої відтворення” з'явиться пристрій “MixedOutput”3)

Аналогічно, на сусідній вкладці “Пристрої отримання” з'явиться віртуальний пристрій “Monitor of MixedOutput”.

Якщо все це так, можна переходити до наступного кроку.

Далі потрібно для кожного з пристроїв, сигнали яких ми хочемо поєднати, виконати таку команду:

pactl load-module module-loopback sink=MixedOutput latency_msec=5

Тут обов'язково правильно вказати назву віртуального пристрою, до якого ми спрямуємо усі ці сигнали – параметр sink=MixedOutput. Параметр latency_msec=5 тут позначає затримку сигналу у цьому пристрої (число – в мілісекундах; найменше значення – 1мс).

Після виконання кожної такої команди у вікні налаштувань гучності на вкладці “Запис” має з'явитися так званий Loopback-пристрій з назвою “Loopback to MixedOutput з”, праворуч від якої буде кнопка вибору пристрою, сигнал від якого нам потрібно спрямувати до нашого поєднувального віртуального пристрою “MixedOutput”.

Якщо тут вибрати потрібний пристрій, то на сусідній вкладці “Відтворення” з'явиться його назва у такому вигляді: “Loopback from <назва> на”, і праворуч від цієї назви – знову ж таки кнопка вибору пристрою, до якого потрібно спрямувати сигнал. В нашому випадку нам потрібно спрямувати усі сигнали на “MixedOutput”, тому скрізь обираємо саме його. Зверніть увагу, що на початку ці пристрої можуть бути приглушені (праворуч від кожного – кнопка “Вимкнути звук”). Для того, щоб можна було записувати усі поєднані сигнали через один пристрій “MixedOutput”, потрібно увімкнути звук на усіх цих пристроях.

Після усіх цих налаштувань можна у програмі запису або зв'язку обрати пристрій “Monitor of MixedOutput”, і туди спрямовуватимуться сигнали від усіх обраних нами пристроїв. При цьому у налаштуваннях гучності можна легко регулювати гучність кожного з цих сигналів окремо, що дає змогу їх “вирівняти”, якщо потрібно.

Примітка: Якщо всі ці налаштування більше не потрібні, і треба повернути все до початкового стану, усі завантажені модулі потрібно вивантажити. Це можна зробити командою:

pactl unload-module <номер_модуля>

Тут замість “<номер_модуля>” потрібно вказати саме те число, яке було показане в консолі одразу після завантаження модуля.

Фіксована петля (loopback)

Модуль loopback можна також завантажити одразу з фіксованим зв'язком між входом та виходом. Тоді перемикати пристрої у налаштуваннях гучності буде неможливо, але водночас це й убезпечує від випадкової помилки.

Спершу треба дізнатись назви потрібних нам пристроїв введення (наприклад, мікрофонів).

  LANG=C pactl list sources | grep Name

Назва реального мікрофона може бути на кшталт alsa_input.pci-0000_00_1b.0.analog-stereo. Тоді модуль loopback завантажуємо з параметрами:

pactl load-module module-loopback source=alsa_input.pci-0000_00_1b.0.analog-stereo sink=MixedOutput source_dont_move=true sink_dont_move=true

Тут параметри source_dont_move=true та sink_dont_move=true забороняють змінювати пристрої на кінцях цієї петлі.

Розділення входів того самого пристрою

FIXME

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 7: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 8: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 9: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC887-VD Analog [ALC887-VD Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 1: ALC887-VD Digital [ALC887-VD Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Generic [HD-Audio Generic], device 0: ALC887-VD Analog [ALC887-VD Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 2: ALC887-VD Alt Analog [ALC887-VD Alt Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 2: U0x46d0x8da [USB Device 0x46d:0x8da], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
"~/.config/pulse/default.pa"
### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink
 
load-module module-alsa-sink device=hw:1,0 name="ALSAOutput"
load-module module-alsa-source device=hw:1,0 name="ALSASource1" source_properties=device.description="ALSASource1"
load-module module-alsa-source device=hw:1,2 name="ALSASource2" source_properties=device.description="ALSASource2"
 
 
### Automatically load driver modules depending on the hardware available
#.ifexists module-udev-detect.so
#load-module module-udev-detect
#.else
### Use the static hardware detection module (for systems that lack udev support)
#load-module module-detect
#.endif
systemctl --user restart pulseaudio
2)
Рішення взяте звідси: https://askubuntu.com/a/870596/298881
3)
Якщо його не видно, то внизу цієї вкладки потрібно натиснути на спадному списку Показати: та обрати зі списку пункт “All Output Devices”