안녕하세요.
이번에 리눅스 펌 위에서 작동되고 있는 MPD 를 USB DAC 과 완벽 연동하는 방법에 대해서 알아보려고 합니다.
먼저, 사전 글에서 MPD 를 설치해 주시길 바랍니다.
https://cafe.naver.com/mk802/20765 (hw:0,0 과 연동 : 하이실리콘 CPU 내부 DAC 과 연동)
아차차.. 들어가기 전에 완벽 연동 (Bit Perfect) 이라는 말은 아래와 같습니다.
1. 재생하는 음원에 따라 DAC 출력이 동일하게 연동
--> 리샘플링을 하지 않는다는 뜻입니다.
2. DSD 를 지원하는 DAC 의 경우 DSD 를 패쓰스루 재생합니다.
--> SW 로 디코딩하여 리샘플링을 하지 않는다는 뜻입니다.
3. 이전글 (상기글) 에서 설명된 방식이 아닌 직접 DAC 에 접근합니다.
--> HISIAIAO (hw:0,0) -> Android USB Driver -> DAC 이런식이 아니라 MPD -> DAC 으로 연동됩니다.
--> 따라서 안드로이드에서 영상을 재생하거나 유튜브를 보는 등은 HISIAIAO 장치와 연동되어 작동하고, MPD 는 USB DAC 과 연동되어 둘의 독립 작동이 가능합니다.
(HDMI 로 연결한 모니터에서 유튜브 재생 / MPD 에서 음원 재생 동시에 가능)
1. 장치 확인하기
장치는 기본적으로 USB 로 꼽은 경우 hw:2 로 잡힙니다.
아래의 경우 LG G5 HiFi Plus DAC 입니다. PC에서도 동일하게 HM 이라고 뜹니다.
root@AOL-Debian:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: HISIAIAO [HISI-AIAO], device 0: Playback aiao-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: HM [HM], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
root@AOL-Debian:~#
card 2 / device 0 이기 때문에 MPD 오디오 출력에서 hw:2,0 으로 설정하셔야합니다.
2. 안드로이드에서 USB DAC 기능 해제하기
이렇게 해제를 하게 되면 어떤 부작용이 생기는지 잘 모릅니다.
하이비나 UAP 로 USB 독점 재생이 되지 않을 수 있습니다. 미디어 재생이나 패쓰스루 재생은 문제 없습니다. (HDMI SPDIF...)
system-rw 명령으로 system rw 마운트를 하고 audio_policy.conf 를 수정합니다.
안드로이드 시스템 단에서 USB DAC 을 잡고 있어서 일어나는 하기 에러를 해결하기 위함입니다.
Sep 02 16:19 : alsa_output: Failed to open "HM" [alsa]: Failed to open ALSA device "hw:2,0": Device or resource busy
root@AOL-Debian:~# system-rw
remount succeeded
root@AOL-Debian:~# nano /system/etc/audio_policy.conf
root@AOL-Debian:~#
# 코멘트 처리합니다.
# usb {
# outputs {
# usb_device {
# sampling_rates dynamic
# channel_masks dynamic
# formats dynamic
# devices AUDIO_DEVICE_OUT_USB_DEVICE
# }
# }
# inputs {
# usb_device {
# sampling_rates dynamic
# channel_masks dynamic
# formats dynamic
# devices AUDIO_DEVICE_IN_USB_DEVICE
# }
# }
# }
root@AOL-Debian:~# sync
root@AOL-Debian:~# reboot
stty: standard input: Input/output error
[info] Using makefile-style concurrent boot in runlevel 0.
Stopping JDownloader 2 Headless: JDownloader2.
[ ok ] Stopping web server: apache2.
Service not running
[ ok ] Stopping UPnP devices daemon: MiniSSDPd.
[ ok ] Stopping Music Player Daemon: mpd.
[ ok ] Shutting down ALSA...done.
[ ok ] Stopping Avahi mDNS/DNS-SD Daemon: avahi-daemon.
[ ok ] Stopping NFS kernel daemon: mountd nfsd.
[ ok ] Unexporting directories for NFS kernel daemon....
[ ok ] Stopping internet superserver: inetd.
Killing Plex Media Server: done
Stopping ftp server: pure-ftpd.
[ ok ] Stopping enhanced syslogd: rsyslogd.
[ ok ] Stopping bittorrent daemon: transmission-daemon.
[ ok ] Stopping Tvheadend: tvheadend.
umount: /mnt/smb/mountpoint_01: not mounted
[ ok ] Stopping NFS common utilities: idmapd statd.
[ ok ] Stopping rpcbind daemon....
[FAIL] startpar: service(s) returned failure: hass ... failed!
System now Rebooting...
3. mpd 오디오 출력 설정 및 음원 디렉터리 설정
어린아빵님이 직접 음악 디렉터리 지정이 되지 않는다고 하셔서, 직접 러프하게 /mnt/media_rw 경로로 잡아보겠습니다.
그리고 오디오 출력 설정은 아래와 같습니다.
root@AOL-Debian:~# nano /etc/mpd.conf
music_directory "/mnt/media_rw"
audio_output {
type "alsa"
device "hw:2,0" # 장치 지정
name "HM" # 장치 이름 설정
# use_mmap "yes" # 정확하게 무엇인지 모르겠습니다.
auto_resample "no" # 원음 재생 설정
auto_channels "no" # 원음 재생 설정
auto_format "no" # 원음 재생 설정
mixer_type "hardware" # 믹서 설정
mixer_device "hw:2" # 하드웨어 지정
mixer_control "IEC958 In" # 컨트롤 이름 지정 (아래 참고)
replay_gain_handler "mixer"
dsd_usb "yes" # dsd 를 지원하면 yes 로 설정
}
하드웨어 볼륨 설정입니다.
윗 설정과 비교하시길 바랍니다.
root@AOL-Debian:~# amixer -c 2 scontents
Simple mixer control 'IEC958 In',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 20
Mono:
Front Left: Playback 20 [100%] [0.00dB] [on]
Front Right: Playback 20 [100%] [0.00dB] [on]
root@AOL-Debian:~#
-- 그러나 상기 설정은 G5 DAC 과 잘 작동이 되지 않아서 software 로 설정했습니다.
소프트웨어로 지정시 DSD 의 경우 볼륨조절이 안됩니다.
audio_output {
type "alsa"
device "hw:2,0"
name "HM"
# use_mmap "yes"
auto_resample "no"
auto_channels "no"
auto_format "no"
mixer_type "software"
# mixer_device "hw:2"
# mixer_control "IEC958 In"
# replay_gain_handler "mixer"
dsd_usb "yes"
}
use_mmap 설정은 정확하게 모르겠으나 설정을 먹이거나 안먹이면 아래의 차이가 있습니다.
상기는 아래 경로를 읽으시면 됩니다.
root@AOL-Debian:~# cat /proc/asound/card2/pcm0p/sub0/hw_params
access: RW_INTERLEAVED
format: S24_3LE
subformat: STD
channels: 2
rate: 176400 (176400/1)
period_size: 22050
buffer_size: 88200
한편, 경로 변경 후 MPDroid 에서 재스캔을 해보면 아래와 같이 잘 됩니다.
(mpc 의 경우 mpc update)
3. 재생 정보
1. DSD64 재생시
왜 176400 인가? 에 대해서는 .. 블루님의 강의를 첨부드립니다.
2822Kbps => 357.75KB/s 한편 주파수가 352.8KHz 입닙니다. 본래 DSD 는 1Hz 에 1Byte 를 전송한다에 근거입니다.
한편 2채널이기 때문에 1채널당으로 보면 176.4KB/s 이고 주파수는 176.4KHz 가 되는 것입니다.
2. MP3 44.1KHz 재생시
3. 192KHz 재생시
3. MQS 음원 96KHz 재생시
4. 하이실리콘 CPU 내장 DAC (16비트 48Khz 로 고정출력 : 변경불가)
root@AOL-Debian:/proc/asound/card0/pcm0p/sub0# cat hw_params
access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 480
buffer_size: 960
4. 결론 및 후기..
예전부터 이리저리 해보았던 문제가.. 드디어 풀렸습니다. USB DAC 에 원음 재생이 가능해졌습니다.
하이비뮤직이나 Usb Audio Player 처럼 껏다가 켰다가 하지 않아도 되고, 그냥 MPDroid (리모컨) 에서 플레이만 누르면 하이파이 시스템이 됩니다.
원격지 음원의 경우 CIFS 나 NFS 혹은 Plexdrive Rclone 등을 이용하면 간편하게 활용이 가능합니다.
U5 에서 USB 오디오를 정복하면 다음은 U5SBC 의 I2S 오디오를 정복하는 단계입니다.
차츰차츰 알아보도록 하고.. 원음 재생에 도움이 되셨으면 좋겠습니다.
감사합니다.