如何通过命令行更改默认音频设备?

Ubuntu的桌面图形界面非常适合更改音频设置(System->Preferences->Sound),例如默认输入/输出设备和音量设置。
然而,我希望能够通过命令行来完成这些操作。图形界面背后使用的是哪个工具?
5个回答

你可以通过命令行使用pacmdpactl命令来全面控制PulseAudio。有关选项,请参阅pacmd --help或维基百科上的PulseAudio
使用pacmd list-sinks查找可能的输出设备的名称或索引号。
使用pacmd list-sources查找可能的输入设备的名称或索引号。
使用pacmd set-default-sink "SINKNAME" | index设置默认输出设备。
使用pacmd set-default-source "SOURCENAME" | index设置默认输入设备。
使用pacmd set-sink-volume index volume设置输出设备音量。
使用pacmd set-source-volume index volume设置输入设备音量(65536 = 100%,0 = 静音;或者更直观一些,0x10000 = 100%,0x7500 = 75%,0x0 = 0%)。
还有许多许多的命令行选项。
注意:只有在禁用流目标设备读取的情况下,通过命令行界面更改输出接口才能生效。可以通过编辑/etc/pulse/default.pa中的相应行来实现此操作。
load-module module-stream-restore restore_device=false

重新启动PulseAudio以使更改生效: pulseaudio -k
如需更详细的教程以及有关在播放过程中更改水槽的说明,请参阅此答案

3PulseAudio已经更改,我认为现在应该是pacmd list-sinks作为第一个命令。 - Anwar
如何将输出设备设置为默认输入设备?我有一个Line6 ToneportUX1(用于塑造吉他音色),它在Ubuntu的声音控制面板中显示为输出设备,但实际上应该是一个输入设备。 - Rob
@MikeDtrick:用这些命令是做不到的。我对USB设备没有经验,但我相信这可能是一个配置文件/驱动程序/端口/ALSA的问题。该设备在ALSA中被识别为输入设备了吗? - Takkat
我刚开始使用AlsaMixer,所以可能帮不上太多忙。在/proc/asound/cards/下,它将Toneport列为一个USB设备,在/proc/asound/pcm下,它显示playback 1: capture 1。这些都是在运行alsamixer并点击[f2]之后的情况。 - Rob
如果您的pacmd list-sinks只列出一个音频输出设备,但在系统设置>声音中可以看到多个输出设备,请参考以下答案:http://askubuntu.com/questions/63599/configuring-hdmi-audio-via-command-line - Severo Raz
链接“stream target device reading”后面的页面现在位于https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/DefaultDevice/。 - scai
@scai; 太棒了!谢谢你。我已经为新链接编辑了我的答案。 - Takkat
1我无法通过这种方式从耳机切换到HDMI输出。这里是我解决问题的方法。 - Pablo Bianchi
请参考 https://wiki.archlinux.org/index.php/PulseAudio/Examples#Set_default_input_sources,我在那里找到了非常有用的东西:如何找到正确的源并将其设置为默认源,始终如一地,无需再次运行任何命令或GUI即可通过重新启动实现。 - miguev
你还可以使用pactl list short sinks命令来获取一个更简单的音频输出设备列表。你需要使用符号名称。 - Tim Richardson
@TimRichardson 谢谢你的建议 - 在2010年(我写下那个答案时)这还不可能。 - Takkat
PulseAudio又多了一个要解决的问题:你必须更改/etc/pulse/default.pa中的流恢复模块,将其设置为load-module module-stream-restore restore_device=false。如果不这样做,PulseAudio将会忽略之前使用过的任何程序的默认输出设备(即使它已经关闭)。PulseAudio试图变得更智能,现在把默认输出设备视为“备用”,只有在没有更好的选择时才使用。而且,似乎PulseAudio 总是知道得更好。 - hackerb9
谢谢,它有效! - jellycsc
如果不是显而易见的话,水槽索引可以代替“SINKNAME”使用。谢谢您的答案! - kas
这是我如何切换到HDMI的命令:pacmd set-default-sink $(pactl list short sinks | grep hdmi | awk '{print $2}') && pulseaudio -k - Anand Rockzz
水槽 = 输出(扬声器) 来源 = 输入(麦克风) - RenRen

是的,在终端中有一个名为alsamixer的类型。

alt text

按下, F1 - 帮助 F2 - 系统信息 F6 - 选择声卡 Esc - 退出菜单

3alamixer似乎很适合调整音量。我如何更改默认设备? - paleozogt
我只用它来调节音量水平。尝试按下F6键,然后告诉我是否有帮助。 - karthick87
36F6让你选择一个声卡进行操作,但它不会改变默认设置。 - paleozogt
虽然了解alsamixer是有用的(必要的),但它根本没有回答楼主的问题。 - Levente

我发现这些说明清晰易懂、易于跟随。它解释了如何通过命令行设置默认音频输出设备(扬声器等),以及如何将您选择的设置作为系统默认设置,这样在机器重新启动后依然有效。

设置默认输出源

要列出可用的输出源,请键入以下命令:

$ pacmd list-sinks | grep -e 'name:' -e 'index:'

  • index: 0

    name: <alsa_output.pci-0000_04_01.0.analog-stereo>

    index: 1

    name: <combined>

索引前的 * 表示当前默认输出。

要设置全局默认值,请在 default.pa 文件中添加源名称:

/etc/pulse/default.pa

...

set-default-sink alsa_output.pci-0000_04_01.0.analog-stereo

...

完成后,您可以注销/登录或手动重新启动 PulseAudio,使更改生效。

设置默认输出接收器


pavucontrol

不是真正的Ubuntu音量控制,但更好!它允许您控制默认设备,甚至可以按应用程序/流控制设备。
您必须确保应用程序实际上正在录制/播放,才能在“播放”或“录制”选项卡中显示,但一旦为该应用程序选择了设备,它似乎会永远记住。
另外(顺便说一句),对于旧的(非脉冲)应用程序,在运行之前使用padsp,例如:
padsp some_old_app

pavucontrol


13问题是如何通过命令行更改音频设备。这不是一个用于命令行的应用程序。 - xorinzor
此外,pavucontrol 只显示已连接的设备,而不是已配对但未连接的设备。 - cipricus

在使用WirePlumber(一个PipeWire会话管理器)的情况下,wpctl可以帮助你。
使用wpctl status命令获取可用的音频设备(默认设备会以*标记)。
PipeWire 'pipewire-0' [0.3.77, machitgarha@machitgarha, cookie:2827478639]
 └─ Clients:
...

Audio
 ├─ Devices:
 │      46. Built-in Audio                      [alsa]
 │      78. Headset H390                        [alsa]
 │  
 ├─ Sinks:
 │  *   49. Built-in Audio Analog Stereo        [vol: 0.90]
 │      84. Headset H390 Pro                    [vol: 1.00]
 │  
 ├─ Sink endpoints:
 │  
 ├─ Sources:
 │...

...

从"Sinks"部分提取设备的编号,并使用wpctl set-default更改默认音频输出设备(即设备)。例如,要将其更改为"Headset H390 Pro":
wpctl set-default 84

检查默认音频输出是否通过wpctl status进行了更改。