Dispositivo di uscita audio, interruttore veloce?

19

A seconda della situazione, uso i miei altoparlanti o il mio auricolare per l'uscita audio. Dato che il mio auricolare è un auricolare USB, si comporta come un proprio dispositivo audio.

Attualmente passaggio tra dispositivi di uscita audio facendo clic sull'icona dell'altoparlante nel vassoio in alto a destra, dove seleziono Impostazioni audio, vai alla scheda Output e lì chiamo il dispositivo che voglio.

Quello che mi chiedo è se ci potrebbe essere un modo più semplice / più veloce per passare avanti e indietro alla mia cuffia USB? Forse un'icona del vassoio dedicata, una mappatura dei tasti, o così?

Utilizzo Ubuntu 10.04, con il desktop Gnome predefinito.

    
posta andol 12.09.2010 - 09:37

10 risposte

11

Per cambiare il dispositivo di uscita audio predefinito dalla riga di comando, puoi utilizzare l'utilità della riga di comando pacmd Pulse Audio.

Ho trovato la necessità di farlo in modo simile 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 ( == "*") print "1",; else print "0", }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

[[ ${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

Note:

  • Questo scambio tra i primi due dispositivi di uscita audio che l'utilità pacmd elenca. Se si dispone di più di due dispositivi audio e si desidera passare a uno diverso, sarà necessario sostituire la logica della riga 7 con alcuni condizionali.
  • Lo scambio del dispositivo sink di default non fa nulla per le applicazioni attualmente in esecuzione, continueranno a essere inviate al dispositivo precedente. Questo script sposta anche la destinazione del sink per tutti gli input esistenti. Ad esempio, se si esegue questo script con la riproduzione di musica su un dispositivo, lo si scambierà all'istante. Se desideri che le applicazioni esistenti continuino sul dispositivo precedente, commenta l'ultima riga (e la riga 5, se lo desideri).
risposta data Andrew 20.12.2010 - 05:00
7

Bene, puoi installare pavucontrol , mostra app con selezione di dispositivi audio nella prima scheda, ti farà risparmiare un po 'di fatica. Ma quello che vuoi davvero è di contrassegnare l'auricolare USB come dispositivo predefinito, quindi ogni volta che lo si collega a tutti i suoni verrà reindirizzato ad esso e, quando lo si collega, tornerà agli altoparlanti. Senza sforzo, davvero.

    
risposta data vava 12.09.2010 - 11:33
3

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

    
risposta data dAnjou 14.12.2011 - 17:29
3

Ovviamente anche i dispositivi di commutazione usando l'applet funzionano bene. Ma la cosa bella di scrivere una sceneggiatura è che è super veloce. Metto il mio ad esempio sulla scorciatoia da tastiera alt + s. quindi, quando voglio passare dalle cuffie agli altoparlanti, devo solo premere alt + s.

In ogni caso. Andrew ha detto:

  

Se hai più di due dispositivi audio e vuoi passare a a   diverso, è necessario sostituire la logica della 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 ( == "*") print "1",; else print "0", }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ( == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

#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 in modo diverso è a) trovare il sink attivo in un ciclo for. E b) passare al sink successivo aumentando l'indice di 1. Quindi modifico il risultato per il numero di sink. Ciò assicura che, ad es. quando si hanno 3 lavandini, (2 + 1)% 3 = 0. Quindi dall'indice di sink 2 dovremmo passare all'indice di sink 0.

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

    
risposta data traumtaenzer 18.01.2012 - 08:29
2

Grazie per le sceneggiature! Ho aggiunto una parte per l'input (microfono) nel caso in cui qualcuno volesse 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)
    
risposta data Subbeh 19.12.2011 - 23:16
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:]]\)//p'')
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index='pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)//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:]]\)//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:]]"\(.*\)"//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 .

    
risposta data guttermonk 19.04.2014 - 17:33
1

Stavo cercando un modo per farlo tra gli altoparlanti interni sul mio portatile e un aeroporto di apple stazione base 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 dello switch e usare wmctrl per chiudere la finestra in seguito.

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

Ho usato i seguenti script 2 (quasi identici):

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

Le prime modifiche alla stazione base della mela (che ho assegnato a ctrl + F9) e la seconda torna agli altoparlanti interni (ctrl + F8). Ciò presuppone che questi siano gli unici 2 dispositivi di output installati.

    
risposta data retrokid 22.01.2011 - 13:11
1

Ho costruito lo script di Andrews per farlo usare a notify-osd per annunciare ciò che ha appena fatto. Modifica le righe con i nomi dopo le tue esigenze.

#!/usr/bin/env bash

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

[[ ${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
    
risposta data Kveras 13.05.2012 - 19:55
0

Ho avuto lo stesso problema e ho scritto una piccola applet di indicatori per il desktop di Ubuntu Unity:

link

link

    
risposta data Lukas 21.12.2013 - 13:43
0

Ecco un piccolo script che esegue il ciclo dei sink audio per la finestra attualmente focalizzata: link

Richiede pacmd e xdotool

    
risposta data rif 22.06.2018 - 23:02

Leggi altre domande sui tag