如何使用 shell 在不同的音频输出硬件之间切换?

如何使用 shell 在不同的音频输出硬件之间切换?

我将笔记本电脑与带有扬声器的外接显示器一起使用。当通过 HDMI 连接显示器时,我可以在正常笔记本电脑音频输出和显示器输出之间切换(使用 GUI:声音设置 --> 硬件)。

我多次重复这个过程,并开始想知道是否可以自动化它,或者无论如何,使用 shell 以更快的方式执行它。

我的发行版是带有 gnome 3 的 Ubuntu 12.04。

编辑:

我尝试使用 pacmd,但 list-sinks 只提供我当前正在使用的设备:

pacmd list-sinks | grep name:
name: <alsa_output.pci-0000_00_1b.0.hdmi-stereo>

从 GUI 切换后:

pacmd list-sinks | grep name:
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>

如果我尝试改变它,我会得到:

pacmd set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
Welcome to PulseAudio! Use "help" for usage information.
Sink alsa_output.pci-0000_00_1b.0.hdmi-stereo does not exist.

答案1

在这种情况下,该卡始终是相同的。交换机与另一个交换机之间的变化是“卡配置文件”。

所以实际有效的解决方案是:

pacmd set-card-profile <cardindex> <profilename>

就我而言,我找到了所有卡配置文件:

pacmd list-cards

在我可以通过以下方式在显示器和笔记本电脑扬声器之间切换之后:

pacmd set-card-profile 0 output:hdmi-stereo

和:

pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo

其中 0 是卡的索引:

pacmd list-cards
Welcome to PulseAudio! Use "help" for usage information.
>>> 1 card(s) available.
    index: 0
    name: <alsa_card.pci-0000_00_1b.0>

最后,为了使切换更快,我在 .bashrc 文件中设置了两个别名:

alias audio-hdmi='pacmd set-card-profile 0 output:hdmi-stereo+input:analog-stereo'
alias audio-laptop='pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo'

这样我就可以在来自显示器或笔记本电脑(耳机)的音频之间进行切换,在 shell 中输入:audio-hdmi 或 audio-laptop

答案2

我编写了一个小指示器小程序,可以让您切换声音输出。没有 shell 脚本,但可能对您或其他读者有帮助。

https://github.com/lkettenb/sound-output-switcher

截屏

答案3

我根据之前的脚本创建了一个非常小的脚本,它不仅可以切换音频,还可以切换视频输出。它使用分散在显示之间切换。

这是代码:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo>" ]; then
        pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
        disper -s
else 
        pacmd set-card-profile 0 "output:hdmi-stereo"
        disper -S        
fi

对我来说它特别有用,因为我不喜欢克隆显示器。我要么使用其中之一,要么使用另一个。您可能需要调整音频配置文件以适应您的特定系统。

答案4

你可以尝试这个脚本:https://github.com/giner/helplinux/tree/master/scripts/switch-sound

在 Ubuntu 10.04 - 13.04 和 Arch Linux 上测试

相关内容