web-dev-qa-db-ja.com

アプリケーションのオーディオ出力を複数の再生デバイスにルーティングする

音声を録音する必要があるアプリケーションがあります。そのため、pavucontrolを使用して、録音ソフトウェアのオーディオ入力をオーディオ出力のモニターに設定しています。私の問題は、ほとんどの場合、出力を聞きたくないということです。そのために、modprobe snd-aloopを使用してダミーの出力デバイスを作成しました。これはうまくいきますが、録音しながらライブオーディオストリームを聴きたい場合があります。つまり、サウンドアプリケーションのオーディオ出力とレコーディングアプリケーションのオーディオ入力の両方を常に変更する必要があり、これは本当に疲れる可能性があります。さらに、これにより、特定のアプリケーションだけでなく、録音アプリケーションが私が聞いたすべてを録音するようになります。

私は this の答えを見つけましたが、すべてのデバイスでサウンド出力が必要なわけではないので、私が望んでいるものとは正確には異なります。ただダミーループと私の選択した別の出力。私のシステムはgnome3-Shellを使用したArch-linuxです。これを永続的にしたくないので、オンザフライで変更できるソリューションが必要です。

おまけの質問:「ライブリスニング」を有効または無効にするショートカット(アプリケーションのオーディオストリームに2番目のオーディオ出力を追加する)が欲しいので、CLIコマンドはすばらしいでしょう。

完全に明確にするために、私は次のオーディオルーティングを切り替えられるようにしたいと思います。

[playback app] --> [dummy aloop] --> [monitor of aloop] --> [recording app]

そして

[playback app] --> [dummy aloop] --> [monitor of aloop] --> [recording app]
               \-> [headphones] (simultanously)
4
confetti

とにかくPulseaudioを使用している場合は、 Pulseaudioのモジュール 、特にmodule-loopbackmodule-null-sinkをご覧ください。私の経験では、snd-aloopを使用するのは少し面倒です。Pulseaudioは主にサウンドストリームの転送を扱うため、Pulseaudioの方がはるかに簡単です。

したがって、ユースケースが「バックグラウンドで1つのアプリの出力を記録し、その間に他のことを行うためにロードスピーカーを使用し、時々アプリをリッスンする」である場合、適切に名前が付けられたnullシンクを作成し、pavucontrolを使用してアプリをアプリに接続します(これはPulseaudioによって記憶されます)、このシンクのmonitorソースから記録します(これも、必要に応じて、記録アプリがPulseaudioのアプリ名を設定するためのコマンドラインオプションで記憶されます)。聞きたいときは、モニターのソースからスピーカーのシンクにループバック接続をしてください。または、このループバックを永続的にして、必要に応じてミュート/ミュート解除します。

pacmdまたはpactlを使用して、これらすべてをコマンドラインで試すことができます。同じコマンドを使用して、ショートカットをスクリプト化することもできます。 Pulseaudio起動スクリプトを使用して永続化します。

だから何かに沿って

pactl load-module module-null-sink sink_name=recsink
pactl load-module module-loopback source=recsink.monitor sink=your_loadspeaker_sink

pactl list short sinksを使用して、シンク名を確認します。その他のコマンドについては、pactl helpおよびpacmd help

5
dirkt