Music Player Daemon/技巧和提示
返回到 Music Player Daemon。
整理库
MPD 不管理您的库。请查看 beets 或 picard。
Last.fm/Libre.fm 音乐记录
要在使用 MPD 时将您的歌曲记录到 Last.fm 或 Libre.fm,有几种可能性。
mpdas
mpdas 是一个用 C++ 编写的 MPD 的 AudioScrobbler 客户端。它使用 curl 和 libmpd。mpdas 支持最新的 AudioScrobbler 协议 (2.0),并且如果网络连接不可用,还会将未记录的播放缓存到 ~/.mpdascache
中。
mpdasAUR 软件包可用。
mpdas 的配置非常简单,请参阅官方 README。/etc/mpdasrc
的一个非常基本的示例也作为 /etc/mpdasrc
提供。
要与 mpd 一起自动启动 mpdas,请将其条目添加到您启动 mpd 的文件中(例如 xinitrc)
[[ -z $(pgrep -xU $UID mpdas) ]] && mpdas &
当 mpd 作为 systemd 用户服务启动时,最好也启动 mpdas 作为 用户单元。
mpdscribble
mpdscribble 是一个守护程序,可以说是最好的替代方案,因为它是半官方的 MPD 音乐记录器,并在 MPD 中使用新的“idle”功能来实现更准确的音乐记录。此外,您无需 root 权限即可配置它,因为它根本不需要对 /etc
进行任何更改。请访问 官方网站 以获取更多信息。
包含一个示例配置:/usr/share/mpdscribble/mpdscribble.conf.example
,将其复制到 ~/.mpdscribble/mpdscribble.conf
并进行编辑以适合您的需求。
您的密码也可以是 md5hash 形式
echo -n "password" | md5sum | cut -f 1 -d " "
要自动启动 mpdscribble,您可以使用 systemd 用户实例下的 mpdscribble.service
。有关详细信息,请参阅 systemd/User。
或者,您可以与 mpd 一起自动启动 mpdscribble,将其条目添加到您启动 mpd 的文件中(例如 ~/.xinitrc
)
[[ -z $(pgrep -xU $UID mpdscribble) ]] && mpdscribble &
[last.fm] handshake failed, username or password incorrect (BADAUTH)
错误,请确保您的用户名和密码正确,并且您的密码不是 32 个字符长。Sonata
Sonata 内置了音乐记录支持,但这需要程序一直运行。此外,如果歌曲在播放时无法转发到 Last.fm,Sonata 不会缓存歌曲,这意味着它们不会添加到统计信息中。
YAMS
YAMS 是一个用 Python 编写的 MPD 的 Last.FM 音乐记录守护程序。
由于它是为 Last.FM 的 音乐记录 API v2.0 编写的,因此 YAMS 不会在本地存储您的用户名或密码,而是选择使用 cookie。与其他音乐记录器类似,YAMS 可以保存失败的音乐记录并在稍后日期上传它们。它还为何时/如何进行音乐记录提供了相当多的配置选项(包括在连续多次播放曲目时忽略重复的音乐记录)。
python-yamsAUR 软件包可用。
为了进行身份验证,用户必须在交互式终端中至少运行一次 yams
命令,并按照打印的说明进行操作。
之后,可以使用其二进制文件启动 YAMS
yams
默认作为守护程序运行(yams -N
将在前台运行它)。
yams -k
将杀死当前正在运行的实例。
yams -a
将附加到当前正在运行的实例的日志文件,允许您观看守护程序的输出。
yams -h
将打印所有命令行选项。
YAMS 还附带一个 systemd 服务文件,可以在身份验证完成后使用 yams.service
用户单元 启动。
禁用启动时恢复播放
此功能在 0.16.2 版本之后的 mpd 中存在。启用此功能后,mpd 将始终以“暂停”状态启动,即使在 mpd 停止时正在播放歌曲。将以下行添加到您的 mpd.conf
以启用此功能。
restore_paused "yes"
配置示例:以 44.1 KHz 和例如 16 位深度输出,同时支持多个程序
为什么选择这些格式? 因为它们是 CD 音频的标准格式,因为 ALSA 本身只允许通过 dmix 使多个程序“发声”——默认情况下 dmix 使用较差的重采样算法——并且因为 dmix 默认情况下会将任何低于 48 KHz 的内容重采样到 48 KHz(或当时正在播放的任何更高格式)。此外,如果至少没有以这种方式更改 mpd.conf
,有些人会听到咔哒声。
缺点是什么? 这些设置会导致所有内容(如果必要)都被重采样为这种格式,例如来自 DVD 或 TV 的素材,通常为 48 KHz。但是,没有已知的方法可以让 ALSA 动态更改格式,特别是如果您听 CD 的次数远多于其他任何内容,那么偶尔将 48 降到 44.1 也不是太大的损失。
以下假设没有其他设置与它冲突或覆盖它。这尤其适用于当前用户的潜在 ~/.asoundrc
—— MPD 作为其自己的用户会忽略它,因此以下内容应转到 /etc/asound.conf
/etc/asound.conf
defaults.pcm.dmix.rate 44100 # Force 44.1 KHz defaults.pcm.dmix.format S16_LE # Force 16 bits
/etc/mpd.conf
audio_output { type "alsa" # Use the ALSA output plugin. name "your_custom_name" # Must be present and does not have to match the actual card name , e.g. what you have in /etc/asound.conf options "dev=dmixer" device "plug:dmix" # Both lines cause MPD to output to dmix format "44100:16:2" # the actual format auto_resample "no" # This bypasses ALSA's own algorithms, which generally are inferior. See below how to choose a different one. }
如果想将位深度决定留给 ALSA 或 MPD,请注释掉或省略 dmix.format 行,并将 mpd 的 format 行更改为 "44100:*:2"。
使用 lirc 控制 MPD
已经有一些客户端被设计用于 lircd 和 MPD 之间的通信,但是,就实际使用而言,它们不是非常有用,因为它们的功能有限。
建议将 mpc 与 irexec 一起使用。mpc 是一个命令行播放器,它只向 MPD 发送命令并立即退出,这非常适合 irexec,即 lirc 中包含的命令运行器。irexec 的作用是,一旦收到遥控器按钮,它就会运行指定的命令。
首先,请按照 LIRC 文章中所述设置您的遥控器。
编辑您喜欢的 lirc 启动配置文件,默认位置是 ~/.lircrc
。
使用以下模式填充文件
begin prog = irexec button = <button_name> config = <command_to_run> repeat = <0 or 1> end
一个例子
## irexec begin prog = irexec button = play_pause config = mpc toggle repeat = 0 end begin prog = irexec button = stop config = mpc stop repeat = 0 end begin prog = irexec button = previous config = mpc prev repeat = 0 end begin prog = irexec button = next config = mpc next repeat = 0 end begin prog = irexec button = volup config = mpc volume +2 repeat = 1 end begin prog = irexec button = voldown config = mpc volume -2 repeat = 1 end begin prog = irexec button = pbc config = mpc random repeat = 0 end begin prog = irexec button = pdvd config = mpc update repeat = 0 end begin prog = irexec button = right config = mpc seek +00:00:05 repeat = 0 end begin prog = irexec button = left config = mpc seek -00:00:05 repeat = 0 end begin prog = irexec button = up config = mpc seek +1% repeat = 0 end begin prog = irexec button = down config = mpc seek -1% repeat = 0 end
mpc 还有更多功能,运行 mpc(1) 以获取更多信息。
PulseAudio
本地(作为您自己的用户)
不需要特殊选项;只需按照 mpd 配置文件中的注释所述添加脉冲输出即可。
本地(使用单独的 mpd 用户)
当按照 wiki 说明以自己的用户身份运行时,mpd 将无法将声音发送到另一个用户的 pulseaudio 服务器。您可以配置 mpd 使用 pulseaudio 的 TCP 模块将声音发送到 localhost,而不是将 pulseaudio 设置为系统范围的守护程序,upstream 强烈反对这种做法
首先,编辑 PulseAudio 配置 - 如果存在,则编辑 $XDG_CONFIG_HOME/pulse/default.pa
中的用户配置(通常为 ~/.config/pulse/default.pa
),否则编辑 /etc/pulse/default.pa
中的系统范围配置文件,并取消注释 TCP 模块并将 127.0.0.1 设置为允许的 IP 地址,如下所示
### Network access (may be configured with paprefs, so leave this commented ### here if you plan to use paprefs) #load-module module-esound-protocol-tcp load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 #load-module module-zeroconf-publish
可以使用 ;
作为分隔符添加 cidr 表示法中的其他 IP 范围。完成此操作后,重启 pulseaudio
$ pulseaudio --kill $ pulseaudio --start -or- start-pulseaudio-x11/kde
接下来,编辑 /etc/mpd.conf
并添加一个新的脉冲输出,指向 127.0.0.1 作为“远程”服务器
audio_output { type "pulse" name "Local Music Player Daemon" server "127.0.0.1" }
添加完成后,重启 mpd。
您现在应该有一个可用的本地 mpd,所有用户的 pulseaudio 服务器都允许来自 127.0.0.1 的声音可以使用它。
远程
与任何启用 PulseAudio 的程序一样,mpd 可以通过网络发送声音。运行 mpd 的服务器上不需要完整的 PulseAudio 系统;libpulse 是充当源的唯一要求,并且已经是 mpd 的依赖项。
为了将音频从 mpd 发送到另一台计算机,请按照上述说明操作,在运行 mpd 的服务器上编辑 /etc/mpd.conf
,使用目标计算机的 IP 地址,并在目标计算机上编辑 /etc/pulse/default.pa
或 $XDG_CONFIG_HOME/default.pa
(通常为 ~/.config/pulse/default.pa
),使用服务器的 IP 地址。
完成后,服务器的 mpd 源应该在目标计算机上显示为正常源,能够在播放或暂停时像往常一样重新路由和控制;当 mpd 停止时,目标计算机上不会有可见的源。
Cue 文件
自 0.17 版本以来,mpd 中的 cue 支持不需要额外的步骤。MPD 有自己的集成解析器,可用于外部和嵌入式 cue 表。例如,命令 $ mpc load albumx/x.cue
将文件 music_directory/albumx/x.cue
加载为播放列表;或者在 CUESHEET 标签的情况下,$ mpc load albumx/x.flac
。
客户端对 cue 文件的支持有点有限。支持 CUE 文件的两个可用程序是 cantataAUR 和 ncmpcpp。
HTTP 流媒体
自 0.15 版本以来,MPD 附带了一个内置的 HTTP 流媒体守护程序/服务器。这允许 MPD 将其音乐广播到 HTTP 客户端。
这不打算用作流媒体解决方案(例如,替代 Spotify、Deezer 等)。首先,它只允许播放一个流,并且多个用户无法同时收听多首音乐。其次,MPD 会缓冲大量音频,以便即使客户端暂时断开连接也能可靠播放,因此在更改歌曲时会引入不可忽略的延迟。要将 MPD 用作流媒体解决方案,请参阅 #使用卫星设置进行音乐流式传输。
配置
要激活此服务器,只需将其设置为 mpd.conf 中的输出设备
audio_output { type "httpd" name "My HTTP Stream" encoder "opus" # optional port "8000" # quality "5.0" # do not define if bitrate is defined bitrate "128000" # do not define if quality is defined format "48000:16:1" always_on "yes" # prevent MPD from disconnecting all listeners when playback is stopped. tags "yes" # httpd supports sending tags to listening streams. }
格式
MPD 支持多种编码格式。使用以下命令查看您的 MPD 支持哪些格式
$ mpd --version
使用
然后,要收听此流,只需在您喜欢的音乐播放器中打开您的 mpd 服务器的 URL(以及指定的端口)。注意:您可能需要在 URL 中使用适当的文件扩展名来指定流的文件格式。例如,使用 Winamp 5.5,您将使用 http://192.168.1.2:8000/mpd.ogg 而不是 http://192.168.1.2:8000/。
要使用 mpd 从另一台计算机连接到流
mpc add http://192.168.1.2:8000
使用卫星设置进行音乐流式传输
虽然 #HTTP 流媒体 允许用户通过 HTTP 广播其音乐,但卫星设置允许多个用户在不同的机器上同时收听不同的歌曲。
拓扑
卫星设置涉及两台或多台机器:一台服务器和多台客户端。服务器通常是拥有音乐文件的机器。它运行一个 MPD 实例,该实例将浏览这些文件并构建数据库。客户端是实际播放音乐的机器(例如您的手机或笔记本电脑)。它们也将运行 MPD 实例,尽管这些实例将从服务器 MPD 获取数据库并播放音乐。您可能会注意到服务器上的 MPD 不是必需的,但是它大大提高了列出所有歌曲的速度,因为客户端的 MPD 不必远程浏览所有文件。
此外,您需要一种方法让服务器将音乐文件提供给客户端。MPD 支持多个 存储插件 来获取音乐。例如,如果您选择 curl 插件,您将需要在服务器上安装 WebDAV 服务器。
最后,您需要在服务器和每个客户端之间建立安全的通信隧道。这是因为用于控制 MPD 的协议未加密且不提供身份验证。VPN 或 SSH 隧道在这里将很有用。
配置
在服务器上,为将构建数据库的 MPD 实例编写配置文件
/etc/mpd.conf
pid_file "/run/mpd/mpd.pid" playlist_directory "/var/lib/mpd/playlists" music_directory "/path/to/your/music/" database { plugin "simple" path "/var/lib/mpd/mpd.db" cache_directory "/var/lib/mpd/cache" } audio_output { type "null" name "This server does not need to play music, but it can" }
然后,设置 WebDAV 服务器、NFS 服务器或 Samba 共享。
在每个客户端上,为将播放音乐的 MPD 实例编写配置文件
/etc/mpd.conf
pid_file "/run/mpd/mpd.pid" playlist_directory "/var/lib/mpd/playlists" # WebDAV setup music_directory "https://optional_user:optional_password@example.com/path/to/your/music/" # NFS setup music_directory "nfs://example.com/path/to/your/music/" # Samba setup music_directory "smb://example.com/path/to/your/music/" # Note the proxy here database { plugin "proxy" host "example.com" port "6600" } audio_output { type "alsa" name "Some output name" }
- libsmbclient 有一个严重的错误,会导致 MPD 崩溃,因此默认情况下禁用此插件,在错误修复之前不应使用 [1]
- 在 Android 上,配置文件需要位于用户存储的根目录,与
Android
文件夹并排。此外,MPD 写入的文件需要位于应用程序文件夹中,通常在/data
中。例如
/storage/emulated/0/mpd.conf
music_directory "http://example.com/Music" log_file "/data/user/0/org.musicpd/cache/log" state_file "/data/user/0/org.musicpd/cache/state" audio_output { type "sles" name "Android only supports OpenSL ES" }
MPRIS 支持
另请参阅 MPRIS。
mpDris2
安装 mpdris2AUR 软件包。它在用户会话中运行并监视 mpd 服务器。
将默认配置文件从 /usr/share/doc/mpdris2/mpDris2.conf
复制到 ~/.config/mpDris2/mpDris2.conf
。根据需要进行编辑。
安装后,您可以启动/启用 mpDris2.service
用户单元。
mpd-mpris
安装 mpd-mpris 软件包。
安装后,您可以启动/启用 mpd-mpris.service
用户单元。
默认情况下,mpd-mpris 连接到 localhost:6600
(这是 mpd 的默认主机/端口)。要更改此设置,请将 /usr/lib/systemd/user/mpd-mpris.service
复制到 ~/.config/systemd/user/
,然后根据需要编辑运行参数。
通知
mpdris2AUR 软件包可选地支持显示图形通知。如果您不需要 mpris 支持,并且正在寻找更轻量级或特定的选项,以下是一些替代方案
musnify-mpd
musnify-mpd 是一个简单的 python 脚本,它使用 libnotify 为 Music Player Daemon 提供通知支持。它还可以显示从 last fm 加载的专辑封面,或从用户本地音乐库加载专辑封面。
musnify-mpdAUR 软件包可用。
安装后,您可能需要配置您的 mpd 主机和端口。为此,请将 ".example" 文件复制到 ~/.config/musnify-mpd
$ mkdir ~/.config/musnify-mpd $ cp /usr/share/doc/musnify-mpd/musnify-mpdconfig.example ~/.config/musnify-mpd/musnify-mpd.config
配置示例
~/.config/musnify-mpd/musnify-mpd.config
[mpd] host = localhost port = 6600 # This is where musnify-mpd will look for when searching the local album covers. musiclibrary = ~/Music # [apiKey] # If you want to fetch the album covers from LastFm, # enable this option and provide a apiKey. # You can get your apiKey here: https://www.last.fm/api/account/create # # lastfm = YOUR_LASTFM_API_KEY
要启用来自 last.fm 的艺术作品,您需要编辑 ~/.config/musnify-mpd
并提供 apiKey。您可以在 此处 创建您的 apiKey
mpd-notification
通知有关 mpd 播放的曲目。这在后台运行,并在 mpd 产生事件时生成通知(例如,播放新曲目、播放暂停或停止)。这也支持本地或 .mp3
专辑封面。
mpd-notificationAUR 软件包可用。
安装后,只需运行 mpd-notification
即可运行一次。可以启用 mpd-notification.service
用户单元 以自动启动它。
添加单独的音量控制(ALSA)
虽然 MPD 默认情况下不允许您调整其自身音量(mpc volume
影响全局音量),但您可以使用 softvol ALSA 模块轻松制作 MPD 特定的音量滑块。只需将其添加到 asound.conf
pcm.mpd { type softvol slave.pcm "default" control.name "MPD Playback Volume" control.card 0 }
并将其链接到 MPD
mpd.conf
audio_output { type "alsa" name "ALSA" device "mpd" mixer_control "MPD" }
之后,您应该能够通过 mpc
和 amixer
调整歌曲音量。(您可能需要重新启动才能使控件正常工作。)
控制远程 mpd 服务器
要控制远程 mpd 服务器,如果您的同一台机器上有 ssh 服务器,您可以登录并使用 ncmpcpp 来控制它。
或者,如果您的 mpd 服务器正在监听可访问的接口/端口(例如,mpd 机器上的 $ ss -p -l -t
将显示 mpd 正在监听 0.0.0.0),那么您可以设置 MPD_HOST 变量,该变量将本地客户端(如 mpc)定向到远程服务器。
$ export MPD_HOST=ip.of.server $ export MPD_PORT=6600 # optional $ mpc play