PulseAudioからアクティブ受信機を取得する

PulseAudioからアクティブ受信機を取得する

PulseAudioは(驚くべきことに)単純なクエリコマンドを提供しないので、出力を解析してアクティブなpacmd list-sinks受信機のインデックスを取得します。しかし、どのラインが実際にどのレシーバがアクティブであるかを示すかどうかは不明です。私はインデックスラインの前にアスタリスクがあることを知っています。基本流し台。しかし、これはアクティブ受信機と同じではないようです。 Bluetoothスピーカーを接続するとすべてのオーディオが通過しますが、それにもかかわらず受信機0はまだデフォルトとして表示されます。オーディオを再生すると、オーディオを出力する受信機に「ステータス:実行中」と表示されます。ただし、再生が停止すると一時停止状態に戻ります。

PulseAudioがオーディオに使用する受信機を見つける信頼できる方法はありますか?

答え1

PulseAudio 用語のより深い理解が必要なようです。ソースを一覧表示すると、Bluetoothスピーカーがデフォルトで正しく表示されます。ソースとシンクは明らかに同じインデックスを共有するため、pacmd list-sources抽出したインデックス番号を渡してpactl set-sink-volumeボリュームを変更できます。pactl set-source-volume何も行われていないからです。本当に理解できませんが、うまくいきます。

答え2

私にとって、デフォルトの受信機はアクティブな受信機と同じようです(デフォルトのみを切り替えると、少なくとも切り替えには機能します)。これは直接的な答えではないことを知っていますが、私に合ったデフォルトの受信機を取得するスニペットがあります。

pacmd list-sinks | awk '/\*/ {getline; print $2}'デフォルトの受信者名を取得します。 (<>で囲まれている)

'/\*/ {getline; print $2}':この部分はawkコマンドであり、この部分の目的はアクティブリスナーをインポートして名前を取得することです。

/\*/:これは、awkがアスタリスク(*)を含む行を見つけることを意味します。 pacmd list-sinks出力では、アスタリスクはデフォルトのシンク(現在アクティブなサウンドデバイス)を表します。

{getline; print $2}:これは、awkがアスタリスクを含む行を見つけたときに実行する操作です。 getlineは一致後に次の行を取得し、print $ 2はアクティブな受信者である空白で区切られた新しい行の2番目のフィールド(列)を印刷します。

関連情報