Pulseaudio loopback membongkar perangkat output audio

12

Saya mencoba mencari tahu cara membongkar keluaran loopback pulseaudio. Saya menggunakan pulseaudio untuk membuat campuran loopback untuk menangkap mikrofon saya dan audio sistem untuk streaming. Setiap kali saya meluncurkan skrip saya yang memiliki kode ini:

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

ia meninggalkan dua perangkat keluaran setelah ditutup. Perintah unload-module menghilangkan rekaman tetapi saya tidak dapat menemukan perintah untuk output.

AkBKukU
sumber

Jawaban:

17

Cara yang tepat untuk membongkar modul

Membongkar modul yang dimuat ke Pulse Audio dilakukan dengan nomor indeks modul, yang diberikan saat memuat:

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

Dalam contoh di atas server Pulseaudio memuat modul dengan indeks id 24. Modul ini dapat diturunkan dengan perintah berikut:

pactl unload-module 24

Script Anda harus mem-parsing output dari pactl.

Jika kita tidak tahu nomor modul, kita bisa mengeluarkan perintah berikut yang akan menampilkan nomor dan nama modul:

pactl list short modules

Versi yang lebih baru juga memungkinkan pembongkaran berdasarkan nama:

pactl unload-module <name>

Metode cepat dan kotor

Jika pulseaudio disetel sebagai setan pemijahan otomatis (yang seharusnya menjadi begaviour default), kami dapat dengan cepat menurunkan semua modul yang dimuat setelah login dengan set ulang server PulseAudio untuk memuat modul default yang ditentukan dalam kami default.padengan menjalankan:

pulseaudio -k

Ini secara efektif akan membongkar semua modul dari skrip Anda dan akan memuat wastafel default untuk hasil.

Takkat
sumber
Layak disebutkan bahwa tidak semua aplikasi akan pulih dari aliran sungai mereka terpotong.
Aurelia
Dapatkan nomor modul dengan nama wastafel: di 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]+")mana MY-SINK-NAMEapa yang tertulis. Simpan < >dalam kode!
KrisWebDev
1
@KrisWebDev: terima kasih, menambahkan baris tentang cara mendapatkan indeks modul untuk pendekatan yang lebih umum.
Takkat
Besar, maka ini menjadi: pactl list short modules | grep "sink_name=MY-SINK-NAME" | cut -f1 | xargs -L1 pactl unload-module. Ini memiliki keuntungan menghapus SEMUA modul bernama MY-SINK-NAME(nama wastafel tidak unik).
KrisWebDev