音频开发
音频开发学习推荐
常用的开源MP3编解码器
linux mpd 音乐播放守护程序
H5 国际化 jquery.i18n.properties
mpd 播放器添加在线音乐
STM32 ADC 音频采集
调音台的电平显示
**问题分析:启用 `outputParameters` 后 `pasystray` 的 CPU 占用率升高的原因
Linux 音频框架
Moodeaudio 音乐播放系统
esp32s3 USB读取U盘
MPD 中配置多目录
通过软链接挂载U盘到MPD
mpd 配置号链接跟随规则和路径排除规则 控制音乐文件扫描范围
Linux通过smbclient 发现并挂载局域网共享文件夹
在 Linux 系统中挂载 Windows 共享文件夹
杰理AC696x开发TWS
MPD 音频服务架构
OpenClaw——MPD开发记录20260308
ESP32_PCM5102_PCM1808音频采集播放
volumio 插件列表
VU 表头PeppyMeter
Volumoio添加windows共享文件夹
修改树莓派配置文件让Volumio支持1024x600分辨率的屏幕
树莓派屏幕配置
本文档使用 MrDoc 发布
-
+
首页
linux mpd 音乐播放守护程序
### 一、mpd和mpc 安装和配置 下载安装 mpd 和 mpc ``` sudo apt install mpd mpc -y ``` 修改 mpd 启动配置环境 /etc/default/mpd ``` pi@raspberrypi:~/Workship/mpd_audio/ympd-1.3.0/build $ cat /etc/default/mpd ## Defaults for the MPD init script, sourced by /etc/init.d/mpd on Debian ## systems. Uncomment (remove the leading '#') and change values as needed. ## If you don't want MPD to be started as a system service (for example, if ## you want to run it from a regular user account), disable it using the ## command 'update-rc.d mpd disable' (or 'systemctl disable mpd' for systemd). ## The configuration file location for mpd: # MPDCONF=/etc/mpd.conf MPDCONF=/home/pi/.config/mpd/mpd.conf ``` 位于软件包的 MPD 配置示例提供了一个创建用户配置的案例 ``` sudo gzip -d /usr/share/doc/mpd/mpdconf.example.gz cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf ``` 编辑配置文件 ~/.config/mpd/mpd.conf ```bash # An example configuration file for MPD. # Read the user manual for documentation: http://www.musicpd.org/doc/user/ # Files and directories ####################################################### # # This setting controls the top directory which MPD will search to discover the # available audio files and add them to the daemon's online database. This # setting defaults to the XDG directory, otherwise the music directory will be # be disabled and audio files will only be accepted over ipc socket (using # file:// protocol) or streaming files over an accepted protocol. # music_directory "~/music" # # This setting sets the MPD internal playlist directory. The purpose of this # directory is storage for playlists created by MPD. The server will use # playlist files not created by the server but only if they are in the MPD # format. This setting defaults to playlist saving being disabled. # playlist_directory "~/.config/mpd/playlists" # # This setting sets the location of the MPD database. This file is used to # load the database at server start up and store the database while the # server is not up. This setting defaults to disabled which will allow # MPD to accept files over ipc socket (using file:// protocol) or streaming # files over an accepted protocol. # db_file "~/.config/mpd/mpd.db" # These settings are the locations for the daemon log files for the daemon. # # The special value "syslog" makes MPD use the local syslog daemon. This # setting defaults to logging to syslog. # # If you use systemd, do not configure a log_file. With systemd, MPD # defaults to the systemd journal, which is fine. # log_file "~/.config/mpd/log" # This setting sets the location of the file which stores the process ID # for use of mpd --kill and some init scripts. This setting is disabled by # default and the pid file will not be stored. # # If you use systemd, do not configure a pid_file. # pid_file "~/.config/mpd/pid" # This setting sets the location of the file which contains information about # most variables to get MPD back into the same general shape it was in before # it was brought down. This setting is disabled by default and the server # state will be reset on server start up. # state_file "~/.config/mpd/state" # # The location of the sticker database. This is a database which # manages dynamic information attached to songs. # #sticker_file "~/.config/mpd/sticker.sql" # ############################################################################### # General music daemon options ################################################ # # This setting specifies the user that MPD will run as. MPD should never run as # root and you may use this setting to make MPD change its user ID after # initialization. This setting is disabled by default and MPD is run as the # current user. # user "pi" # # This setting specifies the group that MPD will run as. If not specified # primary group of user specified with "user" setting will be used (if set). # This is useful if MPD needs to be a member of group such as "audio" to # have permission to use sound card. # group "pi" # # This setting sets the address for the daemon to listen on. Careful attention # should be paid if this is assigned to anything other than the default, any. # This setting can deny access to control of the daemon. Not effective if # systemd socket activation is in use. # # For network bind_to_address "0.0.0.0" # # And for Unix Socket bind_to_address "~/.config/mpd/socket" # # This setting is the TCP port that is desired for the daemon to get assigned # to. # port "6600" # # Suppress all messages below the given threshold. Use "verbose" for # troubleshooting. Available setting arguments are "notice", "info", "verbose", # "warning" and "error". # #log_level "notice" # # Setting "restore_paused" to "yes" puts MPD into pause mode instead # of starting playback after startup. # #restore_paused "no" # # This setting enables MPD to create playlists in a format usable by other # music players. # #save_absolute_paths_in_playlists "no" # # This setting defines a list of tag types that will be extracted during the # audio file discovery process. The complete list of possible values can be # found in the user manual. #metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" # # This example just enables the "comment" tag without disabling all # the other supported tags: #metadata_to_use "+comment" # # This setting enables automatic update of MPD's database when files in # music_directory are changed. # #auto_update "yes" # # Limit the depth of the directories being watched, 0 means only watch # the music directory itself. There is no limit by default. # #auto_update_depth "3" # ############################################################################### # Symbolic link behavior ###################################################### # # If this setting is set to "yes", MPD will discover audio files by following # symbolic links outside of the configured music_directory. # #follow_outside_symlinks "yes" # 允许跟随指向主目录外部的符号链接 # # If this setting is set to "yes", MPD will discover audio files by following # symbolic links inside of the configured music_directory. # #follow_inside_symlinks "yes" # 允许跟随主音乐目录内部的符号链接(递归扫描) # ############################################################################### # Zeroconf / Avahi Service Discovery ########################################## # # If this setting is set to "yes", service information will be published with # Zeroconf / Avahi. # #zeroconf_enabled "yes" # # The argument to this setting will be the Zeroconf / Avahi unique name for # this MPD server on the network. %h will be replaced with the hostname. # #zeroconf_name "Music Player @ %h" # ############################################################################### # Permissions ################################################################# # # If this setting is set, MPD will require password authorization. The password # setting can be specified multiple times for different password profiles. # #password "password@read,add,control,admin" # # This setting specifies the permissions a user has who has not yet logged in. # #default_permissions "read,add,control,admin" # ############################################################################### # Database ####################################################################### # # An example of a database section instead of the old 'db_file' setting. # It enables mounting other storages into the music directory. # #database { # plugin "simple" # path "~/.local/share/mpd/db # cache_directory "~/.local/share/mpd/cache" #} # # An example of database config for a satellite setup # #music_directory "nfs://fileserver.local/srv/mp3" #database { # plugin "proxy" # host "other.mpd.host" # port "6600" #} # Input ####################################################################### # input { plugin "curl" # proxy "proxy.isp.com:8080" # proxy_user "user" # proxy_password "password" } # ############################################################################### # Decoder ##################################################################### # decoder { plugin "hybrid_dsd" enabled "no" # gapless "no" } # 强制禁用 wildmidi 插件 # 如果希望保留 MIDI 文件支持,安装 wildmidi 所需依赖: # sudo apt install wildmidi decoder { plugin "wildmidi" enabled "no" #config_file "/etc/timidity/timidity.cfg" } # Audio Output ################################################################ # # MPD supports various audio output types, as well as playing through multiple # audio outputs at the same time, through multiple audio_output settings # blocks. Setting this block is optional, though the server will only attempt # autodetection for one sound card. # # An example of an ALSA output: # audio_output { type "alsa" name "My ALSA Device" device "hw:0,0" # optional #mixer_type "hardware" # optional mixer_type "software" # optional mixer_device "default" # optional mixer_control "PCM" # optional mixer_index "0" # optional } # # An example of an OSS output: # #audio_output { # type "oss" # name "My OSS Device" ## device "/dev/dsp" # optional ## mixer_type "hardware" # optional ## mixer_device "/dev/mixer" # optional ## mixer_control "PCM" # optional #} # # An example of a shout output (for streaming to Icecast): # #audio_output { # type "shout" # encoder "vorbis" # optional # name "My Shout Stream" # host "localhost" # port "8000" # mount "/mpd.ogg" # password "hackme" # quality "5.0" # bitrate "128" # format "44100:16:1" ## protocol "icecast2" # optional ## user "source" # optional ## description "My Stream Description" # optional ## url "http://example.com" # optional ## genre "jazz" # optional ## public "no" # optional ## timeout "2" # optional ## mixer_type "software" # optional #} # # An example of a recorder output: # #audio_output { # type "recorder" # name "My recorder" # encoder "vorbis" # optional, vorbis or lame # path "/var/lib/mpd/recorder/mpd.ogg" ## quality "5.0" # do not define if bitrate is defined # bitrate "128" # do not define if quality is defined # format "44100:16:1" #} # # An example of a httpd output (built-in HTTP streaming server): # #audio_output { # type "httpd" # name "My HTTP Stream" # 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 #} # # An example of a pulseaudio output (streaming to a remote pulseaudio server) # #audio_output { # type "pulse" # name "My Pulse Output" ## server "remote_server" # optional ## sink "remote_server_sink" # optional ## media_role "media_role" #optional #} # # An example of a winmm output (Windows multimedia API). # #audio_output { # type "winmm" # name "My WinMM output" ## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional # or ## device "0" # optional ## mixer_type "hardware" # optional #} # # An example of a wasapi output (Windows multimedia API). # #audio_output { # type "wasapi" # name "My WASAPI output" ## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional # or ## device "0" # optional ## Exclusive mode blocks all other audio source, and get best audio quality without resampling. ## exclusive "no" # optional ## Enumerate all devices in log. ## enumerate "no" # optional #} # # An example of an openal output. # #audio_output { # type "openal" # name "My OpenAL output" ## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional #} # # An example of an sndio output. # #audio_output { # type "sndio" # name "sndio output" # mixer_type "hardware" #} # # An example of an OS X output: # #audio_output { # type "osx" # name "My OS X Device" ## device "Built-in Output" # optional ## channel_map "-1,-1,0,1" # optional #} # ## Example "pipe" output: # #audio_output { # type "pipe" # name "my pipe" # command "aplay -f cd 2>/dev/null" ## Or if you're want to use AudioCompress # command "AudioCompress -m | aplay -f cd 2>/dev/null" ## Or to send raw PCM stream through PCM: # command "nc example.org 8765" # format "44100:16:2" #} # ## An example of a null output (for no audio output): # #audio_output { # type "null" # name "My Null Output" # mixer_type "none" # optional #} # ############################################################################### # Normalization automatic volume adjustments ################################## # # This setting specifies the type of ReplayGain to use. This setting can have # the argument "off", "album", "track" or "auto". "auto" is a special mode that # chooses between "track" and "album" depending on the current state of # random playback. If random playback is enabled then "track" mode is used. # See <https://wiki.hydrogenaud.io/index.php?title=Replaygain> for # more details about ReplayGain. # This setting is off by default. # #replaygain "album" # # This setting sets the pre-amp used for files that have ReplayGain tags. By # default this setting is disabled. # #replaygain_preamp "0" # # This setting sets the pre-amp used for files that do NOT have ReplayGain tags. # By default this setting is disabled. # #replaygain_missing_preamp "0" # # This setting enables or disables ReplayGain limiting. # MPD calculates actual amplification based on the ReplayGain tags # and replaygain_preamp / replaygain_missing_preamp setting. # If replaygain_limit is enabled MPD will never amplify audio signal # above its original level. If replaygain_limit is disabled such amplification # might occur. By default this setting is enabled. # #replaygain_limit "yes" # # This setting enables on-the-fly normalization volume adjustment. This will # result in the volume of all playing audio to be adjusted so the output has # equal "loudness". This setting is disabled by default. # #volume_normalization "no" # ############################################################################### # Character Encoding ########################################################## # # If file or directory names do not display correctly for your locale then you # may need to modify this setting. # filesystem_charset "UTF-8" # ############################################################################### ``` ### 二、mpc 控制 mpc 常用指令 ```bash man mpc # 查看文档 mpc update mpc listall mpc add mpc listall |mpc add mpc playlist mpc play mpc stop mpc next mpc prev mpc volume [+/-][num] # 加减音量 mpc volume [num] # 设置音量 ``` 创建所需目录及文件: ```bash mkdir -p ~/.config/mpd/playlists touch ~/.config/mpd/{mpd.db,log,state} # 数据库、日志和状态文件[6](@ref) ``` MPD 需要扫描上述定义的 music_directory 目录,才能建立数据库文件。为完成这一任务,需要使用一个 MPD#客户端。例如,对于 mpc,执行命令是: ```bash mpc update ``` **systemd 用户级服务自启动** 修改 /etc/default/mpd 文件 中的# MPDCONF=/etc/mpd.conf 为 ~/.config/mpd/mpd.conf 修改 /usr/lib/systemd/user/mpd.service 用户级启动配置文件 ``` [Unit] Description=Music Player Daemon Documentation=man:mpd(1) man:mpd.conf(5) Documentation=file:///usr/share/doc/mpd/html/user.html After=network.target sound.target [Service] Type=notify # 增加指定启动配置文件变量 EnvironmentFile=/etc/default/mpd ExecStart=/usr/bin/mpd --systemd $MPDCONF # Enable this setting to ask systemd to watch over MPD, see # systemd.service(5). This is disabled by default because it causes # periodic wakeups which are unnecessary if MPD is not playing. #WatchdogSec=120 # allow MPD to use real-time priority 40 LimitRTPRIO=40 LimitRTTIME=infinity # for io_uring LimitMEMLOCK=64M # disallow writing to /usr, /bin, /sbin, ... ProtectSystem=yes # more paranoid security settings NoNewPrivileges=yes ProtectKernelTunables=yes ProtectControlGroups=yes # AF_NETLINK is required by libsmbclient, or it will exit() .. *sigh* RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK RestrictNamespaces=yes # Note that "ProtectKernelModules=yes" is missing in the user unit # because systemd 232 is unable to reduce its own capabilities # ("Failed at step CAPABILITIES spawning /usr/bin/mpd: Operation not # permitted") [Install] WantedBy=default.target ``` ```bash systemctl --user enable mpd.service ``` ### 参考文档 [Arch linux mpd wiki](https://wiki.archlinuxcn.org/wiki/MPD) [音乐守护进程mpd,mpc和ncmpcpp - 播放器三重奏](https://www.bilibili.com/video/BV1vo2tYhEmR/?spm_id_from=333.337.search-card.all.click&vd_source=64bcdab1e8263295a838d5e4a0fab29c) [Standalone MPD Web GUI written in C, utilizing Websockets and Bootstrap/JS](https://github.com/notandy/ympd) Plattenalbum — 小巧而现代化的 GTK4 界面客户端,用 Python 编写而成。 https://github.com/SoongNoonien/plattenalbum || plattenalbumAUR [mpc doc](https://www.musicpd.org/doc/mpc/html/)
qingkai
2025年4月27日 21:56
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码