Kubuntu 18.04を搭載したミニHPコンピュータがあります。すべてのオーディオが常にアクティブなHDMIポートを通過したいのですが、何らかの理由で一部のアプリケーションでは、PulseAudioは常にオーディオが内蔵スピーカーを通過したいと考えています。
インデックス0がデフォルトです。
$ pacmd list-sinks | grep -e 'name:' -e 'index:'
* index: 0
name: <alsa_output.pci-0000_0a_00.1.hdmi-stereo-extra1>
index: 1
name: <alsa_output.pci-0000_0a_00.6.analog-stereo>
しかし、いくつかのアプリケーションを実行するとき:
$ pactl list short sinks
0 alsa_output.pci-0000_0a_00.1.hdmi-stereo-extra1 module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
1 alsa_output.pci-0000_0a_00.6.analog-stereo module-alsa-card.c s16le 2ch 44100Hz RUNNING
そして私はそれを変更することはできません!
$ pacmd list-sink-inputs | grep available -A 1
1 sink input(s) available.
index: 7
$ pacmd move-sink-input 7 0
Moved failed.
$ pactl move-sink-input 7 0
Failure: Invalid argument
欠陥に関する追加情報をどのように取得できますか?これらのエラーメッセージは有用な情報を提供しません。
答え1
部分的な答え:
Pulseaudioは、リスナーに接続されているすべてのアプリケーションのデータベースを維持し、デフォルトのリスナーを使用する代わりに、起動時にこの接続を再起動します。デフォルトのリスナーは「新しい」アプリケーションでのみ使用されます。
なぜ失敗したのかわかりませんmove-sink-input
。それを移動できますかpavucontrol
?
編集する
OpenALコードはMonoGameのgithubリポジトリにあります。 「OpenAL Pulse Audio」のGoogle検索によると、OpenALのデフォルト設定はリスナーの移動を無効にしますが、~/.alsoftrc
コンテンツを含むファイルを生成します。
[pulse]
allow-moves = true
これは許可されます。私はそれを直接テストしませんでした。
編集する
起動時に記憶された受信機を復元する場合、.alsoftrcオプションリストには該当する項目は表示されません。
パルスオーディオの場合、モジュールストリームの復元ストリームソース/シンクの回復を処理します。 GDBMツールを使用してデータベースを表示できるように、GDBMデータベースファイルに保存します。私が知っている限り、Pulseaudioというアプリケーション名が使用されていますが(再確認する方が良いです)、役割を理解していない複雑なシステムもあります。
したがって、OpenALとの対話をデバッグする必要があります。 OpenALがアプリケーション名を指定しない場合、OpenALがmodule-stream-restoreの機能をオーバーライドし、デフォルトのシンクのみを選択することも、他のものでもかまいません。 OpenALソースコードを見てみると役に立ちます。
もちろん、回避策はOpenALアプリケーションを起動して実行する小さなラッパースクリプトを作成することですmove-sink
。おそらくより早く完了します。