Pulseaudio loopback вивантажує аудіо вихідні пристрої


12

Я намагаюся з'ясувати, як розвантажити пульсові аудіозаписи. Я використовую pulseaudio для створення мікстури із зворотним зв'язком для захоплення мікрофона та системного аудіо для потокового передавання. Кожен раз, коли я запускаю свій скрипт із таким кодом:

pactl load-module module-null-sink sink_name=mix 
pactl load-module module-loopback sink=mix
pactl load-module module-loopback sink=mix

avconv ...

pactl unload-module module-loopback

після закриття він залишає два пристрої виводу. Команда unload-module позбавляється від запису, але я не можу знайти команду для виходів.

Відповіді:


18

Відповідний спосіб вивантаження модулів

Вивантаження модуля, завантаженого на Pulse Audio, здійснюється за допомогою індексованого номера модуля, який задається при завантаженні:

pactl load-module module-null-sink sink_name=test
24

У наведеному вище прикладі сервер Pulseaudio завантажив модуль з індексом ідентифікатора 24. Цей модуль можна вивантажити за допомогою наступної команди:

pactl unload-module 24

Ваш сценарій повинен буде розібрати вихід pactl.

Якщо нам не відомий номер модуля, ми можемо надати наступну команду, яка відображатиме номер та назву модуля:

pactl list short modules

Новіші версії також дозволяють розвантажувати ім'я:

pactl unload-module <name>

Швидкий і брудний метод

Якщо pulseaudio встановлений як демон з автоматичним нерестуванням (який повинен бути типовим для поведінки), ми можемо швидко вивантажити всі завантажені модулі після входу з допомогою скидання сервера PulseAudio для завантаження модулів за замовчуванням, визначених у нашому default.paзапуску:

pulseaudio -k

Це ефективно вивантажить всі модулі з вашого сценарію і завантажить раковину за замовчуванням для виводу.


Варто зазначити, що не всі заявки відновляться після того, як їх потоки будуть відрізані.
Аврелія

Отримайте номер модуля за назвою раковини: MODULE_NUMBER=$(pacmd list-sinks | grep -E "^\s*name:|^\s*module:" | grep -A 1 -E "^\s*name: <MY-SINK-NAME>" | grep -oP "module: \K[0-9]+")де MY-SINK-NAMEце написано. Зберігайте < >код!
KrisWebDev

1
@KrisWebDev: спасибі, додано рядок про те, як отримати індекси модулів для більш загального підходу.
Таккат

Велика, то це буде виглядати так : pactl list short modules | grep "sink_name=MY-SINK-NAME" | cut -f1 | xargs -L1 pactl unload-module. Він має перевагу у видаленні ВСІХ названих модулів MY-SINK-NAME(назви раковин не унікальні).
KrisWebDev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.