我可以只使用ALSA来选择声卡吗?

我可以只使用ALSA来选择声卡吗?

如果我从alsamixerNvidia 声卡中选择,它根本不起作用,并且我无法提高六个项目的音量(S/PDIFS/PDIF 1等): 在此输入图像描述

一些信息:

cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf3310000 irq 31
 1 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xf3080000 irq 17
Kernel: 5.10.0-11-amd64 
Distro: Debian GNU/Linux 11 (bullseye) 

要使用监听扬声器,我可以只使用 ALSA 吗?

如果我开始pulseaudio我可以使用它们。

# pactl list short sources
1   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
2   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
5   alsa_output.pci-0000_01_00.1.hdmi-stereo-extra2.monitor module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
# pactl list short sinks
1   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
4   alsa_output.pci-0000_01_00.1.hdmi-stereo-extra2 module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED

pasystray可以简单地选择水槽GP106 High Definition Audio Controller ...,但有时它不起作用。

当 PA 运行时,如果我选择HDA nvidia声卡,则alsamixer与以前相同。

这是/etc/asound.conf我做的:

defaults.pcm.card 1
defaults.ctl.card 1

这是为了选择默认卡。

我可以更改正在使用的那个alsavolume-icon,但在它显示静音图标后,我无法像使用时那样提高音量alsamixer

我可以让它工作吗?然后asound.conf我会将其设为默认卡。

答案1

在这里,ALSA 仅提供实际硬件可以执行的操作。对于 NVidia HDA 声音芯片,它仅为每个 S/PDIF 数字通道(通常与 HDMI 或 DisplayPort 数字显示连接相关)提供开/关开关。

您应该能够alsamixer通过按M键来打开/关闭每个通道,并使用向左/向右箭头键在通道之间移动。仅当声音芯片具有实际的混音器功能时,才会显示音量滑块(可使用上/下箭头键调节)。仅以数字格式传递声音的显示卡和其他设备可能根本不具有模拟式混音器功能,因为它们通常只不过是标准格式数字音频数据的“直管”。

如果您的意思是在使用 PulseAudio 时甚至看不到屏幕截图中的显示,请尝试显式设置声卡编号,即alsamixer -c 0alsamixer -c 1

使用 Debian 当前的默认配置,如果您使用 PulseAudio,alsamixer不带选项运行将仅显示 PulseAudio 的主音量控制,而不会显示其他内容。但如果您指定声卡编号,您仍然可以访问 ALSA 驱动程序提供的设置。

PulseAudio 引入了软件混音功能,允许您通过使用 CPU 修改数字声音数据流以使其更柔和或更响亮来调整音量,或者将来自多个源的声音混合到单个输出中,即使该流在技术上仅发送到输出设备接受线路电平声音数据流,如 HDMI 音频通道。

PulseAudio 也可以采样率转换需要时:如果您的显示器仅支持单一采样率,则 ALSA 驱动程序层将拒绝播放任何使用不同采样率的声音数据的尝试。

技术上ALSA可以也可以进行软件混音和采样率转换,只是 ALSA 调整软件混音的方式通常涉及编辑文件.asoundrc,而 PulseAudio 允许轻松动态重新配置,即使在播放声源时也是如此。因此,用于alsa-lib此目的的用途已不再受欢迎,而 PulseAudio 基本上已经取代了它的位置。

ALSA 过去分为三个主要组成部分:

  • alsa-driver:实际的声卡驱动程序(现已集成到Linux内核中)
  • alsa-lib:使用驱动程序的通用库,可使用.asoundrc.
  • alsa-tools:用户空间工具,如alsamixeraplayarecord等。

HDMI 显示器和许多 USB 连接的声音设备仅接受一组离散采样频率,因此在需要时自动转换采样率的能力变得越来越重要。这似乎是alsa-lib失宠的另一个原因。

要使用 ALSA 驱动程序接口选择声卡,您需要通过卡和设备编号(请参阅aplay -l可用选项)或输出设备名称(aplay -L分别参阅)来指定设备。

不幸的是,将声卡和设备编号或 ALSA 设备名称输入到使用 ALSA 驱动程序接口的应用程序的确切方法因应用程序而异:某些应用程序仅接受名称,其他应用程序只能使用数字。命令行选项或配置项名称也因应用程序而异:对于如何完成它,没有一个明确的约定。

答案2

要使用监听扬声器,我可以只使用 ALSA 吗?

大多数直接使用 ALSA 的应用程序都可以选择输出设备(通过命令行选项或通过配置对话框)。

您还可以创建一个声音源配置文件,系统范围 ( /etc/asound.conf) 或每个用户 ( $HOME/.asoundrc),您可以在其中设置默认设备

如果我从 alsamixer 选择 nvidia 声卡,它根本不起作用

选择其中的声卡alsamixer只是为了获取该声卡的混音器设置。它不会使声卡成为默认声卡,也不会影响其他任何东西。

如果您安装了 Pulseaudio,通常还会有一个 asoundrc 文件将pulse伪设备指定为默认设备,因此这可能与您想要单独使用 ALSA 执行的操作发生冲突。


调试 asoundrc 问题的帮助:我的~/.asoundrc

 pcm.!default "plughw:2,0"

为卡 2选择自动plughw,由 确定aplay -L。您可能需要卡 1。从该行开始,测试它是否适用于aplaywithout -D。如果有效,请添加该ctl部件。


如果您的编解码器(声音硬件芯片)没有音量控制,那么它就没有音量控制,因此您无法更改音量。

你可以在前面放一个“软件音量控制”:

pcm.!default "mynvidia"
ctl.!default "mynvidia"

pcm.mynvidia {
  type softvol
  slave {
    pcm "plughw:2,0"
  }
  control {
    name "Master"
    card "NVidia"
  }
}

也许你也可以将plughw与象征性的卡名一起使用,但我自己还没有尝试过。

答案3

正如 dirkt 所说,你需要调试你的.asoundrc.
用于aplay -L列出所有已定义的 PCM。

根据他们的配置,仅允许在某个时间进行流式传输。
就我而言,pcm.!default "plughw:1,8"有正确的价值观。

虽然此配置允许更多流:

pcm.nvidiamix {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:NVidia,3"
        channels 2
        #rate 48000
        period_time 0
        period_size 1024
        buffer_time 0
        buffer_size 8192
    }
    bindings.0 0
    bindings.1 1
}
pcm.!default {
    type plug
    slave.pcm "nvidiamix"
    hint {
        show on
        description "Default Card NVidia"
    }
}
ctl.!default {
    type hw
    card "NVidia"
}

您会看到一个新的Master声音,alsamixer但这毫无意义,您只能将S/PDIF发出声音的声音静音。
Intel HDA可以设置音量级别,而 Nvidia 则不行。
使用该ddcutil软件包,您可以更改显示器设置。

某些应用程序可能无法工作,apulse包可能会解决这个问题。
或者你可以尝试pipewire https://wiki.debian.org/PipeWire

相关内容