在PulseAudio中为程序设置设备?

10 audio linux kde-4 pulse-audio

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

当我运行某个程序(比如 Skype)时,我可以(使用“pavucontrol”->“PulseAudio Volume Control”)进行设置,以便此应用程序将使用给定的设备进行播放或录音。

但是 - 只有当它当前正在执行某些操作(播放或录制)时,在播放/录制选项卡中的应用程序才可见。

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

小智 11

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

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

LANG=C pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2
Run Code Online (Sandbox Code Playgroud)

该列表可能包括常规源和 PulseAudio 的监听源的名称(在我的系统中名称中包含“监听”)。您需要使用要定位的设备的常规源名称。

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

LANG=C pactl list | grep -A2 'Sink #' | grep 'Name: ' | cut -d" " -f2
Run Code Online (Sandbox Code Playgroud)

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

PULSE_SINK=<sink_name> PULSE_SOURCE=<source_name> <command_to_run_skype>
Run Code Online (Sandbox Code Playgroud)

当然,如果您想从菜单中运行它,您可能需要创建一个 shell 脚本并使用它而不是默认命令。这样的事情应该工作:

#!/bin/sh
set PULSE_SINK <sink_name>
set PULSE_SOURCE <source_name>
<command_to_run_skype>
Run Code Online (Sandbox Code Playgroud)