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