播放前设置PulseAudio播放设备

播放前设置PulseAudio播放设备

我在带有两个声卡的计算机上运行带有 PulseAudio 的 Debian 9。下面的屏幕截图显示了未播放音频时的音量控制应用程序。播放音频时,会显示一个下拉菜单,我可以在其中选择输出设备。有没有办法选择输出设备音频流是否已启动?对我来说这似乎更自然。

PulseAudio 音量控制

编辑:这是我的典型用例。我想在客厅立体声音响(声卡 B)上播放计算机中的歌曲,而不是通过桌面扬声器(声卡 A)。由于我无法提前选择输出,因此我必须启动歌曲并在桌面扬声器上播放它,然后在音量控制窗口的播放选项卡中显示该选项后选择客厅扬声器。既然我已经选择了所需的输出,那么我需要从头开始播放歌曲。这是糟糕的用户体验。

答案1

默认情况下,PulseAudio 将尝试记住上次使用每个应用程序的输出的定向位置,并继续使用该输出设备,直到另有通知。如果没有以前的使用记录,则使用后备设备。

您可以禁用此功能,并使所有应用程序始终开始使用后备设备,除非通过编辑/etc/pulse/default.pa更改行进行了专门配置:

load-module module-stream-restore

对此:

load-module module-stream-restore restore_device=false

或者,有一个paswitch工具可以遍历 PulseAudio 每个应用程序的持久输出记录,并将它们全部更改为指向指定的设备:https://www.tablix.org/~avian/git/paswitch.git更多信息在这里

答案2

Pulseaudio 播放将首先尝试使用默认接收器设备,
如果默认值不可用,则将使用后备设备

只有 2 台设备时,将其中一台设置为默认设备,如果默认设备不可用,第二台设备将自动备用

pavucontrol不显示默认接收器设置

您可以使用这些终端命令:
pactl get-default-sink- 显示默认接收器名称
pactl list sinks | grep 'Name'- 显示所有活动接收器的名称
然后使用pactl set-default-sink <Name>- 更改默认接收器
(也可以使用文本编辑器更改第一个命令中的默认接收器文件)

或者用于pasystray在 gui 中查看信息并根据需要更改默认值

设置默认值后,用户可以设置音频流以pavucontrol使用其他接收器
用户更改将pavucontrol保存到文件夹 ~/.config/pulse/ 中的数据库文件中

答案3

这是使用 telcoM 和 nik gnomic 答案的完整解决方案。为了防止 PulseAudio 记住每个应用程序使用的最后一个声卡,我首先复制/etc/pulse/default.pa~/.config/pulse/添加restore_device=false

sed 's/load-module module-stream-restore.*/load-module module-stream-restore restore_device=false/' /etc/pulse/default.pa > ~/.config/pulse/default.pa

接下来,使用 zenity 命令创建了一个简单的对话框:

#!/bin/sh

set -o errexit -o nounset

defaultCard="$(pactl get-default-sink)"

options="$(pactl list sinks \
    | awk -F': *' -v defaultCard="$defaultCard" \
        '/Name:/ { if ($2 == defaultCard) { printf "TRUE " } else { printf "FALSE " }; printf "%s ", $2 } \
        /Description:/ { print "\"" $2 "\"" }' \
    | sort -k 3 \
    | tr '\n' ' ')"

# quoted strings in `options' requres `eval'
newDefaultCard="$(eval zenity --list --radiolist --title=\"Sound Card Selection\" --text=\"Select a sound card to use\" --hide-header --hide-column=2 --width=330 --height=160 --column= --column= --column= $options)"

pactl set-default-sink "$newDefaultCard"

结果如下:

声卡选择器

相关内容