次のように、コマンドラインでプログラムのオーディオ出力をファイルにリダイレクトしたい
$ redirect-wrapper file.wav my-program
そのため
これを行う方法はありますか? これ 関連する質問は助けにはなりませんヘルプ、コマンドラインソリューションが必要です。 This も関連している可能性がありますが、グラフィカルアプリケーションpavucontrolにも依存しています。 pavucontrol、pacmdに代わる端末を見つけました。
しかし、これはまだ次の妥協を可能にするだけです:
pacmd list-sinks
pacmd set-default-sink
を使用して、デフォルトのシンクをsnd-aloopシンクに設定します。pacmd list-sink-inputs | grep name-of-my-program
これが何かを見つけた場合、入力は開いています。pacmd set-default-sink
でのデフォルトに戻します。ただし、これにより、デフォルトのシンクが数分までの期間で変更されます(通常、プログラムが実際にサウンドを再生するまで、シンクの入力は開かれません。サウンドは、起動直後にある必要はありません)。この妥協案を実装しました。 Github 。
妥協のない答えを探しています。
ええと、pulseaudioのドキュメントを見てください。
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.
これにより、pulseaudioシンクを完全に置き換えることができるはずです。これで十分でない場合は、独自の使い捨てPulseAudioサーバーを実行してください。
このページ( https://askubuntu.com/questions/60837/record-a-programs-output-with-pulseaudio )を参照すると、parec
/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