プログラムで特定のプログラムのオーディオ出力をファイルにリダイレクトする

プログラムで特定のプログラムのオーディオ出力をファイルにリダイレクトする

プログラムのオーディオ出力をコマンドラインのファイルにリダイレクトしたいと思います。

$ redirect-wrapper file.wav my-program

〜する

  • プログラムの出力は聞こえません。つまり、出力は次のようになります。ただファイルに移動
  • 番組以外は何も録音しません。この特定プログラムはファイルにリダイレクトされます。
  • オーディオシステムの残りの部分は完全に妨げられず、設定オプションを前後に変更したり、同様のものはありません。

これを行う方法はありますか?これ実際に関連する質問いいえヘルプ、「そこをクリックしてからそこをクリック」する代わりに、コマンドラインソリューションが必要です。これおそらく関連があり、グラフィックアプリケーション pavucontrol によって異なります。 pavucontrolの端末代替品であるpacmdを見つけました。

ただし、これにより、次のような妥協が可能になります。

  1. デフォルトのリスナーをインポートし、その内容を保存します。どのように?閲覧中かもしれませんpacmd list-sinks
  2. デフォルトの受信機をsnd-aloop受信機に設定しますpacmd set-default-sink
  3. その流しの記録です。
  4. プログラム開始
  5. アプリケーションが受信機入力を開くまで待ちます。pacmd list-sink-inputs | grep name-of-my-program何かが見つかると、入力が開きます。
  6. デフォルト値を元の値に戻しますpacmd set-default-sink
  7. アプリケーションが終了したら、録音を停止してください。

ただし、これは最大数分間デフォルトの受信機を変更します(受信機の入力は通常、起動直後ではなく、プログラムが実際にサウンドを再生するまでオンになりません)。私はこの妥協案を実装しました。ジタブ

それでも妥協できない答えを探しています。

答え1

まあ、pulsaudioのドキュメントを見てください。

man pulseaudio

次の環境変数があります

   $PULSE_SERVER: the server string specifying the server to connect to when a client asks for a sound server connection  and  doesn't  explicitly  ask  for  a  specific
   server.  The server string is a list of server addresses separated by whitespace which are tried in turn. A server address consists of an optional address type speci‐
   fier (unix:, tcp:, tcp4:, tcp6:), followed by a path or host address. A host address may include an optional port number. A server address may be prefixed by a string
   enclosed in {}. In this case the following server address is ignored unless the prefix string equals the local hostname or the machine id (/etc/machine-id).

   $PULSE_SINK: the symbolic name of the sink to connect to when a client creates a playback stream and doesn't explicitly ask for a specific sink.

これにより、あなたのパルスオーディオ受信機を完全に交換できることを願っています。十分でない場合は、ワンタイムパルスオーディオサーバーを実行してください。

このページをご覧ください(https://askubuntu.com/questions/60837/record-a-programs-output-with-pulseaudioparec)、シンクとストリームで記録して書き込むことができる/pacatコマンド(エイリアス)を見つけます。

すべてを組み合わせると、次のラッパーが生成されます(まだ実際には実行していませんが、一時的にこれを実行しましたが)。

sink_name="sink-$(date +%s)"
pacat $sink_name.monitor 
parec -d steam.monitor | oggenc -b 192 -o /tmp/steam.ogg --raw - &
pid=$!
PULSE_SINK=$sink_name "$@"
kill $pid

関連情報