为PulseAudio中的程序设置设备?


10

在计算机中,我有2个声音设备。

当我运行某些程序(例如Skype)时,我可以(使用“ pavucontrol”->“ PulseAudio音量控制”)进行设置,以便该应用程序将使用给定的设备进行播放或录制。

但是-仅在“播放/录制”选项卡中当前正在执行某项操作(播放或录制)时,该应用程序才可见。

如何为每个应用程序设置设备,但是在应用程序开始录制或播放声音之前呢?

Answers:


8

我不知道是否在任何地方都有此设置或配置文件,但是可以使用环境变量来完成。我的答案基于PulseAudio常见问题解答中有关设置录制源的条目。我已经尝试过使用输出(PulseAudio中的接收器)进行此操作,但是它应该同时适用于输入和输出。

第一步是获取要使用的源和接收器的内部名称。为此,您需要使用pactl list命令。该命令将返回一堆数据,但是以下将仅列出源名称:

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

该列表可能会包括常规源和PulseAudio的监视源的名称(在我的系统上,其名称中包含“ monitor”)。您将要使用要定位的设备的常规源名称。

您可以执行相同的操作来获取接收器名称:

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

获得名称后,您可以在终端上运行以下内容:

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

当然,如果要从菜单运行此程序,则可能需要创建一个Shell脚本并使用该脚本而不是默认命令。这样的事情应该起作用:

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

可爱的小命令集来查找内部名称,ta!
Vix

2

您需要导出并分配变量,如下所示:

#!/ bin / sh 
导出PULSE_SINK =“ sink_name” 
导出PULSE_SOURCE =“ source_name” 
command_to_run_skype

0

我编写了一个执行此PulseAudio.pm的perl模块。

它允许您使用这样的语法,

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。除了使用perl库而不是强迫您自己进行解析之外,这与@moberley答案的相同思想起作用。它还提供了其他一些漂亮的功能。

对于我的播客节目,我实际上也使用它来启动Skype。

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

btrlistener*Skype名称用于blogtalkradio)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.