mpd1(Music Player Daemon),是一种音乐播放器守护进程,它可以在后台运行,不需要图形界面,可以通过网络或本地连接控制它。

mpd 支持多种音频格式,包括 MP3、FLAC、AAC、WAV 等,可以通过插件扩展其功能。mpd 可以通过各种客户端控制,如 mpc2、ncmpc3、Cantata4 等。

服务端

mpd 的安装可以直接用软件包管理方式来安装,不过安装完后的配置还是要花一点时间。我的配置文件简化后如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
music_directory     "~/Music"
playlist_directory  "~/Music/playlists"
db_file             "~/.config/mpd/database"
log_file            "~/.config/mpd/log"
pid_file            "~/.config/mpd/pid"
state_file          "~/.config/mpd/state"
sticker_file        "~/.config/mpd/sticker.sql"


auto_update    "yes"                # auto update database

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
    bitrate        "128"            # do not define if quality is defined
    format         "44100:16:1"
    max_clients    "0"              # optional 0=no limit
}

audio_output {
    type          "pulse"
    name          "Pulse Output"
    mixer_type    "software"
}

把这个 mpd.conf 文件 放在 ~/.config/mpd/ 下,并用 touch 建好对应的文件。然后运行一下 mpd 看看能不能顺利启动。一般错误有以下几个原因:

  • 上述新建的文件没对应或者访问权限问题
  • 端口 6600 被占用,用 ss -tpl | grep 6600 查看
  • 用户名、用户组不匹配
  • audio_output 配置不正确

等 mpd 命令行启动正确后,用 mpd --kill 杀掉进程,使用 systemctl 启动。

1
2
systemctl --user enable mpd.socket
systemctl --user start mpd.socket

mpd.socket 会监听 6600 端口,来触发 mpd.service,启动 mpd 播放音乐。

客户端

最基础的客户端是 mpc,常用的一些命令有:

  • mpc ls # 查看音乐库
  • mpc add # 把音乐加进队列
  • mpc clear # 清空队列
  • mpc play|pause|stop # 播放|暂停|停止音乐
  • mpc next|prev # 下一首|上一首音乐
  • mpc lsplaylists # 查看歌单
  • mpc save|load|rm X # 保存|加载|删除歌单
  • mpc search|find # 模糊|精确查找音乐

举一个复杂点的例子:查找歌手为“班得瑞”的音乐,加入播放队列,并保存为“Bandari.m3u”的歌单方便今后使用:

1
mpc search artist "bandari" | mpc add | mpc save Bandari

如果觉得 mpc 纯命令行不方便,可以使用 TUI 的 ncmpc、GUI 的 Cantata、等等,它有各种各样的客户端5,总有一款适用个性化的使用场景。

番外

我的使用场景是在一台服务器上存放了很多音乐,为了方便在其他的电脑手机等各种设备接入播放,又不想在每个设备安装客户端,最简单的也最一致的操作方式,就是使用浏览器播放,因此经过一番折腾,最终选用了 myMPD6。采用了 Docker 的安装方式,与软件作者给出的不同,我的 docker-compose.yml 如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
services:
  myMPD:
    image: ghcr.io/jcorporation/mympd/mympd
    container_name: mympd
    environment:
      - UMASK_SET=022
      - MYMPD_SSL=false
      - MYMPD_HTTP_PORT=80
    ports:
      - 18000:80
    volumes:
      - $XDG_RUNTIME_DIR/mpd/socket:/run/mpd/socket
      - $HOME/Music/:/music/:ro
      - $HOME/Music/playlists/:/playlists/:ro
      - $HOME/Docker/myMPD/workdir:/var/lib/mympd/
      - $HOME/Docker/myMPD/cachedir:/var/cache/mympd/
    restart: unless-stopped

在 myMPD 的设置-特性中,启用本地播放,就可以在浏览器中方便的管理、控制和播放音乐了。