web-dev-qa-db-ja.com

アナログステレオ出力とHDMIオーディオ出力を切り替えるショートカット

(モニターの)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

enter image description here

18
iJeeves

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デバイスに同時にサウンドを出力できます。

paprefs

10
Takkat

私はこれを非常に迷惑だと感じ、出力を切り替えるスクリプトを作成しました。

#!/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

キーボードの未使用キーをバインドして実行します( カスタムコマンドをキーボードショートカットにバインドする方法? を参照)

7
user829996

さらに別のシンクスイッチャースクリプト

Ubuntu 16.04でテスト済み


ただし、これにより、必要なアプリケーションの音声のみを切り替えることができます。

USAGE:シンクを変更するアプリケーションに焦点を合わせ、このスクリプトを実行します。それでおしまい!!!

このスクリプトは、フォーカスされているアプリケーションを検出し、そこから再生されているすべてのオーディオを見つけて、次に利用可能なシンクに切り替えます。

https://Gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe

スクリプトの説明

フォーカスされているアプリケーションのPIDを見つける必要があります

しかし、最初にxidが必要です

xprop -root _NET_ACTIVE_WINDOW 

次に、それを$xidに挿入して、アプリケーションのpidを取得します

xprop -id $xid _NET_WM_PID

次に、その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

そして最後に、シンク入力を移動して再生しますnext_sink_index

pacmd move-sink-input $sink_input_index $next_sink_index

Ubuntu 16.04に関する注意:

ショートカットキーを設定するとき、ubuntuのショートカットマネージャーで動作させることができませんでした。だから私はcompizconfig-settings-managerをインストールする必要がありました

Sudo apt-get install compizconfig-settings-manager
2
Madacol

これまでの回答の多くに基づいて、再生シンクを使用可能なものと交互に設定するスクリプトを作成しました。

使用する最良の方法は、実行するキーボードショートカットを作成することです。そのため、そのキーの組み合わせを押すたびに、オーディオは次の利用可能なシンクにリダイレクトされます。

コードはこちらから入手できます: https://Gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c

1
GermanK

スクリーンショットにはサウンドカードが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
1
ritterkeks

Unityの代わりにGnome Shellを使用している場合は、以下の拡張機能をインストールできます。その後、トップパネルのボリュームショートカットから切り替えることができます。 https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/

1
rubadubdub

私もこの問題の解決策を見つけようとしています。 Ubuntu 11.04の時点では、これは直接可能ではないようです。このガイドでは、HDMIとアナログの両方を個別の出力として追加することしかできなかったため、pacmdには3つのシンクが表示されます。その後、上記のコマンドを使用してシンクを切り替えることができます。 ( 参照

しかし、どうやらUbuntu 11.11には、ジャック検出システムを備えたPulseAudioが搭載されます。以下のWebサイトによると、David Henningssonはudevを介して検出をコーディングしているため、Pulseオーディオは、同じサウンドカードの異なるプロファイル間の切り替えを含め、最後に追加された出力に自動的に切り替えられます(セットアップの場合と同様)。 ( こちら を参照)

来週の金曜日に最終版を試すときに、これがうまくいくことを願っています。

1
Graipher

サウンドスイッチャーインジケーター (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で実行できます(他のショートカットと競合する場合は警告が表示されます)。

screenshot

screenshot

私が使う:

  • Super + Alt + o:ヘッドフォンとHDMIの間で出力を切り替えます。
  • Super + Alt + Up:ボリュームアップ
  • Super + Alt + Down:Vol Down

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
0
Pablo Bianchi

パネルにトグルボタンを作成する方法はありますか

インジケーターアプレットを作成しました サウンド出力を切り替えることができます。

0
Lukas

私の場合、リストにないアナログオプション。 pavucontrolをインストールします:Sudo apt install pavucontrol

アプリケーションを起動して、問題を修正できます。

  1. 次を入力して、ターミナルからアプリを起動します:pavucontrol(enter)
  2. 「構成」タブに移動します。
  3. インターンサウンドでアナログステレオ出力プロファイルを選択する

enter image description here

今、私はここで音を出し、異なるプロファイルを選択することができます(Linux Mintの下):

enter image description here

0
danger89