사운드칩이 재생하려는 음원의 포멧을 지원하기만 하면, MPD는 기본적으로 Bit Perfect 재생을 한다.

사운드칩이 지원하지 않는 음원은 MPD가 변환해서 보내주니까 본실이 발생하고..


1. 여튼 Bit Perfect 재생이 이루어지고 있는지 어떻게 아나?

- mpd를 verbose logging 활성화한 후 출력정보 확인

decoder: audio_format=44100:24:2, seekable=true

output: opened plugin=alsa name="An ALSA output" audio_format=44100:16:2

output: converting from 44100:24:2

에헤이.. 사운드칩이 24bit 음원을 지원하지 않아서, 16bit로 변환해서 보내줌.


- 근데 만약 mpd 출력정보에서 변환이 없다고 나온다해도, ALSA가 딴짓 안하는지 봐야한다.

cat /proc/asound/card*/pcm*p/sub*/hw_params

access: RW_INTERLEAVED

format: S16_LE

subformat: STD

channels: 2

rate: 44100 (44100/1)

period_size: 4096

buffer_size: 16384

44100, 16bit, 2채널 출력중이고, mpd log에서 확인한 mpd 출력과 같다면 일단 ALSA는 딴짓 안하는거다.


- 그런데, /var/log/mpd/mpd.log를 보면 ALSA output이라고, ALSA가 hw모드로 되어있고, 어떻게 출력하고 있는지 써 있다. 버전업 되면서 좋아진건지, 여전히 hw_params 직접 봐야는지는 모르겠다.


2. 그럼 설정은 어떻게 해야하는가?

- 일단 mpd 출력 plugin은 ALSA로 설정

- ALSA는 아무짓도 안하는 멍텅구리로 설정

즉, alsa.conf에서 사운드 장치 설정은 type hw 

- Software Volume Control 사용금지 (https://www.musicpd.org/doc/user/config_audio_outputs.html)

- mpd에서 출력 포멧을 강제로 지정하지 말 것 (format, audio_output_format 셋팅 시 주의)



과연 이걸로 끝일까? ^^