읽는데 4 분 정도 걸려요
2020년 9월 16일 오전 3:06에 작성됨.

( 이 글은 기글하드웨어에 올렸던 글을 옮겨 온 것입니다. )

어제 올린 글에서 HUD100의 문제점으로 pulseaudio에서 하드웨어 볼륨 컨트롤을 지적했었습니다.

그리고, 오늘 학교 다녀오자마자 삽질을 시작했습니다. 그리고 되게 만들었습니다.

여기를 보시면 flags에 HW_VOULME_CTRL이 없는 걸 보실 수 있습니다. 이 flag는 Pulseaudio가 볼륨을 조절할 떄 소프트웨어 볼륨을 사용하는 것이 아니라 하드웨어 단위로 볼륨을 조절한다는 걸 의미합니다. pulseaudio가 아니라 alsa단위로 볼륨이 조작된다는 거죠.

이게 없는 이유는 어제 이야기했습니다. pulseaudio에서 기본으로 조절하게 되는 볼륨 파라미터가 아니라, 독자적인 값을 사용하고 있어서라는 것을요. 그래서 puseaudio 쪽을 삽질을 하게 되면 어떻게든 작동하게 됩니다. 그리고 이 방법은 좀 몇 가지 config을 만져야 했습니다.

우선 pulseaudio가 장치를 인식하는 과정은 다음과 같습니다.

udev가 장치를 인식한다 > pulseaudio에서 장치를 로드한다 > 로드 과정에서 장치의 프로파일을 적용한다

입니다. 그래서 우선 udev를 먼저 건드려야 합니다.

/usr/lib/udev/rules.d 로 들어가게 되면 udev가 장치를 로드할 때 참고하는 설정값들이 들어 있습니다. 여기서 pulseaudio 관련 설정을 찾습니다.

그러면 이런 식으로 여러 장치들의 경우가 나와 있습니다. 모두 pulseaudio 기본 설정으로는 제대로 돌아가지 않는 불행한 장치들이죠. 그럼 우리의 hud100을 여기 등록시켜 봅시다.

벤더 id와 장치 id를 기반으로 설정값을 적으면 되는데, hud100의 경우에는 아래와 같이 적으면 됩니다.

ATTRS{idVendor}==”329d”, ATTRS{idProduct}==”0100″, ENV{PULSE_PROFILE_SET}=”radsone-hud100.conf”

의미를 해석하자면 “329d”라는 회사의 “0100”이란 장치를 로딩할 때는 radsone-hud100.conf를 사용해라라는 의미입니다. hud100 mk2의 경우에는 장치 id가 달라질 수도 있으니 다른 값을 집어넣어야겠죠.

그러면 이제 radsone-hud100.conf를 만들러 가 봅시다.

/usr/share/pulseaudio/alsa-mixer/profile-sets 에 conf들이 들어가게 됩니다. 여기에 config파일을 만들어 줍시다. 내용은


후첨 : pulseaudio가 업데이트 되어서 해당 디렉토리가 없는 경우에는 alsa-card-profile/mixer 디렉토리로 가면 된다.

[General]
auto-profiles = yes

[Mapping analog-stereo]
description = 헤드폰
device-strings = hw:%f
channel-map = left,right
paths-output = radsone-hud100
direction = output

대충 이정도로 넣어주시면 됩니다. 중요한 것은 이 장치가 좌, 우 2채널을 가지고 있고 출력을 할 때는 radsone-hud100이란 path를 사용하라는 정도의 의미입니다.

그 다음은 path를 만들어야 할 차례입니다. /usr/share/pulseaudio/alsa-mixer/paths/ 에 radsone-hud100.conf란 파일을 만들어 봅시다.

[General]
priority = 99

[Element earstudio HUD100]
switch = mute
volume = merge

간단하게 이렇게 만들면 되는데, 대충 설명하자면  “earstudio HUD100″란 파라미터를 조정하고, 메인 볼륨과 연동해라 라는 의미입니다. 이렇게 어떤 볼륨을 조절해야 하는지를 pulseaudio에게 알려주는 것이죠.

그리고 재부팅을 하게 되면

이런 식으로 프로필이 생기게 되고

HW_VOULME_CTRL 플래그가 붙는 걸 확인하실 수 있습니다. 이제 이 장치는 alsa에서 직접 볼륨을 컨트롤하게 됩니다.

그럼 왜 이런 짓을 하느냐? pulseaudio만 쓰실 때는 별 상관이 없습니다. 하드웨어로 직접 볼륨을 컨트롤하는 것에 대한 음질적인 이야기를 할 수는 있겠지만 충분히 우수한 소프트웨어 볼륨을 사용한다면 별 걱정 없이 쓸 수 있을 테니까요 (하지만 MPD의 소프트웨어 믹서 볼륨은 구립니다. 아주 구립니다.)

근데 비트퍼펙트 비스무리한 것을 위해 ALSA로 직접 출력을 하게 된다면 그때부터는 볼륨 조절을 윈도우에서 하듯 편하게 조절할 수가 없다는 단점이 따라옵니다. 하지만 이렇게 alsa와 연동을 시켜 놓는다면 평범하게 볼륨을 조절해도 alsa로 직접 재생하는 쪽에 반영이 되기 때문에 편의성이 증가한다는 겁니다. 쉽게 말하자면 그냥 볼륨 아이콘에 휠을 돌려도 볼륨이 잘 조정된다는 것이죠.


아무튼 이렇게 삽질을 해서 작동을 하게 만들어 놨습니다. 국내나 해외에도 이 장치를 쓰는 사람들이 꽤나 있긴 할테니 pulseaudio에 PR을 넣건가 해야겠네요.. 받아줄지는 모르겠지만……

문제가 해결됐으니 당분간 이 주제로 글을 쓸 일이 없을 것 같습니다. hud100이나 기타 비슷한 이유로 볼륨조절이 안 되는 장치를 가지고 계신 분은 참고하셔서 쉽게 해결하실 수 있을 겁니다.