Alsa - dmix、Softvolの設定?

Alsa - dmix、Softvolの設定?

私は次の目標を達成したいと思います。

Linuxボックスに接続されたUSB DAC。今までは問題ありません...

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では、パルスオーディオはありません。私が理解したように、スレーブデバイスと同じ最終dmix出力を持つ複数のSoftvolレシーバが必要です。

そのうちのいくつかを定義すると、すべて下部に同じdmixスレーブデバイスが使用されますが、それぞれ一意の名前(たとえば、pcm.generic_softvol0などpcm.generic_softvol1)を持ちます。また、別のcontrol名前(おそらくsoft0soft1または別の名前)を指定してください。

私のUSB出力は、意味のある名前ではなく「デバイス」という名前で識別されます。下から見る内容がまさにそれです。

# 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"
  }
}

関連情報