Для вимкнення детектування входів потрібно передати відповідні параметри модулю ядра snd-hda-intel. Для цього потрібно:
1. Створити файл
options snd-hda-intel patch=hda-jack-detection.fw,hda-jack-detection.fw,hda-jack-detection.fw,hda-jack-detection.fw
Не знаю, навіщо тут чотири рази перераховано ім'я того самого файлу, скопіював звідси.
2. Створити власне сам файл, вказаний у попередньому:
[codec] 0x10ec0887 0x1458a182 0 [hints] jack_detect=no
В цьому файлі є розділ [codec]
, до якого потрібно вписати параметри саме для вашої звукової карти. Згідно з документацією ядра Linux1), в цьому рядку очікуються три числа:
Щоб дізнатися ці три числа для вашої звукової карти, можна виконати команду:
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
можна також завантажити одразу з фіксованим зв'язком між входом та виходом. Тоді перемикати пристрої у налаштуваннях гучності буде неможливо, але водночас це й убезпечує від випадкової помилки.
Спершу треба дізнатись назви потрібних нам пристроїв введення (наприклад, мікрофонів).
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
забороняють змінювати пристрої на кінцях цієї петлі.
$ 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
### 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
“Показати:”
та обрати зі списку пункт “All Output Devices”