Установить устройство для программы в PulseAudio?

10

В компьютере у меня есть 2 звуковых устройства.

Когда я запускаю какую-то программу (скажем, Skype), я могу (используя «pavucontrol» -> «PulseAudio Volume Control») настроить так, чтобы это приложение использовало данное устройство для воспроизведения или записи.

Но - на вкладках «Воспроизведение / Запись» приложение видно только в том случае, если оно в данный момент что-то делает (воспроизведение или запись).

Как настроить устройство для каждого приложения, но до того, как приложение начнет запись или воспроизведение звуков?


источник

Ответы:

8

Я не знаю, есть ли где-нибудь файл настроек или конфигурации для этого, но это можно сделать с помощью переменных среды. Мой ответ основан на этой записи в FAQ по PulseAudio о настройке источника записи. Я пробовал это с выходом (приемник в PulseAudio), но он должен работать как для ввода и вывода.

Первый шаг - получить внутреннее имя источника и приемника, которые вы хотите использовать. Для этого вам нужно использовать pactl listкоманду. Эта команда вернет кучу данных, но ниже будут перечислены только имена источников:

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

Этот список, вероятно, будет содержать имена как для обычных источников, так и для источников мониторов PulseAudio (в моей системе это «монитор» в названии). Вы захотите использовать обычное имя источника устройства, на которое хотите настроить таргетинг.

Вы можете сделать то же самое, чтобы получить имена раковин:

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

Получив имена, вы можете запустить что-то вроде следующего из вашего терминала:

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

Конечно, если вы хотите запустить это из меню, вам, вероятно, потребуется создать сценарий оболочки и использовать его вместо команды по умолчанию. Примерно так должно работать:

#!/bin/sh
set PULSE_SINK <sink_name>
set PULSE_SOURCE <source_name>
<command_to_run_skype>
moberley
источник
Прекрасный маленький набор команд для поиска внутренних имен, та !!
Vix
2

Вам нужно экспортировать и назначить переменные, например:

#! / Bin / ш 
export PULSE_SINK = "имя_ раковины" 
export PULSE_SOURCE = "имя_источника" 
command_to_run_skype
Криш
источник
0

Я написал Perl-модуль, который делает это PulseAudio.pm .

Это позволяет вам использовать такой синтаксис,

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

Конечно, вы можете использовать любые критерии в get_sink_byи get_source_by. Это читает от pacmd info. Это работает по той же идее ответа @ moberley, за исключением того, что она использует библиотеку perl, а не заставляет вас выполнять собственный анализ. Он также предоставляет некоторые другие интересные функции.

Для моего подкаста я использую это для запуска Skype тоже ..

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

( btrlistener*Скайп имена для blogtalkradio).

Эван Кэрролл
источник