꽃삽질 : mpd 설치 & Cantata 설정.

이 글은 우분투/데비안 용이다.
우분투 계열이 아니더라도 비슷하겠지만, 아무튼 우분투에서만 해봤기에, 이 부분을 명시했다.

설치

설치는 간단한데, 이게 좀 애매한 면이 있다.
mpd 를 서버로만 쓰려면 X 관련 파일은 필요가 없는데, 우분투 18.04 이후 판들에선(Debian 도, 적어도 Buster 이후로는) X 에 일부 의존을 하고 있다. 물론, X server 가 설치되어 있지 않다하더라도, mpd 설치만으로 X server 자체가 설치되진 않는다.

$ sudo apt install mpd

mpd 는 알고보면 굉장히 간단한데, 모르고 보면 정말 난감하다.
‘간단함’을 위해서 필수로 알아야할 사항은, ‘권한’이다.

디렉토리 권한 설정

일단, 우분투에 기본 설치를 하게 되면 관련 파일은 /var/lib/mpd 이하에 생성된다.

ll /var/lib/mpd/
total 2932
drwxr-xr-x 1 mpd  audio     118 2019-07-29 23:29 ./
drwxr-xr-x 1 root root     1012 2019-07-29 21:34 ../
drwx------ 1 mpd  audio      10 2019-07-29 22:05 .config/
drwxr-xr-x 1 mpd  audio      20 2019-07-29 22:46 music/
drwxr-xr-x 1 mpd  audio     864 2019-07-29 22:10 playlists/
-rw-r--r-- 1 mpd  audio    2918 2019-07-29 23:29 state
-rw-r--r-- 1 mpd  audio   12288 2019-07-29 21:34 sticker.sql
-rw-r--r-- 1 mpd  audio 1490566 2019-07-29 23:01 tag_cache

.config 디렉토리는, Pulse 가 설치되어 있느냐 아니냐에 따라 다른 듯 하다. Pulse 가 있다면 .config 가 생성이 되고, 아니면 안되는 듯?
만약, Pulse 를 쓰지 않을 생각이면, Pulse 를 실행되지 않게할 필요가 있다. 이 내용은 아래에 따로 정리했다.

또, music 디렉토리는 기본 설정으로는 root 의 소유가 된다. root 라도 Everybody 에도 읽기 권한이 있으므로 별 상관은 없으나, 혹여라도 문제가 생길 수가 있으니 소유권을 mpd 로 바꿔준다. 아울러, 그룹도 audio 로 해준다.

$ sudo chown mpd:audio /var/lib/mpd/music

그리고 music 디렉토리에 음원 파일을 넣어놓으면 되는데..
굳이 이렇게할 필요없이, 그냥 music 하위에 심볼릭 링크를 만들면 된다.

만약, /mnt/Music 에 음원이 저장되어 있다면..

$ sudo -u mpd ln -s /mnt/Music /var/lib/mpd/music/Music

음원 디렉토리가 여러 군데라면, 모두 심볼릭 링크를 걸어주면 된다.
단, 이 음원파일들의 허가권에는 반드시 Other:Read(즉, 적어도 755) 가 추가되어 있어야 한다. 또는, mpd:audio 가 그 파일을 읽을 권한이 있어야 한다.
Mpd 설정에서 가장 문제가 되는 부분이 여기다. 사용자 mpd(또는 audio 그룹) 가 그 파일을 읽을 권한이 있어야 mpd 가 정상작동을 한다.

Pulse 사용 안하도록 설정.

Alsa 만 쓰려고 하는데, 괜히 Pulse 가 뜨면 이상한 오류가 발생하면서 문제를 일으키기도 한다.
또, (적어도 지금까지 내가 알아낸 바로는) Pulse 가 떠 있으면 서버가 재부팅되었을 때 mpd 가 이전에 재생하던 곡을 이어서 자동 재생해주는 기능이 작동하지 않는다.
이 기능은 mpd.conf 에서 restore_paused “no”(기본값) 을 해주면 되는데, Pulse 와 문제가 생기면 자동 작동에 문제가 생긴다.
단, 이렇다해도, 이전에 스트리밍 서비스(인터넷 라디오)를 사용하고 있었다면, 이건 자동재생되지 않는 듯 하다.

