Alsa - dmix、softvol 配置?

Alsa - dmix、softvol 配置?

我想实现以下目标:

USB DAC 连接到 Linux 盒子。目前为止没有任何问题...

card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

现在我的目标是使用 alsa 的 dmix 模块播放多个应用程序,并且这些虚拟通道应该使用 alsamixer 独立控制(这甚至可能吗?) - 是否可以将 dmix 通道映射到应用程序?例如,我可以让 mpd 始终播放到 2.1,而让另一个应用程序始终播放到 2.2?

答案1

我知道这是一个老问题……但这里有一个答案。我用一些我在旅行时必须使用的 USB 耳机进行了测试,因为我把好的耳机忘在家里了。

我的实际配置也使用了均衡插件,但已被省略。

使用Debian Sid,没有pulseaudio。据我了解,您只需要拥有多个与从属设备具有相同最终 dmix 输出的 softvol 接收器即可。

定义其中一些,它们都在底部使用相同的 dmix 从属设备,但每个都有唯一的名称(可能是pcm.generic_softvol0pcm.generic_softvol1等等)。也给它们起不同的control名字(也许soft0soft1或者别的什么)。

我的 USB 输出只是用名称“Device”来标识自己,而不是有意义的名称。这就是您在下面看到的。

# generic headset softvol
pcm.generic_softvol {
  type plug;
  slave.pcm {
    type softvol;
    slave {
      pcm "dmix:CARD=Device,DEV=0";
    }
    control {
      name "soft"
      card "Device"
    }
  }
}

这样,您应该能够在启动程序之前设置环境变量以更改其输出声音的位置。有了这个,如果您定义了像上面这样的附加软卷,您可以告诉特定程序使用它来播放(ALSA_PCM=generic_softvol0 program_name例如;如果没有提供,它将使用定义的软卷来default代替)。

pcm.!default {
  type asym
  playback.pcm {
    @func getenv
    vars [ ALSA_PCM ]
    default "generic_softvol" # don't prefix with 'plug:' because generic_softvol is already a plug-type as we've defined it.
  }
  # Put your preferred capture device here for the default.
  capture.pcm {
    @func getenv
    vars [ ALSA_CAPTURE_PCM ]
    default "dsnoop:CARD=Loopback,DEV=1"
  }
}

相关内容