(モニターの)HDMIオーディオ出力に切り替えて、システムオーディオジャックから通常のオーディオ出力に戻すには(モニターにはオーディオ出力がないため、ヘッドフォンの場合)、サウンド設定を開いて、常に適切なチャンネルを選択します。頻繁に切り替えるため、パネルにトグルボタンを作成したり、トグルにショートカットキーを割り当てたりする方法はありますか。
:aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
pulseaudio を使用すると、コマンドラインから出力シンクを選択できます。
pacmd set-default-sink "SINKNAME"
このコマンドは、ランチャー、スクリプトで使用したり、キーボードショートカットに割り当てたりして、さまざまなシンクをすばやく切り替えることができます。 「SINKNAME」を目的のシンクの名前または番号に置き換えてください。関連する番号と名前を持つ既知のシンクのリストは、次のコマンドで提供されます。
pacmd list-sinks
注:コマンドラインインターフェイスを介した出力シンクの変更は、 ストリームターゲットデバイスの読み取り が無効になっている場合にのみ有効になります。これは、/etc/Pulse/default.pa
の対応する行を次のように編集することで実行できます。
load-module module-stream-restore restore_device=false
あるいは、pulseaudioを実行して、内部オーディオデバイスと、仮想出力デバイスを追加するオプションを指定して paprefs を実行することにより、hdmiデバイスに同時にサウンドを出力できます。
私はこれを非常に迷惑だと感じ、出力を切り替えるスクリプトを作成しました。
#!/bin/bash
CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)
if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else
pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"
fi
キーボードの未使用キーをバインドして実行します( カスタムコマンドをキーボードショートカットにバインドする方法? を参照)
Ubuntu 16.04でテスト済み
ただし、これにより、必要なアプリケーションの音声のみを切り替えることができます。
USAGE:シンクを変更するアプリケーションに焦点を合わせ、このスクリプトを実行します。それでおしまい!!!
このスクリプトは、フォーカスされているアプリケーションを検出し、そこから再生されているすべてのオーディオを見つけて、次に利用可能なシンクに切り替えます。
https://Gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe
しかし、最初にxidが必要です
xprop -root _NET_ACTIVE_WINDOW
次に、それを$xid
に挿入して、アプリケーションのpidを取得します
xprop -id $xid _NET_WM_PID
最初に、コマンドpacmd list-sink-inputs
の出力を線形化して、各行に1つのシンク入力をリストし、同じ行にインデックス、シンク、およびpidを表示します。
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
段階的に分析してみましょう。
grep -E 'index:|sink:|process.id
は、index:
、sink:
、またはprocess.id
を含む行のみを保持します
tr '\n' ' '
はすべての行を結合します
tr -d '"'
は、"
文字をすべて削除します。 引用符なしでpidを取得する必要があります
sed -e 's/index:/\n/g'
は、すべてのindex:
オカレンスを改行文字\n
に置き換えます
tail -n +2
は最初の行が空のため削除します
結果は次のようになります。
180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521 181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
1行を分析して、その意味を理解しましょう。
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182
はシンク入力インデックス、0
はシンクインデックス、最後の13752
は属するアプリケーションのpidです
次に、各行を繰り返します
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
最後に、フォーカスされたアプリのpidと一致するシンク入力のpidのみをフィルター処理します
if [ $sink_input_pid = $app_pid ]; then
awk
を使用すると、必要な要素を取得できます
sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')
シンクの回転を0から再開するタイミングを知るために、シンクの数を取得します。
sink_list_size=${#sink_list_array[@]}
次のシンクを見つけるには、シンクのリストを反復処理して、どれがcurrent_sink_indexに一致するかを知り、次のシンクのインデックスを知る必要があります。
i=0
for sink in "${sink_list_array[@]}"; do
i=$((($i+1)%sink_list_size)) # i++ mod(#sinks)
if [ $sink = $current_sink_index ]; then
next_sink_index=${sink_list_array[i]}
break
fi
done
pacmd move-sink-input $sink_input_index $next_sink_index
ショートカットキーを設定するとき、ubuntuのショートカットマネージャーで動作させることができませんでした。だから私はcompizconfig-settings-managerをインストールする必要がありました
Sudo apt-get install compizconfig-settings-manager
これまでの回答の多くに基づいて、再生シンクを使用可能なものと交互に設定するスクリプトを作成しました。
使用する最良の方法は、実行するキーボードショートカットを作成することです。そのため、そのキーの組み合わせを押すたびに、オーディオは次の利用可能なシンクにリダイレクトされます。
コードはこちらから入手できます: https://Gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c
スクリーンショットにはサウンドカードが1つしか表示されていないため、このサウンドカードのoutputを切り替える必要があると思います。
例:統合されたサウンドカードを1つ搭載したノートブックがありますが、ドッキングするとデジタル出力(SPDIF)があります。
だから私がしたかったのは、pulseaudioでアクティブな出力または「プロファイル」を切り替えることです。
私はまさにそれを行うコマンドを見つけました:
pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo
目的の出力設定(ここではデジタル出力ですが、アナログ(マイクロ)入力)の正しい名前を取得するために私がしたことは:
pacmd list | grep output
Unityの代わりにGnome Shellを使用している場合は、以下の拡張機能をインストールできます。その後、トップパネルのボリュームショートカットから切り替えることができます。 https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/
私もこの問題の解決策を見つけようとしています。 Ubuntu 11.04の時点では、これは直接可能ではないようです。このガイドでは、HDMIとアナログの両方を個別の出力として追加することしかできなかったため、pacmdには3つのシンクが表示されます。その後、上記のコマンドを使用してシンクを切り替えることができます。 ( 参照 )
しかし、どうやらUbuntu 11.11には、ジャック検出システムを備えたPulseAudioが搭載されます。以下のWebサイトによると、David Henningssonはudevを介して検出をコーディングしているため、Pulseオーディオは、同じサウンドカードの異なるプロファイル間の切り替えを含め、最後に追加された出力に自動的に切り替えられます(セットアップの場合と同様)。 ( こちら を参照)
来週の金曜日に最終版を試すときに、これがうまくいくことを願っています。
サウンドスイッチャーインジケーター (PPAの追加が必要です)の代わりに、コマンド(またはスクリプト)を作成し、ショートカットで呼び出します:
私の場合、hdmi-stereo-extra1+input
プロファイルだったので、1行で次のようになります。
[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"
カスタムショートカット (gnome-control-center keyboard
)を使用してbash -c
で実行できます(他のショートカットと競合する場合は警告が表示されます)。
私が使う:
alias
を.bashrc
に追加することもできます。
Ubuntu 16.04および18.04でテスト済み
スクリプトの動作を上回らない場合は、@ user829996の回答に基づいていくつかの変更を行いました。
#!/bin/bash
set -euo pipefail # strict mode
activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"
# If it doesn't work run pacmd list-cards and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"
if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
pacmd set-card-profile 0 "$HDMI_PROFILE"
fi
activeProfile
パネルにトグルボタンを作成する方法はありますか
インジケーターアプレットを作成しました サウンド出力を切り替えることができます。