Pulse 를 중지하기 위해선 pulse 를 자동실행되지 않게 해야 한다.
먼저 /etc/pulse/client.conf 를 /var/lib/mpd/.config/pulse/client.conf 로 복사한다.

sudo -u mpd cp /etc/pulse/client.conf /var/lib/mpd/.config/pulse/
sudo vim /var/lib/mpd/.config/pulse/client.conf

이 파일을 열고, “autospawn = no” 그리고 “daemon-binary = /bin/true” 로 설정한다. 이러면 mpd 사용자와 관련해선 Pulse 가 뜨지 않는다.

만약 시스템 전역에서 Pulse 를 자동으로 사용하지 않게 하려면 /etc/pulse/client.conf 를 수정하면 된다. (autospawn = no)
그리고, 특정 사용자 환경에서만 Pulse 를 사용하려면, ~/.config/pulse/client.conf 를 만들고(복사), autospawn = yes 로 해주면 된다.

autospawn = no 인 환경에서, pulseaudio 를 사용하고 싶다면, 터미널에서 pulseaudio --start 를 실행한다.

이 내용은 이런 저런 인터넷 뒤짐과, 파랑새를 또 다시 일깨워준 Arch Linux 문서, 그리고 내 상상력을 동원하여 알아낼 수 있었다.

참고로, 만약 Pulse 와 문제가 있게 되면, 이런 식의 오류가 발생한다. (오류가 발생해도 mpd 실행엔 별 문제가 없는 듯?)

# systemctl status mpd
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-08-07 22:35:31 KST; 2min 51s ago
     Docs: man:mpd(1)
           man:mpd.conf(5)
           file:///usr/share/doc/mpd/user-manual.html
 Main PID: 2296 (mpd)
    Tasks: 5 (limit: 4454)
   CGroup: /system.slice/mpd.service
           └─2296 /usr/bin/mpd --no-daemon

Aug 07 22:35:30 musicserv systemd[1]: Starting Music Player Daemon...
Aug 07 22:35:31 musicserv systemd[1]: Started Music Player Daemon.
Aug 07 22:35:47 musicserv pulseaudio[2334]: [pulseaudio] server-lookup.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Aug 07 22:35:47 musicserv pulseaudio[2334]: [pulseaudio] main.c: Unable to contact D-Bus: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Aug 07 22:35:47 musicserv systemd[1]: mpd.service: Got notification message from PID 2334, but reception only permitted for main PID 2296
Aug 07 22:35:47 musicserv pulseaudio[2334]: [pulseaudio] bluez5-util.c: GetManagedObjects() failed: org.freedesktop.DBus.Error.AccessDenied: Rejected send message, 2 matched rules; type="method_call", sender=":1.40" (uid=121 pid=2334 comm="/usr/bin/pulseaudio --start --log-target=syslog " label="unconfined") interface="org.freedesktop.DBus.ObjectManager" member="GetManagedObjects" error name="(unset)" requested_reply="0" destination="org.bluez" (uid=0 pid=1016 comm="/usr/lib/bluetooth/bluetoothd " label="unconfined")
Aug 07 22:36:07 musicserv systemd[1]: mpd.service: Got notification message from PID 2334, but reception only permitted for main PID 2296

저 오류를 고칠 방법도 있긴 하겠으나, 짧은 지식과 검색 시간으로는 찾아내지 못했다. 그냥 Pulse 를 무시하는 편이 정신건강에 이롭다고 생각된다.

Alsa 관련 권한 문제.

아래 설정을 하다보면 aplay, alsamixer 등을 실행해야 하는데, 오류가 나는 경우가 있다.
이를 해결하는 방법은 다른 글에서.

mpd.conf(/etc/mpd.conf) 설정

mpd.conf 에선 반드시 건드려야할 부분이 딱 한군데가 있다. 나머지는 그냥 기본값으로 놔둬도 작동에 별 무리가 없다.

그 한군데가 바로, 사운드 카드 부분이다.
음악 시스템으로는 Alsa 를 사용하기로 하고(Pulse 는 어찌 쓰는지 안해봐서..), 사운드카드로는 외부 DAC 등을 이용하기로 한다.

현재 작동되고 있는 사운드 기기는 다음으로 알아낼 수 있다.

# cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xa1310000 irq 142
 1 [Device         ]: USB-Audio - USB PnP Sound Device
                      C-Media Electronics Inc. USB PnP Sound Device at usb-0000:00:15.0-3, full speed

1 번, USB Audio 를 사용하기로 한다면, 설정에서 “hw:1,0” 와 같이 지정한다.
그런데, 이 명령으로는 모든 기기가 나오지 않는 경우가 있다.

이럴 땐 aplay 가 필요하다. 꾸러미 alsa-utils 를 설치하면 이 프로그램을 사용할 수 있다. (이 명령이 제대로 실행이 안되면, 이전 단락에 연결된 문서를 참고한다.)

# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC892 Digital [ALC892 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
.... 생략

# aplay -L
.....
default:CARD=PCH
    HDA Intel PCH, ALC892 Analog
    Default Audio Device
sysdefault:CARD=PCH
    HDA Intel PCH, ALC892 Analog
    Default Audio Device
front:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    Front speakers
......
iec958:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Digital
    IEC958 (S/PDIF) Digital Audio Output
.... 생략

aplay –list-pcms(=-L), aplay –list-devices(=-l), 둘 중 아무거나 써도 잘 작동하는 듯 하다.
/proc/asound/cards 이나, aplay 어느 것을 써도 되지만, aplay 쪽이 더 정확한 듯 하니, aplay 결과로 설정하는 편이 좋겠다.

  • aplay -l : card 0: PCH [HDA Intel PCH], device 1: ALC892 Digital [ALC892 Digital]
  • aplay -L : iec958:CARD=PCH,DEV=0

-l 값으로 하면, 카드 0 에 device 1 이므로, device 값은 hw0:1 이 되고, -L 값은, 그대로 그냥 넣어주면 된다.

기본값이나, 불필요한 부분은 모두 지우고, mpd.conf 에서 사용할 부분만 추려보면 다음과 같다.

music_directory		"/var/lib/mpd/music"
playlist_directory		"/var/lib/mpd/playlists"
db_file			"/var/lib/mpd/tag_cache"
log_file			"/var/log/mpd/mpd.log"
pid_file			"/run/mpd/pid"
state_file			"/var/lib/mpd/state"
sticker_file                   "/var/lib/mpd/sticker.sql"
user				"mpd"
group                          "audio"
#bind_to_address		"localhost"
bind_to_address         "/run/mpd/socket"
#port				"6600"
#auto_update    "yes"

# Input #######################################################################
#

input {
        plugin "curl"
#       proxy "proxy.isp.com:8080"
#       proxy_user "user"
#       proxy_password "password"
}

# QOBUZ input plugin
input {
        enabled    "no"
        plugin     "qobuz"
}

# TIDAL input plugin
input {
        enabled      "no"
        plugin       "tidal"
}

# Decoder #####################################################################
#

decoder {
        plugin                  "hybrid_dsd"
        enabled                 "no"
}

decoder {
        plugin                  "wildmidi"
        enabled                 "no"
}
#

#
###############################################################################

# Audio Output ################################################################
#
audio_output {
	type		"alsa"
	name		"USB SPDIF"
	device		"iec958:CARD=Device,DEV=0"	# optional
#	device		"hw:0,1"	# optional
#	mixer_type      "hardware"      # optional
#	mixer_device	"default"	# optional
#	mixer_control	"PCM"		# optional
#	mixer_index	"0"		# optional
}
###############################################################################

filesystem_charset		"UTF-8"

#password                        "password@read,add,control,admin"

# http 스트리밍 서버 설정 (아래에서 추가 설명)
audio_output {
        type            "httpd"
        name            "OneStep http Stream"
        encoder         "lame"          # optional, vorbis or lame
#       encoder         "vorbis"                # optional, vorbis or lame
        port            "8000"
        bind_to_address "0.0.0.0"               # optional, IPv4 or IPv6
        quality         "5.0"                   # do not define if bitrate is defined
#       bitrate         "128"                   # do not define if quality is defined
        format          "44100:16:1"
#       max_clients     "0"                     # optional 0=no limit
}

Ubuntu 20.04 에서 제공하는 mpd 부터는 QOBUZ, TIDAL plugin 과 hybrid_dsd, wildmidi Decoder 를 지원하는가 보다. 기본 제공되는 mpd.conf 에도 이 내용이 들어있다.(wildmidi 에 관한 사항은 빠져있다.)

