본문 바로가기
AndroidOverLinux

U5 리눅스 펌웨어 MPD : USB DAC 과 완벽 연동하기

by ㅋㅋ잠자 2018. 9. 3.
반응형

안녕하세요. 


이번에 리눅스 펌 위에서 작동되고 있는 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 오디오를 정복하는 단계입니다.


차츰차츰 알아보도록 하고.. 원음 재생에 도움이 되셨으면 좋겠습니다.


감사합니다.



반응형

댓글