web-dev-qa-db-ja.com

オーディオ出力デバイス、高速スイッチ?

状況に応じて、音声出力にスピーカーまたはヘッドセットを使用します。私のヘッドセットはUSBヘッドセットであるため、独自のオーディオデバイスとして動作します。

現在、右上のトレイにあるスピーカーアイコンをクリックしてオーディオ出力デバイスを切り替えます。サウンド設定を選択し、[出力]タブに移動して、必要なデバイスを選択します。

私が思うのは、USBヘッドセットを簡単に切り替えられる方法があるかどうかです。おそらく、専用のトレイアイコン、キーマッピングなどですか?

デフォルトのGnomeデスクトップでUbuntu 10.04を実行しています。

19
andol

コマンドラインからデフォルトのオーディオ出力デバイスを変更するには、pacmd Pulse Audioコマンドラインユーティリティを使用できます。

今日も同様に行う必要があり、ヘッドフォンとスピーカーを切り替えて、両方を別々のオーディオカードに接続する必要がありました。これを行うために書いたシェルスクリプトを次に示します。

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

ノート:

  • これにより、pacmdユーティリティがリストする最初の2つのオーディオ出力デバイスが交換されます。 3つ以上のオーディオデバイスがあり、別のオーディオデバイスに交換する場合は、7行目のロジックをいくつかの条件に置き換える必要があります。
  • デフォルトのシンクデバイスを交換するだけでは、現在実行中のアプリケーションに対しては何も行われません。前のデバイスへの出力が継続されます。このスクリプトは、既存のすべての入力のシンク先も移動します。つまり、あるデバイスで音楽を再生しながらこのスクリプトを実行すると、すぐに別のデバイスに切り替わります。既存のアプリケーションを前のデバイスで続行する場合は、最後の行(および必要に応じて5行目)をコメント化します。
11
Andrew

さて、pavucontrolをインストールできます。最初のタブにサウンドデバイスが選択されたアプリが表示され、手間が省けます。しかし、あなたが本当に望むのは、USBヘッドセットをデフォルトデバイスとしてマークすることです。それを接続するたびにすべてのサウンドがリダイレクトされ、プラグインするときにスピーカーに戻ります。本当に楽です。

7
vava

もちろん、アプレットを使用したデバイスの切り替えも正常に機能しています。しかし、スクリプトを書くことの素晴らしい点は、それが超高速であることです。たとえば、キーボードショートカットのalt + sに配置します。したがって、ヘッドフォンからスピーカーに切り替えたいときは、Alt + sを押すだけです。

とにかく。アンドリューは言った:

3つ以上のオーディオデバイスがあり、別のオーディオデバイスに交換する場合は、7行目のロジックをいくつかの条件に置き換える必要があります。

それが私がしたことです。誰かが問題を抱えている場合に備えて、私はそれを共有します:

#!/usr/bin/env bash

#sinks=($(pacmd list-sinks | grep index | \
#    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

#find active sink
active=0
for i in ${sinks[*]}
do
    if [ $i -eq 0 ]
        then active=$((active+1))
        else break
    fi
done

#switch to next sink
swap=$(((active+1)%${#sinks[@]}))

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

私が異なってやったことは、a)forループでアクティブなシンクを見つけることです。 b)インデックスを1増やして次のシンクに切り替えます。その後、結果をシンクの数でモジュロします。これにより、たとえば3つのシンクがある場合、(2 + 1)%3 = 0。したがって、シンクインデックス2からシンクインデックス0に切り替えます。

このようにして、スイッチは使用可能なシンクを上に移動できます。

3
traumtaenzer

質問はかなり古いですが、私の答えはまだGNOME 2ユーザーにとって有用かもしれません。ここで説明した正確な問題に PulseAudio Mixer Applet を使用しました。入力および出力デバイスは、パネルメニューで直接変更できます。それは私が見つけた最も便利な方法です。

3
dAnjou

スクリプトをありがとう!誰かが使用したい場合のために、入力用の部分(マイク)も追加しました。

while read line ; do
  case $line in 
    *\*\ index*) x=1 ;;
    index*) x=0 ;;
    name*) 
      source=$(echo $line | sed -e "s/.*<//;s/>.*//")
      if [[ $x = "0" ]] ; then
        pacmd set-default-source $source &> /dev/null
      fi ;;
  esac
done < <(pacmd list-sources | grep -e alsa_input -e index)
2
Subbeh

サウンドデバイスのリストを循環するには、次のスクリプトを使用します。

#!/bin/bash

declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}

#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
    next_sink_index=${sinks[$ord]}
    break
fi
let ord++
done

#change the default sink
pacmd "set-default-sink ${next_sink_index}"

#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done

#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
    notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-    synchronous: "Sound output switched to" "$line"
    exit
fi
let ndx++
done;

すべてのクレジットは buntuフォーラム からtsvetanに送られます。

2
guttermonk

Andrewsスクリプトに基づいて作成し、notify-osdを使用して実行内容をアナウンスしました。必要に応じて、名前の付いた行を編集します。

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap 

for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

if [ "$swap" = "0" ]; then
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Corsair 2.1 Speakers!" 

else
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Logitech G930 Headset!" 

fi
1
Kveras

ラップトップの内蔵スピーカーと、ステレオに接続されているApple空港ベースステーション を切り替える方法を探していました。スイッチにホットキーを割り当てることにしました。スイッチを視覚的に確認するために、オーディオ設定ウィンドウを1秒間ポップアップし、その後wmctrlを使用してウィンドウを閉じるようにしました。

(ラップトップのこれらのキーのFn機能は音量を増減するため、ctrl + F8およびctrl + F9をホットキーとして使用したため、ctrl機能でオーディオ出力を変更するのは明らかでした。)

次の2つの(ほぼ同一の)スクリプトを使用しました。

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 1
sleep .8 
wmctrl -c "Sound Preferences"
exit

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 0
sleep .8 
wmctrl -c "Sound Preferences"
exit

最初の変更はAppleベースステーション(ctrl + F9に割り当てた)に変更され、2番目の変更は内部スピーカー(ctrl + F8)に戻ります。これは、これらがインストールされている唯一の2つの出力デバイスであると想定しています。

1
retrokid

以下は、現在フォーカスされているウィンドウのオーディオシンクを循環させる小さなスクリプトです。 https://Gist.github.com/rif/01ffb5e3eb45d2e4e6ebb4652b3b19ce

Pacmdとxdotoolが必要です

0
rif

私は同じ問題を抱えており、Ubuntu Unityデスクトップ用の小さなインジケーターアプレットを作成しました。

https://github.com/lkettenb/sound-output-switcher

http://www.capslockblog.com/images/misc/Screenshot.png

0
Lukas