如何配置ALSA?

Gea*_*phy 6 audio linux alsa

从 Unity 切换到 XFCE 后,我的声音配置遇到了困难。我的系统上有多个声卡,我想使用的那个是内核加载的最后一个。ALSA 似乎默认使用第一个。

此外,我不能同时在多个应用程序中使用声音,我会收到“正在使用的声音设备”等错误。谁能向我提供一些有关 ALSA 架构的见解,以及我需要使用的工具来探测关于如何构建配置文件的系统和建议。

Gea*_*phy 16

系统范围的配置文件存储在“/etc/asound.conf”中,所有符合 ALSA 的应用程序在每次启动时都会读取这个文件。了解当前声音设备的最佳位置是“/proc/asound/”。如果您没有配置文件,ALSA 应用程序将使用 /proc/asound/card0 作为默认声音设备。您可以在此处“/proc/asound/version”检查您正在运行的 ALSA 版本。

每个声音设备都有一堆与之关联的“pcm”。每个 pcm 基本上都是一个输出通道:“front”、“rear”、“surround41”、“surround51”等。您可以使用以下命令查看哪些 pcm 通道可用:

aplay -L | grep CARD
Run Code Online (Sandbox Code Playgroud)

其中一些 pcm 通道不对应于物理音频输出,而是由 ALSA 提供的软件通道。我们感兴趣的那个叫做“dmix”。“dmix”通道是由 ALSA 提供的软件混合器,用于处理多个并发输入流。

需要注意的一件事是使用多种约定来识别特定的声音设备。配置文件将使用 card0、card1 等或简单的 0、1 等。也可以通过名称来引用卡,例如 Creative、Nvidia 等。这些名称在 ALSA proc 目录中定义为软链接: 'ls -l /proc/asound'。通常,在配置文件中引用PCM通道时,格式如下:“channel-name:card-index,sub-index”。因此,例如,“dmix:2,0”指的是卡 2 上的 dmix pcm 通道,子设备 0。您可以使用以下命令查看与每个声卡关联的子设备:

aplay -l
Run Code Online (Sandbox Code Playgroud)

最后一步是配置文件本身,位于'/etc/asound.conf'。我们在这个文件中需要 2 个组件,一个“pcm”通道定义和一个“ctl”通道定义。“pcm”通道定义了我们的输出,并负责将多个声音流复用到单个硬件输出通道中。'ctl' 通道用于混音器,负责控制音量。

ALSA 使用称为“插头”的软件 pcm 通道来处理多路复用。它是从属 pcm 输出通道的软件前端。从属 pcm 输出通道本身必须能够进行混音。示例配置文件如下:

pcm.custom
{
    type plug
    slave
    {
        pcm "dmix:2,0"
    }
}

ctl.custom
{
    type hw
    card Creative
}

pcm.!default pcm.custom
ctl.!default ctl.custom
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我将“dmix”输出通道用于系统“dmix:2,0”上的第三个声音设备。第三个索引是 2,因为它从 0(card0、card1、card2)开始。此外,“ctl”模式引用了同一张卡片,但这次使用的是软链接名称“Creative”。

我希望这对其他人有用。

  • 您的解释非常好,但可以通过显示您提到的“aplay”命令的输出以及“/proc/asound”的内容来改进,您可以在其中获取构建“/etc/asound.conf”的信息。 “定制”这个名字从何而来?为什么是`/etc/asound.conf`的最后两行? (2认同)