Audioausgabegerät, schneller Schalter?


19

Je nach Situation verwende ich entweder meine Lautsprecher oder mein Headset für die Audioausgabe. Da es sich bei meinem Headset um ein USB-Headset handelt, verhält es sich wie ein eigenes Audiogerät.

Gegenwärtig wechsle ich zwischen Audioausgabegeräten, indem ich auf das Lautsprechersymbol in der oberen rechten Leiste klicke, die Audioeinstellungen auswähle, auf die Registerkarte Ausgabe gehe und dort das gewünschte Gerät auswähle.

Was ich mich frage ist, ob es eine einfachere / schnellere Möglichkeit gibt, zu meinem USB-Headset hin und her zu wechseln? Vielleicht ein spezielles Taskleistensymbol, eine Tastenzuordnung oder so?

Ich verwende Ubuntu 10.04 mit dem Standard-Gnome-Desktop.

Antworten:


11

Um das Standard-Audioausgabegerät über die Befehlszeile zu ändern, können Sie das Befehlszeilenprogramm pacmdPulse Audio verwenden.

Ähnliches musste ich heute tun, als ich zwischen Kopfhörern und Lautsprechern wechseln wollte, die beide an separate Audiokarten angeschlossen waren. Hier ist das Shell-Skript, das ich dazu geschrieben habe:

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

Anmerkungen:

  • Dadurch wird zwischen den ersten beiden Audioausgabegeräten gewechselt, die das pacmdDienstprogramm auflistet. Wenn Sie mehr als zwei Audiogeräte haben und zu einem anderen wechseln möchten, müssen Sie die Logik in Zeile 7 durch einige Bedingungen ersetzen.
  • Das Austauschen des Standard-Senkengeräts hat für die derzeit ausgeführten Anwendungen keine Auswirkung. Sie werden weiterhin auf dem vorherigen Gerät ausgegeben. Dieses Skript verschiebt auch das Senkenziel für alle vorhandenen Eingaben. Das heißt, wenn Sie dieses Skript ausführen, während Musik auf einem Gerät abgespielt wird, wechselt es sofort zum anderen. Wenn Sie möchten, dass die vorhandenen Anwendungen auf dem vorherigen Gerät fortgesetzt werden, kommentieren Sie die letzte Zeile aus (und Zeile 5, wenn Sie möchten).

7

Nun, Sie können es installieren pavucontrol, es zeigt Apps mit Auswahl der Audiogeräte auf der ersten Registerkarte, es erspart Ihnen einige Mühen. Aber was Sie wirklich wollen, ist, dass Sie Ihr USB-Headset als Standardgerät markieren. Jedes Mal, wenn Sie es anschließen, wird der gesamte Ton zu diesem Gerät umgeleitet, und wenn Sie es ausstecken, wird es wieder zu den Lautsprechern zurückgeleitet. Wirklich mühelos.


2
Wie setzt man das Standardgerät in Ubuntu Precise?
Blueyed

3

Die Frage ist ziemlich alt, aber meine Antwort kann für GNOME 2-Benutzer immer noch nützlich sein. Ich habe PulseAudio Mixer Applet für das hier beschriebene Problem verwendet. Sie können die Eingabe- und Ausgabegeräte direkt im Bedienfeldmenü ändern. Es ist der bequemste Weg, den ich gefunden habe.


3

Natürlich funktioniert auch das Umschalten von Geräten mit dem Applet einwandfrei. Aber das Coole am Schreiben eines Drehbuchs ist, dass es superschnell ist. Ich habe meine zum Beispiel auf das Tastenkürzel alt + s gelegt. Wenn ich also von Kopfhörer auf Lautsprecher umschalten möchte, muss ich nur Alt + S drücken.

Sowieso. Andrew sagte:

Wenn Sie mehr als zwei Audiogeräte haben und zu einem anderen wechseln möchten, müssen Sie die Logik in Zeile 7 durch einige Bedingungen ersetzen.

Das ist, was ich tat. Ich teile es, falls jemand Probleme damit hat:

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

Was ich anders gemacht habe, ist a) die aktive Senke in einer for-Schleife zu finden. Und b) wechseln Sie zur nächsten Senke, indem Sie den Index um 1 erhöhen. Dann moduliere ich das Ergebnis durch die Anzahl der Senken. Dies stellt sicher, dass zB bei 3 Senken (2 + 1)% 3 = 0 ist. Von Senkenindex 2 würden wir also zu Senkenindex 0 wechseln.

Auf diese Weise kann der Schalter durch die verfügbaren Spülen nach oben bewegt werden.


2

Danke für die Skripte! Ich habe einen Teil für den Eingang (Mikrofon) hinzugefügt, falls jemand ihn benutzen möchte:

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

Verwenden Sie das folgende Skript, um durch die Liste der Audiogeräte zu blättern:

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

Alle Verdienste gehen an tsvetan aus dem Ubuntu-Forum .


1

Ich suchte nach einer Möglichkeit, um zwischen den internen Lautsprechern meines Laptops und einer Apple-Basisstation zu wechseln, die an meine Stereoanlage angeschlossen ist. Ich beschloss, Hotkeys zuzuweisen, um zu wechseln. Ich wollte, dass das Audio-Einstellungsfenster für eine Sekunde auftaucht, um eine visuelle Bestätigung des Schalters zu geben, und benutzte wmctrl, um das Fenster danach zu schließen.

(Ich habe Strg + F8 und Strg + F9 als Tastenkürzel verwendet, da die Fn-Funktion dieser Tasten auf meinem Laptop zum Erhöhen und Verringern der Lautstärke dient. Es schien also offensichtlich, dass die Strg-Funktionen die Audioausgabe ändern.)

Ich habe die folgenden 2 (fast identischen) Skripte verwendet:

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

Der erste wechselt zur Apple-Basisstation (die ich mit Strg + F9 belegt habe) und der zweite wechselt zurück zu den internen Lautsprechern (Strg + F8). Dies setzt voraus, dass dies die einzigen 2 installierten Ausgabegeräte sind.


1

Ich habe auf Andrews Skript aufgebaut, um es mit notify-osd ankündigen zu lassen, was es gerade getan hat. Bearbeiten Sie die Zeilen mit den Namen nach Ihren Wünschen.

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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.