Встановити пристрій для програми в PulseAudio?


10

У комп’ютері у мене є 2 звукові пристрої.

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

Але - на вкладках Відтворення / Запис додаток видно, лише якщо він зараз щось робить (відтворення чи запис).

Як я можу встановити пристрій на програму, але перш ніж програма почне записувати чи відтворювати звуки?

Відповіді:


9

Я не знаю, чи є файл налаштування чи конфігурації для цього будь-де, але це можна зробити із змінними середовища. Свою відповідь я базував на цьому записі у поширених запитаннях 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>

Прекрасний набір команд для пошуку внутрішніх імен, та !!
Вікс

2

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

#! / бін / ш 
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*Імена Skype призначені для blogtalkradio).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.