音乐播放器守护进程/技巧和提示
返回 音乐播放器守护进程。
组织库
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(或当时正在播放的任何更高格式)。 此外,如果至少没有以这种方式更改 mpd.conf
,有些人会听到咔哒声。
缺点是什么? 这些设置会导致所有内容(如果需要)都重采样为此格式,例如通常为 48 KHz 的 DVD 或电视素材。 但是,没有已知的方法可以让 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 服务器。 与其将 pulseaudio 设置为系统范围的守护进程(上游强烈反对的做法),不如配置 mpd 以使用 pulseaudio 的 TCP 模块将声音发送到 localhost
首先,编辑 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