1つのプロセス(または親プロセスIDを知っているプロセスグループ)から生成されたオーディオをPulseAudioにリダイレクトしてから、特定のオーディオハードウェア(または特定のチャンネル)にリダイレクトするにはどうすればよいですか。
PulseAudioの最小構成はどうすればよいですか?
たとえば、正弦波を生成するPythonスクリプトがあり、そのサウンドをサブウーファーにリダイレクトしたいと思います(5.1オーディオシステムがあります)。私はその過程で生成されたすべての音を捉えたかっただけです。
答え1
以下はいくつかの質問です。 :-)
1a)一般的に、Pulseaudio用のサウンドを生成するアプリケーションは、名前を使用してPulseaudioサーバーに自分自身を識別し、その名前を使用して識別すると、オーディオストリームを特定のハードウェア受信機にリダイレクトできます。
1b)プロセスがstdout
いくつかの形式または同様の形式で作成してサウンドを生成する場合は、それをパイプで接続してから、paplay
Pulseaudioアプリケーションからのように処理できます。-n
プロセスに固有のクライアント名を指定するには、このオプションを使用しますpaplay -n "sinusoid generator"
。
1c)プロセスがALSAを使用してサウンドを生成する場合は、次のpulse
基本デバイスを選択します.asoundrc
。
pcm.!default pulse
ctl.!default pulse
これにより、互換性レイヤーが追加され、サウンドがPulseaudioに転送され、ここで特定の名前のアプリケーションとして再表示されます。
1d)プロセスで音が異なるように生成される場合は、詳細を教えてください。
2a)GUIを使用して、アプリケーションのPulseaudioサウンド出力を特定の受信機にリダイレクトできますpavucontrol
。標準のPulseaudio設定には、どのアプリケーションがどのレシーバーを使用しているかを覚え、次にアプリケーションが起動したときにこれらの割り当てを自動的に復元するモジュールが含まれています。したがって、これは一度だけ実行できます。
2b) コマンドラインでpacmd move-sink-input
otherpacmd
と after を使ってgrep
希望の名前を取得することもできます。しかし、GUIを使用する方が簡単です。
3a)チャンネルではなく、フルオーディオストリームのみを移動できます。ただし、1つの受信機で複数のストリームを同時に再生できるため、正弦波ジェネレータがサブウーファーチャンネルでのみ5.1オーディオを生成し、サイン波がサブウーファーチャンネルでのみ再生される場合、同時に5.1異なるサウンドが再生されます。
paplay
3b)(sa)を使用すると、サインカーブがサブウーファーチャンネルで再生されていることを確認--channels
できます。詳細より。--channel-map
man paplay
3c)上記の方法のいずれも効果がない場合は、ハードウェア受信機の上に追加(仮想)受信機を作成してチャネルを再マップすることができます(たとえば、単一のモノラル受信機入力 - >サブウーファーチャネル出力)。
4)ほとんどのディストリビューションで使用される標準的なPulseaudio構成で十分です。使用しないモジュールとパッケージを識別して削除することで、さらに最小化することは可能ですが、かなりの作業が必要です(もちろん、ディストリビューションによって異なります)。