Ustawić urządzenie dla programu w PulseAudio?

10

W komputerze mam 2 urządzenia dźwiękowe.

Kiedy uruchamiam jakiś program (powiedzmy Skype), mogę (za pomocą „pavucontrol” -> „PulseAudio Volume Control”) skonfigurować, aby ta aplikacja używała danego urządzenia do odtwarzania lub nagrywania.

Ale - w zakładkach Odtwarzanie / Nagrywanie aplikacja jest widoczna tylko wtedy, gdy coś robi (odtwarzanie lub nagrywanie).

Jak ustawić urządzenie dla aplikacji, ale zanim aplikacja zacznie nagrywać lub odtwarzać dźwięki?


źródło

Odpowiedzi:

9

Nie wiem, czy jest gdzieś plik ustawień lub konfiguracji, ale można to zrobić za pomocą zmiennych środowiskowych. Swoją odpowiedź oparłem na tym wpisie w PulseAudio FAQ na temat ustawiania źródła nagrywania. Próbowałem tego z wyjściem (ujściem w PulseAudio), ale powinno działać zarówno dla wejścia jak i wyjścia.

Pierwszym krokiem jest uzyskanie wewnętrznej nazwy źródła i ujścia, którego chcesz użyć. Aby to zrobić, musisz użyć pactl listpolecenia. To polecenie zwróci stos danych, ale następujące wyświetli tylko nazwy źródeł:

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

Ta lista prawdopodobnie będzie zawierać nazwy zarówno zwykłych źródeł, jak i źródeł monitorów PulseAudio (które w moim systemie mają w nazwie „monitor”). Będziesz chciał użyć zwykłej nazwy źródła urządzenia, na które chcesz kierować reklamy.

Możesz zrobić to samo, aby uzyskać nazwy zlewu:

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

Po uzyskaniu nazw możesz uruchomić z terminalu coś takiego:

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

Oczywiście, jeśli chcesz uruchomić to z menu, prawdopodobnie musisz utworzyć skrypt powłoki i użyć go zamiast domyślnego polecenia. Coś takiego powinno działać:

#!/bin/sh
set PULSE_SINK <sink_name>
set PULSE_SOURCE <source_name>
<command_to_run_skype>
Moberley
źródło
Piękny mały zestaw poleceń do znajdowania nazw wewnętrznych, ta !!
Vix
2

Musisz EKSPORTOWAĆ i przypisać zmienne, takie jak to:

#! / bin / sh 
eksport PULSE_SINK = "nazwa_zamknięcia" 
eksport PULSE_SOURCE = "nazwa_źródła" 
Command_to_run_skype
Krish
źródło
0

Napisałem moduł perla, który robi to PulseAudio.pm .

Pozwala to na użycie takiej składni,

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'
});

Oczywiście możesz użyć dowolnych kryteriów w get_sink_byi get_source_by. Czyta z pacmd info. Działa to w oparciu o ten sam pomysł odpowiedzi @ moberley, z wyjątkiem tego, że używa biblioteki perla zamiast zmuszania do samodzielnego parsowania. Zapewnia również kilka innych fajnych funkcji.

W moim programie podcastowym używam go również do uruchomienia Skype'a.

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

( btrlistener*nazwy Skype dotyczą blogtalkradio).

Evan Carroll
źródło