Atur perangkat untuk program di PulseAudio?

10

Di komputer saya punya 2 perangkat suara.

Ketika saya menjalankan beberapa program (misalkan Skype) saya dapat (menggunakan "pavucontrol" -> "PulseAudio Volume Control") sehingga aplikasi ini akan menggunakan perangkat yang diberikan untuk pemutaran atau perekaman.

Tetapi - dalam aplikasi tab Playback / Recording hanya dapat dilihat jika sedang melakukan sesuatu (pemutaran atau perekaman).

Bagaimana saya bisa mengatur perangkat per aplikasi, tetapi sebelum aplikasi mulai merekam atau memutar suara?


sumber

Jawaban:

8

Saya tidak tahu apakah ada pengaturan atau file konfigurasi untuk ini di mana saja tetapi dapat dilakukan dengan variabel lingkungan. Saya mendasarkan jawaban saya pada entri ini di PulseAudio FAQ tentang pengaturan sumber rekaman. Saya sudah mencoba ini dengan output (wastafel di PulseAudio) tetapi harus bekerja untuk input dan ouput.

Langkah pertama adalah mendapatkan nama internal dari sumber dan wastafel yang ingin Anda gunakan. Untuk melakukan itu, Anda perlu menggunakan pactl listperintah. Perintah itu akan mengembalikan setumpuk data, tetapi yang berikut akan mencantumkan hanya nama sumber:

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

Daftar itu mungkin akan menyertakan nama untuk sumber reguler dan sumber monitor PulseAudio (yang di sistem saya memiliki "monitor" dalam namanya). Anda ingin menggunakan nama sumber reguler perangkat yang ingin Anda targetkan.

Anda dapat melakukan hal yang sama untuk mendapatkan nama wastafel:

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

Setelah mendapatkan nama, Anda dapat menjalankan sesuatu seperti yang berikut dari terminal Anda:

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

Tentu saja, jika Anda ingin menjalankan ini dari menu, Anda mungkin harus membuat skrip shell dan menggunakannya sebagai ganti dari perintah default. Sesuatu seperti ini seharusnya bekerja:

#!/bin/sh
set PULSE_SINK <sink_name>
set PULSE_SOURCE <source_name>
<command_to_run_skype>
moberley
sumber
Set kecil perintah yang indah untuk menemukan nama internal, ta !!
Vix
2

Anda perlu MENGEKSPOR dan menetapkan variabel, seperti ini:

#! / bin / sh 
export PULSE_SINK = "sink_name" 
export PULSE_SOURCE = "source_name" 
command_to_run_skype
Krish
sumber
0

Saya menulis modul perl yang melakukan PulseAudio.pm ini .

Ini memungkinkan Anda untuk menggunakan sintaks seperti ini,

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

Tentu saja, Anda dapat menggunakan kriteria apa pun di get_sink_bydan get_source_by. Bunyinya dari pacmd info. Ini bekerja pada ide yang sama dari jawaban @ moberley kecuali ia menggunakan pustaka perl daripada memaksa Anda melakukan parsing Anda sendiri. Ini juga menyediakan beberapa fitur bagus lainnya.

Untuk acara podcast saya, saya sebenarnya menggunakan ini untuk meluncurkan Skype juga ..

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

( btrlistener*Nama Skype adalah untuk blogtalkradio).

Evan Carroll
sumber