헌데, 기본값은 위 설정처럼 모두 disable(enabled = no)로 되어 있는데, 예전 mpd.conf 를 그대로 가져다가 쓰면, 다음과 같은 오류 메시지를 만나게 된다.

$ sudo systemctl status mpd.service
● mpd.service - Music Player Daemon
     Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-08-31 23:53:43 KST; 18min ago
TriggeredBy: ● mpd.socket
       Docs: man:mpd(1)
             man:mpd.conf(5)
             file:///usr/share/doc/mpd/html/user.html
   Main PID: 929 (mpd)
      Tasks: 7 (limit: 8727)
     Memory: 6.5G
     CGroup: /system.slice/mpd.service
             └─929 /usr/bin/mpd --no-daemon

Aug 31 23:53:39 mpd-server systemd[1]: Starting Music Player Daemon...
Aug 31 23:53:40 mpd-server mpd[929]: Aug 31 23:53 : exception: Decoder plugin 'wildmidi' is unavailable: configuration file does not exist: /etc/timidity/timidity.cfg
Aug 31 23:53:40 mpd-server mpd[929]: Aug 31 23:53 : exception: Input plugin 'tidal' is unavailable: No Tidal application token configured
Aug 31 23:53:40 mpd-server mpd[929]: Aug 31 23:53 : exception: Input plugin 'qobuz' is unavailable: No Qobuz app_id configured
Aug 31 23:53:43 mpd-server systemd[1]: Started Music Player Daemon.

불평을 한다고 해도 mpd 실행에 지장이 있지는 않지만, 아무튼 이들을 안쓴다고 설정에 명시해주면, 투덜거림을 신경쓰지 않아도 된다.

ipv6 와 관련된 Port 6600 문제

이건 systemctl status 에는 나오지 않고, journalctl 에만 나오는 문제이긴 하다. 그리고, 오류가 나와도 작동은 잘된다.

Sep 01 23:57:48 mpd-server systemd[1079]: mpd.socket: Failed to create listening socket ([::]:6600): Address already in use
Sep 01 23:57:48 mpd-server systemd[1079]: mpd.socket: Failed to listen on sockets: Address already in use
Sep 01 23:57:48 mpd-server systemd[1079]: mpd.socket: Failed with result 'resources'.
Sep 01 23:57:48 mpd-server systemd[1079]: Failed to listen on mpd.socket.

이에 관한 얘기가 개발자 Github 에서 오고갔는데.. 결론은, ‘그냥 놔둬도 된다.’
허나, 만약 거슬려서 바꾸고 싶다면, /etc/mpd.conf 에서 port 를 바꾸는게 아니고, /usr/lib/systemd/system/mpd.socket 에 있는 Port 를 바꿔줘야 한다.

/usr/lib/systemd/system 은, 시스템 설치관리자(Deb)가 사용하는 위치라고 한다. 따라서 꾸러미 판올림이 이행되었을 때, 새 파일로 덮어써질 가능성이 있다.

이럴 경우를 대비해서 /etc/systemd/system 으로 Unit 파일을 옮긴 뒤 Reenable 해줘야할 필요성이 있다. (Thank you Arch!)

두가지 방법이 있다는데, systemctl edit 을 사용하는게 좋아 보인다.

sudo systemctl edit --full mpd.socket
그리고 내용 수정..

이러면, /etc/systemd/system/mpd.socket 이 생기고, 자동으로 enable 된다.

그 외에는, audio_output 설정에서 device 만 제대로 설정해주면 더 이상 크게 손 볼 일은 없다.

** Device 설정은 제대로 됐는데, 소리가 안난다면?

왜 그런지 모르지만, 이럴 때가 있다.
alsamixer 를 실행하고, SPDIF 라든가, 선택한 출력 포트가 Mute 되어 있는지 살핀다.

bind_to_address “/run/mpd/socket” 를 하면, localhost 부분도 설정하지 않아도 된다. 이 Socket 에 대해선 내가 아직 아는 바가 거의 없어, 관련 내용을 읽어도 무슨 말인지 잘 모르겠다. 소켓에 관한 부분은 MariaDB 때도 나왔었는데..

Input 항목이 없으면 외부에서 접속을 할 수가 없다. Audio Input 관련한 내용이 아니다.

