Impostare il dispositivo per il programma in PulseAudio?


10

Nel computer ho 2 dispositivi audio.

Quando eseguo un programma (diciamo Skype), posso (usando "pavucontrol" -> "PulseAudio Volume Control") configurare in modo che questa applicazione utilizzi il dispositivo dato per la riproduzione o la registrazione.

Ma - nelle schede di riproduzione / registrazione è visibile solo se al momento sta facendo qualcosa (riproduzione o registrazione).

Come posso impostare il dispositivo per applicazione, ma prima che l'applicazione inizi a registrare o riprodurre suoni?

Risposte:


8

Non so se esiste un'impostazione o un file di configurazione per questo ovunque, ma può essere fatto con variabili di ambiente. Ho basato la mia risposta su questa voce nelle FAQ di PulseAudio sull'impostazione della sorgente di registrazione. Ho provato questo con l'output (un sink in PulseAudio) ma dovrebbe funzionare sia in input che in output.

Il primo passo è ottenere il nome interno della sorgente e del sink che si desidera utilizzare. Per fare ciò è necessario utilizzare il pactl listcomando. Tale comando restituirà una pila di dati, ma di seguito verranno elencati solo i nomi delle fonti:

LANG=C pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2

Tale elenco probabilmente includerà i nomi sia delle fonti regolari che delle fonti di monitoraggio di PulseAudio (che nel mio sistema hanno "monitor" nel nome). Ti consigliamo di utilizzare il normale nome di origine del dispositivo che desideri scegliere come target.

Puoi fare la stessa cosa per ottenere i nomi dei sink:

LANG=C pactl list | grep -A2 'Sink #' | grep 'Name: ' | cut -d" " -f2

Una volta ottenuti i nomi, puoi eseguire dal terminale qualcosa di simile al seguente:

PULSE_SINK=<sink_name> PULSE_SOURCE=<source_name> <command_to_run_skype>

Ovviamente, se vuoi eseguirlo da un menu, probabilmente dovrai creare uno script shell e usarlo al posto del comando predefinito. Qualcosa del genere dovrebbe funzionare:

#!/bin/sh
set PULSE_SINK <sink_name>
set PULSE_SOURCE <source_name>
<command_to_run_skype>

Grazioso piccolo set di comandi per trovare nomi interni, ta !!
Vix,

2

Devi ESPORTARE e assegnare le variabili, in questo modo:

#! / Bin / sh 
export PULSE_SINK = "sink_name" 
export PULSE_SOURCE = "nome_origine" 
command_to_run_skype

0

Ho scritto un modulo perl che fa questo PulseAudio.pm .

Ti permette di usare una sintassi come questa,

use PulseAudio;
use constant TRACKIN  => 'pci-0000:00:1d.7-usb-0:2.3:1.0'

my $pa = PulseAudio->new;

my $sink   = $pa->get_sink_by([qw/properties device.bus_path/] => TRACKIN );
my $source = $pa->get_source_by(
  [qw/properties device.bus_path/] => TRACKIN
  , [qw/properties device.profile.name/] => 'analog-stereo'
);
$pa->exec({
  sink      => $sink
  , source  => $source
  , prog    => '/usr/bin/audacity'
});

Ovviamente, puoi usare qualsiasi criterio in get_sink_bye get_source_by. Si legge da pacmd info. Questo funziona sulla stessa idea della risposta di @ moberley, tranne per il fatto che utilizza una libreria perl invece di forzarti a eseguire il tuo analisi. Fornisce anche alcune altre funzionalità intelligenti.

Per il mio podcast show, lo uso anche per avviare Skype ..

$pa->exec({
  sink      => $sink
  , source  => $source
  , prog    => '/usr/bin/skype'
  , args    => ['--callto','btrlistener021']
});

(i btrlistener*nomi Skype sono per blogtalkradio).

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.