Definir dispositivo para programa no PulseAudio?


10

No computador eu tenho 2 dispositivos de som.

Quando executo algum programa (digamos, Skype), posso (usando "pavucontrol" -> "PulseAudio Volume Control") configurar para que este aplicativo use o dispositivo fornecido para reprodução ou gravação.

Mas - nas guias Reprodução / Gravação, o aplicativo é visível apenas se estiver fazendo algo no momento (reprodução ou gravação).

Como posso definir o dispositivo por aplicativo, mas antes que o aplicativo comece a gravar ou reproduzir sons?

Respostas:


8

Não sei se existe um arquivo de configuração ou configuração para isso em qualquer lugar, mas isso pode ser feito com variáveis ​​de ambiente. Baseei minha resposta nesta entrada nas Perguntas frequentes do PulseAudio sobre como definir a fonte de gravação. Eu tentei isso com saída (um coletor no PulseAudio), mas deve funcionar para entrada e saída.

O primeiro passo é obter o nome interno da fonte e coletor que você deseja usar. Para fazer isso, você precisa usar o pactl listcomando Esse comando retornará uma pilha de dados, mas o seguinte listará apenas os nomes de origem:

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

Essa lista provavelmente incluirá os nomes das fontes regulares e das fontes de monitor do PulseAudio (que no meu sistema têm "monitor" no nome). Você deseja usar o nome de origem regular do dispositivo que deseja segmentar.

Você pode fazer o mesmo para obter os nomes dos coletores:

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

Depois de obter os nomes, você pode executar algo como o seguinte no seu terminal:

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

Obviamente, se você quiser executar isso em um menu, provavelmente precisará criar um shell script e usá-lo em vez do comando padrão. Algo assim deve funcionar:

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

Adorável pequeno conjunto de comandos para encontrar nomes internos, ta !!
Vix

2

Você precisa EXPORTAR e atribuir as variáveis, assim:

#! / bin / sh 
exportar PULSE_SINK = "sink_name" 
exportar PULSE_SOURCE = "source_name" 
command_to_run_skype

0

Eu escrevi um módulo perl que faz isso PulseAudio.pm .

Permite que você use uma sintaxe como esta,

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

Obviamente, você pode usar qualquer critério em get_sink_bye get_source_by. Lê de pacmd info. Isso funciona com a mesma idéia da resposta do @ moberley, exceto que ele usa uma biblioteca perl em vez de forçar você a fazer sua própria análise. Ele também fornece alguns outros recursos interessantes.

No meu programa de podcast, eu também uso isso para iniciar o Skype.

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

(os btrlistener*nomes do Skype são para blogtalkradio).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.