从 Unity 切换到 XFCE 后,我在声音配置方面遇到了困难。我的系统上有多个声卡,我想要使用的声卡是内核最后加载的那个。ALSA 似乎默认使用第一个。
此外,我无法同时在多个应用程序中使用声音,我会收到“声音设备正在使用”等错误。有人可以为我提供有关 ALSA 架构的一些见解、探测系统所需使用的工具以及如何构建配置文件的建议。
答案1
系统范围的配置文件存储在“/etc/asound.conf”中,所有符合 ALSA 的应用程序每次启动时都会读取此文件。要了解当前的声音设备,最好的位置是“/proc/asound/”。如果您没有配置文件,ALSA 应用程序将使用 /proc/asound/card0 作为默认声音设备。您可以在此处“/proc/asound/version”检查您正在运行的 ALSA 版本。
每个声音设备都有一组与之关联的“pcm”。每个 pcm 基本上是一个输出通道:“前置”、“后置”、“环绕 41”、“环绕 51”等。您可以使用以下命令查看哪些 pcm 通道可用:
aplay -L | grep CARD
这些 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、子设备 0 上的 dmix pcm 通道。您可以使用以下命令查看与每个声卡关联的子设备:
aplay -l
最后一步是配置文件本身,位于此处“/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
在本例中,我使用系统“dmix:2,0”上的第三个声音设备的“dmix”输出通道。第三个索引为 2,因为它从 0 开始(card0、card1、card2)。此外,“ctl”架构引用同一张卡,但这次使用它的软链接名称“Creative”。
我希望这对其他人有用。
答案2
尝试在终端中输入 alsamixer。