Alsa - 我怎么知道我的默认音频输出是卡 2 和设备 0,而不是 hdmi?

6 alsa vlc audio configure pulseaudio

我怎么知道我的系统默认声音输出是卡 2 和设备 0,而不是卡 2 的设备 3 或 7 或 1?

我这样做了,但没有声音。

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Device [C-Media USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: PCH [HDA Intel PCH], device 1: ALC892 Digital [ALC892 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

$ cat /etc/asound.conf
#pcm.!default { 
#  type plug; 
#  slave { pcm "hw:2" } 
#} 
pcm.!default {
    type hw
    card 2
    device 0
}
Run Code Online (Sandbox Code Playgroud)

CL.*_*CL. 5

要设置默认设备,您不应重新定义default设备,而只需将以下内容放入/etc/asound.conf

defaults.pcm.card 2      # or better "PCH"
defaults.pcm.device 0
Run Code Online (Sandbox Code Playgroud)

这仅适用于实际使用默认设备而未显式指定设备的程序。如果某些程序(如 PulseAudio 或 VLC)已针对某些特定输出设备进行配置,则必须更改该配置。


小智 5

如果您发现您的声卡不断切换索引,您将无法defaults.pcm.card 2/etc/asound.conf. 一种(复杂的)方法可能有效,就是根据您想要的优先级配置声音内核模块。

这种方法在Debian Bug #614113 中有描述:

  1. 运行alsamixer;
  2. 使用 F6 并研究可用的声音设备
  3. 为在设备上播放设置正确的级别;
  4. 运行一些允许选择声音设备的声音播放器(audacious例如);
  5. 与您的声音设备一起玩(重复步骤 2,3)并决定默认设置;
  6. 退出alsamixer和玩家;
  7. 以root身份登录;
  8. 运行lsmod | grep snd并尝试了解哪些模块对应于物理声音设备;
  9. 如果不确定您在第 2 步中是否正确确定了模块:转到/sys/module并检查名称以“snd”开头的所有目录。该目录的名称与模块完全相同。如果您将在检查目录中看到“驱动程序”目录 - 那么检查目录的名称是与物理声音设备对应的模块名称。记住(用记事本写)所有这些模块。
  10. modinfo <module name> | grep desc 为您在步骤 2 和 3 中找到的每个模块运行 。阅读说明并决定这些模块的优先级。这将是相应声音设备的优先级。
  11. /etc/modprobe.d
  12. 创造snd_cards_priorities.conf
  13. 写入 snd_cards_priorities.conf 如下:

    alias snd-card-0 <module for highest priority card>
    options <module for highest priority card> index=0
    alias snd-card-1 <module for lower priority card>
    options <module for lower priority card> index=1
    
    Run Code Online (Sandbox Code Playgroud)
  14. 保存存档;
  15. /usr/sbin/alsa force-reload 命令重启alsa ;
  16. 运行 cat /proc/asound/cards 命令并检查声音设备的顺序是否正确(设备 #0 具有最高优先级);
  17. 重复步骤 9、10 几次并检查声音设备顺序是否没有改变;
  18. 退出根;

  19. 运行alsamixer并配置您的默认声音设备,退出alsamixer

  20. 使用您最喜欢的声音播放器来测试您的新配置。