Dispositivo di uscita audio, interruttore rapido?


19

A seconda della situazione, utilizzo gli altoparlanti o l'auricolare per l'uscita audio. Dato che la mia cuffia è una cuffia USB, si comporta come un proprio dispositivo audio.

Attualmente passo tra i dispositivi di uscita audio facendo clic sull'icona dell'altoparlante nella barra in alto a destra, dove seleziono Impostazioni audio, vai alla scheda Uscita e lì sceglie il dispositivo che desidero.

Quello che mi chiedo è se ci potrebbe essere un modo più semplice / veloce per passare avanti e indietro alle mie cuffie USB? Forse un'icona della barra dedicata, una mappatura dei tasti o così?

Sto eseguendo Ubuntu 10.04, con il desktop Gnome predefinito.

Risposte:


11

Per modificare il dispositivo di uscita audio predefinito dalla riga di comando, è possibile utilizzare pacmd utilità della riga di comando Pulse Audio.

Ho trovato la necessità di fare lo stesso oggi, volendo passare da cuffie e altoparlanti, entrambi collegati a schede audio separate. Ecco lo script della shell che ho scritto per farlo:

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

Appunti:

  • Questo scambia tra i primi due dispositivi di uscita audio che il pacmd elencati dall'utilità. Se hai più di due dispositivi audio e vuoi passare a uno diverso, dovrai sostituire la logica alla linea 7 con alcuni condizionali.
  • Lo scambio del dispositivo sink predefinito non fa nulla per le applicazioni attualmente in esecuzione: continueranno a essere emesse sul dispositivo precedente. Questo script sposta anche la destinazione del sink per tutti gli input esistenti. Cioè, se esegui questo script con la musica riprodotta su un dispositivo, passerà immediatamente all'altro. Se desideri che le applicazioni esistenti continuino sul dispositivo precedente, commenta l'ultima riga (e la riga 5, se lo desideri).

7

Bene, puoi installarlo pavucontrol, mostra le app con la selezione del dispositivo audio nella prima scheda, ti farà risparmiare un po 'di sforzo. Ma quello che vuoi davvero penso che sia contrassegnare la tua cuffia USB come dispositivo predefinito, quindi ogni volta che lo colleghi tutto il suono verrà reindirizzato ad esso e quando lo scolleghi, tornerà agli altoparlanti. Senza sforzo, davvero.


2
Come si imposta il dispositivo predefinito in Ubuntu Precise?
blueyed

3

La domanda è piuttosto vecchia ma la mia risposta potrebbe essere ancora utile per gli utenti di GNOME 2. Ho usato l' applet PulseAudio Mixer per il problema esatto qui descritto. È possibile modificare i dispositivi di input e output direttamente nel menu del pannello. È il modo più conveniente che ho trovato.


3

Ovviamente anche il passaggio da un dispositivo all'altro tramite l'applet funziona correttamente. Ma la cosa bella dello scrivere una sceneggiatura è che è super veloce. Ho messo il mio per esempio sulla scorciatoia da tastiera alt + s. quindi quando voglio passare dalle cuffie agli altoparlanti, devo solo premere alt + s.

Comunque. Andrew ha detto:

Se hai più di due dispositivi audio e vuoi passare a uno diverso, dovrai sostituire la logica alla linea 7 con alcuni condizionali.

Questo è quello che ho fatto. Lo condivido, nel caso qualcuno abbia problemi con esso:

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

Quello che ho fatto diversamente è a) trovare il sink attivo in un ciclo for. E b) passare al lavandino successivo aumentando l'indice di 1. Quindi modulo il risultato per il numero di lavandini. Ciò assicura che, ad esempio, quando si hanno 3 lavandini, (2 + 1)% 3 = 0. Quindi dall'indice di sink 2 passeremmo all'indice di sink 0.

In questo modo l'interruttore consente di spostarsi verso l'alto attraverso i lavandini disponibili.


2

Grazie per gli script! Ho aggiunto anche una parte per l'input (microfono) nel caso qualcuno voglia usarla:

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

Per scorrere l'elenco dei dispositivi audio, utilizzare il seguente script:

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

Tutto il merito va a tsvetan dal forum di Ubuntu .


1

Stavo cercando un modo per farlo per passare tra gli altoparlanti interni sul mio laptop e una base Apple Airport che è collegata al mio stereo. Ho deciso di assegnare tasti di scelta rapida per passare. Volevo che la finestra delle preferenze audio si aprisse per un secondo per dare una conferma visiva dell'interruttore e poi ho usato wmctrl per chiudere la finestra.

(Ho usato ctrl + F8 e ctrl + F9 come tasti di scelta rapida poiché la funzione Fn di questi tasti sul mio laptop è di aumentare e diminuire il volume in modo che sembrasse ovvio che le funzioni ctrl cambiassero l'uscita audio.)

Ho usato i seguenti 2 (quasi identici) script:

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

Il primo passa alla base Apple (che ho assegnato a ctrl + F9) e il secondo torna agli altoparlanti interni (ctrl + F8). Ciò presuppone che questi siano gli unici 2 dispositivi di output installati.


1

Ho basato sullo script di Andrews per farlo usare notify-osd per annunciare quello che ha appena fatto. Modifica le righe con i nomi in base alle tue esigenze.

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.