Pulseaudioループバックアンロードオーディオ出力デバイス


12

PulseAudioループバック出力をアンロードする方法を見つけようとしています。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

閉じた後、2つの出力デバイスが残ります。unload-moduleコマンドは記録中のものを取り除きますが、出力用のコマンドが見つかりません。

回答:


17

モジュールをアンロードする適切な方法

Pulse Audioにロードされたモジュールのアンロードは、ロード時に指定されるモジュールのインデックス番号によって行われます:

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

上記の例では、Pulseaudioサーバーがインデックスidのモジュールをロードしました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-moduleMY-SINK-NAME名前付きのすべてのモジュールを削除するという利点があります(シンク名は一意ではありません)。
KrisWebDev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.