/var/lib/mpd/music 밑에 심볼릭 링크를 만드는 방식이 좋은게, mpd 는 실제 파일의 절대경로를 기억하는게 아니라 music 이하의 경로를 기억하기에, 나중에 손쉽게 DB 를 복원할 수 있다.

이게 뭔 말이냐하면..
실제 파일 경로가 바뀌더라도 단지 그 파일들을 music 아래 동일하게 심볼릭 링크 시켜주면 mpd 는 변경된 부분을 눈치채지 못한다.

예를 들어, mpd 가 있는 시스템에 로컬로 저장되어 있던 음원을, 외부 서버로 옮겼다고 치자.
원래 파일은 /mnt/Music 이었는데, 파일들은 다른 서버로 옮겨졌고, 그 서버를 nfs 등으로 마운트하여, 이제는 /nfs/Music 으로 경로가 바뀐 상황이다.

현재는 /var/lib/mpd/music/Music -> /mnt/Music 이므로, 지금 mpd 를 실행하면 있던 파일들을 찾지 못한다.
그러나, /var/lib/mpd/music/Music -> /nfs/Music 로만 바꿔주면, 이전과 동일한 환경으로 mpd 를 사용할 수 있다.

심지어 mpd 가 실행 중인 서버를 바꿔도 라이브러리를 쉽게 보전할 수 있다. 즉, 음원 DB 파일인 tag_cache 까지 새로운 서버로 복사해주면, ‘DB 다시 읽기’를 하지 않아도 그냥 바로 쓸 수가 있다. (DB 다시 읽는데 시간이 그래도 꽤 걸리므로, 이 방식은 꽤 유용하다고 할 수 있다.)

** PASSWORD 설정
내부 네트웍으로만 쓴다면 이건 별 필요는 없다. 어차피 나만 쓸텐데, 굳이?
그러나 혹여라도 외부에서도 접근하게 한다면, PASSWORD 를 설정해두는 편이 좋겠다.
형식은 password@read,add,control,admin 인데, 패스워드를 가지고 어떤 권한을 줄 지를 설정해줄 수 있게 되어있다.
즉, password1@read, password2@read,add 등을 복수로 설정해놓고, 어떤 패스워드로 접속하느냐에 따라 권한이 달라지게 되는 듯 하다. 사용해보진 않아서 자세하게는 모른다.

이제, 다른 PC 에서 Cantata 등으로, Android 에선 MPDroid 등으로 이 서버에 접속하면, Mpd 를 편하게 쓸 수 있다.

** Cubietruck
내 큐비트럭의 문제인지, 최신 Armbian 과 뭔가 문제가 있는지, 큐비트럭 자체 Optical Output 을 사용하면 음악이 자주 끊기는 현상이 일어난다. 또는 USB 포트로 연결하여 Optical 포트를 사용해도, 비슷한 현상이 있다.
Buffer 부터해서 별별 설정을 다 건드려봤지만, 증상은 동일했다. 결국 하드웨어 문제라고 밖엔 달리 생각할 길이 없다.

몇 년간 잘 사용해왔는데.. LattePanda 의 노동력을 조금 분산할까 했더니, 그게 조금 아쉽다면 아쉽다고나 할까?

Cantata DB 새로 읽기

mpd 에 처음 연결한 뒤, Cantata 에서 ‘데이터베이스 새로 읽기’를 실행해줘야 음원 파일들이 등록된다. 이 파일들은 DB 에 들어가는 게 아니고, 그냥 단순한 텍스트파일로 추출되는데, /var/lib/mpd/tag_cache 가 바로 DB 이다.

그런데.. 보통 이런 작업을 하면 이 파일에 내용을 계속 써가게되는데, 따라서 사용자가 계속 그 디렉토리에서 ls 를 하면 파일이 점점 커짐을 확인할 수 있는데..
mpd 는 음원 파일을 모두 읽고 나서야 파일에 내용을 쓴다. 따라서 진행 중인지 아닌지 알기가 좀 애매하다.
확인하려면, Cantata 에서 ‘폴더’로 가서, 오른쪽 위에 동그라미가 돌고 있는지 보는 방법 밖에 없다. DB 작업 중일 때는 동그라미가 보인다.

Cantata 음원 커버 설정

