사운드칩이 재생하려는 음원의 포멧을 지원하기만 하면, 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 셋팅 시 주의)
과연 이걸로 끝일까? ^^