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이름(아마도 soft0, soft1또는 다른 이름) 을 지정하십시오 .

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

관련 정보