更改终端的音频输出

更改终端的音频输出

alsamixer我有一张 Xonar DGX 卡,我可以通过转到Analog Output选项并在Stereo Headphones和之间切换来更改音频输出Stereo Headphones FP。如何使用命令行执行相同的操作?

我查找并找到了有关接收器以及如何使用它们进行切换的信息pacmd,但据我了解,我的两个输出都在同一个接收器内,即我的 Xonar 卡。

答案1

我相信您可以使用多种工具来完成此操作,例如amixer、 或pamd、 或pactl

笔记:你的假设也是我理解事物的方式。接收器我相当于实际的声卡(输出),它们的输出称为端口。

本指南的实际定义标题为PulseAudio 的底层原理:

下沉

接收器是一个输出设备。它是消耗样本的活动单元。

Sink 通常运行一个具有自己的事件循环的线程,从连接的接收器输入中查看样本块,然后混合它们。它还实现时钟并保持延迟。世界其他地方通常使用消息与接收器进行通信。

典型的接收器代表输出声音设备,例如连接到声卡线路输出或蓝牙耳机上的耳机。 PulseAudio 自动为每个检测到的输出设备创建一个接收器。

例子

这是一个展示如何使用的示例pactl

$ pactl list sinks |& grep -E "Sink|Ports|analog-ou"
Sink #0
    Ports:
        analog-output-lineout: Line Out (priority: 9900, not available)
        analog-output-headphones: Headphones (priority: 9000, not available)
    Active Port: analog-output-lineout

在上面您可以看到我Active Port:当前的声卡线路输出。让我们把它换成耳机。

$ pactl set-sink-port 0 analog-output-headphones

如果我们再次检查:

$ pactl list sinks |& grep -E "Sink|Ports|analog-ou"
X11 connection rejected because of wrong authentication.
Sink #0
    Ports:
        analog-output-lineout: Line Out (priority: 9900, not available)
        analog-output-headphones: Headphones (priority: 9000, not available)
    Active Port: analog-output-headphones

man pactl

   set-sink-port SINK PORT
          Set the specified sink (identified by its symbolic name or
          numerical index) to the specified port (identified by its symbolic 
          name).

如果音频设备消失怎么办?

在极少数情况下,我注意到音频输出设备从设备列表中神秘地消失。如果您发现发生这种情况,您可以通过告诉 Pulse Audio 重新加载其模块来轻松解决此问题:

$ pactl load-module module-detect

参考

答案2

我曾经pacmd将声音从电脑扬声器自动切换到 HDMI:

if grep '^connected$' /sys/class/drm/card0/card0-HDMI*/status ;then             
  sleep 2
  pacmd set-card-profile 0 output:hdmi-stereo
else
  sleep 2
  pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo
fi

要获取活动声音配置文件:

pacmd list |grep 'active profile'
        active profile: <output:analog-stereo+input:analog-stereo>

要列出支持的所有可用输出声音配置文件:

pacmd list |grep 'output:'

答案3

这里的所有其他答案都没有解决我的问题,因为它们不要更改配置的必要部分或不要移动活动流。这个问答提供了一些相当复杂的答案。但请注意,今天(截至 2022 年 7 月 15 日)乌班图22.04), 这是很多比描述的更容易slm 的回答或者其他相关的askubuntu Q/A

尤其这个答案在那里让我也在这里考虑一个答案。


你可以只使用

  • pactl list short sinks
  • pactl list short sources

获取可用接收器和源的列表

(从那个答案)。之后,您可以切换

pactl set-default-sink '<the name of the sink from the list>'

提到的答案还提供了一个脚本来在两个不同的设备之间切换/切换。


可持续土地管理提到“一些工具,例如amixer、 或pamd、 或pactl”。这些都可以在不同的答案中找到。这里有一些参考使用

答案4

你可以用 来做到这一点amixer

amixer -c 0 cset name='Analog Output Playback Enum' 0

其中0-c 0代表卡号。最后一个参数如下:

0 - 'Stereo Headphones'
1 - 'Stereo Headphones FP'
2 - 'Multichannel'

相关内容