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


19

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

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

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

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

回答:


11

コマンドラインからデフォルトのオーディオ出力デバイスを変更するには、pacmdPulse 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行目のロジックをいくつかの条件に置き換える必要があります。
  • デフォルトのシンクデバイスを交換するだけでは、現在実行中のアプリケーションに対しては何も行われません。前のデバイスへの出力が継続されます。このスクリプトは、既存のすべての入力のシンク先も移動します。つまり、1台のデバイスで音楽を再生しながらこのスクリプトを実行すると、すぐに他のデバイスに切り替わります。既存のアプリケーションを前のデバイスで続行する場合は、最後の行(および必要に応じて5行目)をコメント化します。

7

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


2
Ubuntu Preciseでデフォルトのデバイスをどのように設定しますか?
12

3

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


3

もちろん、アプレットを使用したデバイスの切り替えも正常に機能しています。しかし、スクリプトを書くことの素晴らしい点は、それが超高速であることです。たとえば、キーボードショートカットの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に切り替えます。

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


2

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

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

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

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

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


1

ラップトップの内蔵スピーカーと、ステレオに接続されているアップルの空港ベースステーションを切り替える方法を探していました。スイッチにホットキーを割り当てることにしました。スイッチを視覚的に確認するためにオーディオ設定ウィンドウを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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.