이 기능은, 음원 디렉토리에 cover.jpg 파일을 넣어놓고, 그 파일을 현재 음원 커버로 사용하기 위한 방법이다.
대부분은, 커버를 인터넷 DB 를 이용하여 자동으로 불러오는데(이게 확실치는 않다.), DB 에 없는 음원들의 경우는 이 방식이 꽤 유용하다.

예전에는 MPDroid 에서 사용하는 방법만 지원해서, 반드시 mpd 가 위치한 서버에 Web 서버를 설치했어야만 했는데, 지금은 훨씬 더 간편해졌다.
게다가, 웹서버 방식은 cover.jpg 등 외부 독립되어 있는 파일만 인식했는데, 이 방식은 음원 파일에 포함되어 있는 커버도 읽어오니 더욱 좋다.

Cantata – 설정 – 음악 폴더 로 이동하여, 디렉토리를 입력한다. 이 디렉토리는, 음원파일이 있는 디렉토리다.

그런데.. mpd 서버가 있는 곳, 음원이 있는 곳, Cantata 가 실행하는 곳, 모두 다를 경우도 있다. 이럴 땐 뭘 어떻게 해야 하나?

다음과 같이 나눠 생각해본다.

  • mpd 서버(A)의 음원 파일 위치 : /var/lib/mpd/music ➙ /nfs/Music
  • 음원 파일이 있는 서버(B)의 파일 위치 : /mnt/Music
  • Cantata 가 실행된 PC(C) 의 음원 위치 ????

mpd 서버 A 는, 서버 B 의 /mnt/Music 을 /nfs/Music 에 마운트했고, 이 디렉토리는 다시 심볼릭 링크로 연결되어 /var/lib/mpd/music 으로 연결되어 있다.

여기까지는 위에서 설명했다.

그럼 Cantata 가 있는 PC 에선? 역시 서버 B 의 /mnt/Music 을 마운트해야만 커버 기능을 사용할 수 있다.
즉, 마운트할 권한이 없다면 이 기능은 쓸 수가 없다. 물론, 그렇다고 해도 음악 재생엔 문제가 없고, 인터넷 DB 로 구할 수 있는 커버도 잘 볼 수 있다.

어쨌든, C PC 에선 음원 파일을 /mynfs/Music-files 로 마운트했다고 가정한다.

Mpd 는 DB 를 만들 때 /var/lib/mpd/music 아래 부분만 저장해놓는다.
예를 들어, /var/lib/mpd/music/한국음악/아무개/01 – 즐거운 오후.mp3 라는 파일이 있을 때, 이 경로를 모두 저장하지 않고, 한국음악/아무개/01 – 즐거운 오후.mp3 로만 기억을 한다.

이 파일을 각 PC 입장에서 보자면,

  • A(mpd) : /var/lib/mpd/music/한국음악/아무개/01 – 즐거운 오후.mp3
  • B(음원 서버) : /mnt/Music/한국음악/아무개/01 – 즐거운 오후.mp3
  • C(Cantata) : /mynfs/Music-files/한국음악/아무개/01 – 즐거운 오후.mp3

굵은 부분만 다르고, 나머지는 동일하다.
Cantata 는 한국음악/아무개/01 – 즐거운 오후.mp3 을 찾게 되는데, 그게 각각 A/B/C 에서 저 위치를 가리키게 된다.

다시 돌아와서, Cantata 의 ‘음악 폴더’ 에는 /mynfs/Music-files 를 넣어주면 된다.
이제 사용자 지정 커버를 찾을 수 있게 됐다.

커버는 음원 파일에 포함되어 있는(Embedded) 것도 찾고, 파일이 있는 디렉토리에 따로 존재하는 그림파일도 찾는다.
cover.jpg 를 기본으로 검색하게끔 설정되어 있는데, (또는 cover.* ??) 다른 파일명을 원하거나, 좀 더 정확하게 하기 위해선 칸타타 – 설정 -인터페이스 – 음반표지 에서 파일명을 지정해준다.

** /var/lib/mpd/music 에 심볼릭 링크를 만들 때 주의 사항.

만약, mpd 서버 A 에서 이렇게 심볼릭 링크를 만들었다고 하면..

/var/lib/mpd/music/한국노래 ➙ /mnt/Music/한국음악

