Nixos 默认音频设备

Posted

技术标签:

【中文标题】Nixos 默认音频设备【英文标题】:Nixos default audio device 【发布时间】:2019-09-26 03:46:21 【问题描述】:

我正在尝试在 NixOS 主机上配置默认音频设备。

我的 alsa 设备是这样的:

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC1220 Analog [ALC1220 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 1: ALC1220 Digital [ALC1220 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

我没有 HDMI 或数字音频设备;我只想使用常规的 ALC1220 模拟设备。

我目前在我的环境中设置了AUDIODEV=hw:1,0(用于sox),并在我的vlcrc 中设置了alsa-audio-device=sysdefault:CARD=Generic。这行得通,但它显然是特定于用户和应用程序的,并且是声明性(声明性?)的痛苦。

似乎它应该是我可以在主机级别设置的东西,例如,通过设置

sound.extraConfig =
  ''
    pcm.!default 
      type hw
      card Generic
    
  '';

在我的 configuration.nix 中,或者可能配置 pulseaudio。

我在 NixOS Wiki(ALSA、Pulse)、ArchLinux、Pulse documentation 等其他网站以及 *** 等其他网站(例如stackexchange)上寻求帮助,但我可以找不到任何真正有效的东西。

我已经尝试过上述方法及其变体;并且还尝试了有和没有脉冲;但我没有发现任何有效的方法。

只要能够为该卡上的所有设备播放音频也将非常棒。

一如既往,任何指点都非常感激。

更新:这是我的 /etc/asound.conf

pcm_type.pulse 
  libs.native = /nix/store/a3v4gh5lbb2g8fizq9xh8nbdp8qrvs6r-alsa-plugins-1.1.6/lib/alsa-lib/libasound_module_pcm_pulse.so ;


pcm.!default 
  type pulse
  hint.description "Default Audio Device (via PulseAudio)"

ctl_type.pulse 
  libs.native = /nix/store/a3v4gh5lbb2g8fizq9xh8nbdp8qrvs6r-alsa-plugins-1.1.6/lib/alsa-lib/libasound_module_ctl_pulse.so ;


ctl.!default 
  type pulse

(并且那个模块是真实的):

$ ls -l /nix/store/a3v4gh5lbb2g8fizq9xh8nbdp8qrvs6r-alsa-plugins-1.1.6/lib/alsa-lib/libasound_module_ctl_pulse.so
-r-xr-xr-x 1 root root 33512 Jan  1  1970 /nix/store/a3v4gh5lbb2g8fizq9xh8nbdp8qrvs6r-alsa-plugins-1.1.6/lib/alsa-lib/libasound_module_ctl_pulse.so

【问题讨论】:

尝试配置sound.enable = true;hardware.pulseaudio.enable = true;。删除sound.extraConfig。然后使用pavucontrol查看检测到哪些音频设备。 谢谢。所以实际上,我已经有了sound.enable = true;hardware.pulseaudio.enable = true;;并删除了 extraConfig。运行 pavucontrol 向我显示了一个设备 - Family 17h (Models 00h-0fh) HD Audio Controller Analog Stereo,带有端口线路输出(插入)和耳机(拔出)。尽管如此,在未设置 AUDIODEV 的情况下运行(比如)play 会产生静默,而 AUDIODEV=hw:1,0 工作的地方(通过线路输出)。 嗯,也许你缺少一个 PulseAudio ALSA 插件。考虑发布您的/etc/asound.conf 好的,完成了。 嗯...好吧,尝试再次使用play而不设置AUDIODEV,然后运行pavucontrol并转到“播放”选项卡。您看到列出的“ALSA 插件”了吗?也许你也有“系统声音”。如果您确实看到 ALSA 插件,那么它可能已静音。注意:应用程序需要产生音频(即使您听不到它)才能显示在“播放”选项卡中。 【参考方案1】:

这个问题很可能是由于pulseaudio comandeering默认设备,尽管它在 ~/.asoundrc 中列出。

使用 alsa 钩子覆盖 pulse 对默认设备的命令的最佳解决方案。为此,请在顶部使用以下内容编辑您的 ~/.asoundrc:

@hooks [
    
        func load
        files [
            "~/.asoundrc"
        ]
        errors false
    
]

然后您可以根据需要添加默认设备,在您的情况下可能类似于以下内容:

pcm.!default 
        type hw
        card "Generic"


ctl.!default 
  type hw
  card "Generic"

【讨论】:

以上是关于Nixos 默认音频设备的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .Net 应用程序中识别默认音频设备?

如何使用默认输出设备作为使用 AudioGraph 录制音频的源?

WaveBadFormat 调用 .Init() 非默认音频设备 Naudio 时

设置默认音频捕获设备(特定麦克风)

在非默认音频设备上设置 HID 音量调高/调低

如何在 Visual Basic .NET 中找到默认音频设备?