반면, Cantata PC C 에선..

$ ls /mynfs/Music-files
drwxrwsr-x 1 user1 group1  18 2019-07-29 22:45 한국음악

이렇게 되어, Cantata 에서 ‘한국노래/fileA.mp3’ 를 찾는 경로는 /mynfs/Music-files/한국노래/fileA.mp3 가 된다. 그러나, 실제 경로는 /mynfs/Music-files/한국음악/fileA.mp3 이므로, 검색에 실패하게 된다.

따라서, 심볼릭 링크를 만들 때는 원본과 동일하게 만들어줘야 한다. 또는, /var/lib/mpd/music 디렉토리를 아예 음원이 위치한 최상위 폴더로 링크하는 방법도 있다.

mpd Stream 설정 (mpd server)

Stream 이 가능하게 설정하면, 외부에서도 MpDroid/Cantata 를 통해 Mpd 를 구동할 수 있다.

설정은 역시 mpd.conf 에서 해야 하며, 참고한 글은 다음과 같다.

위 글들을 종합한 결과, 다음과 같은 설정에서 성공할 수 있었다.

audio_output {
	type		"httpd"
	name		"Http Stream"
	encoder		"lame"			# optional, vorbis or lame
	port		"8000"
	bind_to_address "0.0.0.0"               # optional, IPv4 or IPv6
	quality		"5.0"			# do not define if bitrate is defined
	format		"44100:16:1"
	max_clients     "1"                     # optional 0=no limit
}

몇가지 조합이 가능한데(lame, vorbis 등등), 이 설정에서 무리없이 작동했다.
max_client 를 1 로 한 이유는, 연결 자체는 여러 기기에서 동시에 가능하지만, 모두 동일한 재생목록을 공유하기 때문에 서로 다른 기계에서 모두 같은 음악을 들을 수 밖에 없기 때문이다.

각 기기별로 재생목록을 별개로 할 수 있을까?? 아직은 필요하질 않아서..

설정을 바꾸고 나선, 그냥 간단하게 재부팅하는게 가장 확실한 방법같다. 재부팅하지 않고 그냥 mpd 만 재실행할 때는 뭔가 꼬이는 듯한 현상이 보였다.
어쨌든, 방법은 이렇다.

sudo systemctl restart mpd.service

mpd Stream 설정 (Cantata)

기존 설정은 같고, HTTP 스트림 URL 에 서버 IP 주소를 넣어준다.
앞에 http 도 붙여야 하는 듯 하다. 포트 번호는 반드시 붙여줘야 한다.

HTTP 스트림 URL : http://192.168.1.122:8000

그리고 칸타타를 재실행하면, 메뉴/출력에서 Http Stream 을 고를 수 있고, 또 다른 메뉴에서 ‘HTTP Stream 연주’도 찾을 수 있다. 둘 모두를 선택해주면, 내 PC 에서 음악을 들을 수 있게 된다.

mpd Stream 설정 (MPDroid)

역시, 기타 설정은 동일하다. 연결 설정 – 기본 연결 설정 – 스트리밍 호스트에 서버 IP 주소를 넣어준다.
포트값은 ‘스트리밍 포트’에 넣어줘야 하는데, 기본값일 경우 그냥 놔둬도 된다.

Cantata 와 마찬가지로, 주메뉴 출력에서 Http Stream 을 선택하고, 음악 재생화면 메뉴에서 ‘스트리밍’을 선택해주면 안드로이드 기기에서 음악을 들을 수 있다.

단, 아무래도 스트리밍이니만큼, 곡 전환이 빠르진 않다.


외부에서도 접근하고 싶다면, 공유기의 포트포워딩 기능을 쓰면 된다. 접근 주소로 공인 IP 를 사용해도 되고, IPTIME 공유기를 쓰고 있다면, xxx.iptime.org 를 사용해도 된다.

다 쓰고 하는 말이지만, MPD 스트리밍보다는 차라리 구글 뮤직을 사용하는 편이 더 나아보인다. 효과는 물론이고, 효율면에서도 mpd 보다 더 낫다. 물론, 업로드하는 일이 그야말로 일이긴 하지만.
2020년 8월, 구글 뮤직은 사망을 고했다… 젠장!

One Comment

안녕하세요. 글 남겨주셔서 고맙습니다.