MPD/提示與技巧 - Arch Linux 中文维基

跳至內容

# MPD/提示與技巧

出自 Arch Linux 中文维基
< MPD
翻譯狀態：

- 本文（或部分內容）譯自 Music Player Daemon/Tips and tricks，最近一次同步於 2026-07-29，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

## 組織和管理音樂庫

MPD 不負責管理用戶的音樂庫。想要管理功能，請查看 beets包 或 picard包。

## 同步播放記錄至 Last.fm/Libre.fm

注意：0.18 版本的 MPD 移除了 Last.fm 相關支持。不過,一些客戶端提供了獨立於 MPD 的記錄功能。

下面有一些方法用於將 MPD 的歌曲播放記錄同步至 Last.fm 或 Libre.fm。

### mpdas

mpdas 是一款支持 MPD 的音頻記錄器客戶端，使用 curl包 和 libmpd包 並由 C++ 編寫而成。mpdas 支持最新的音頻記錄器協議（2.0），同時能在無網絡連接的情況下，將未同步的播放記錄緩存至 `~/.mpdascache`。

可以安裝 mpdasAUR 軟體包。

Mpdas 配置簡單，請參考官方的說明。`/etc/mpdasrc` 本身就是一份非常基礎的配置示例。

要讓 mpdas 隨 mpd 一同啟動，請在啟動 mpd 的文件中增加 mpdas 的啟動條目（例如 xinitrc）：

    [[ -z $(pgrep -xU $UID mpdas) ]] && mpdas &

若 mpd 是以 systemd 用戶服務啟動，最好也將 mpdas 作為一個用戶單元啟動。

提示：若在系統啟動後遇 `mpdas.service` 啟動失敗，請考慮使用 `mpd.socket`，即套接字啟動。

### mpdscribble

mpdscribble包 是一個守護進程，它因為作為一個半官方的 MPD 記錄器，並且使用了 MPD 中新的「idle」功能，記錄更精確，可以說是同步播放記錄的最佳方案。由於不需要更改任何 `/etc` 目錄下的文件，因此無需 root 權限即可進行配置。詳情請訪問官方網站。

Mpdscribble 自帶一份配置示例：`/usr/share/mpdscribble/mpdscribble.conf.example`，將其複製到 `~/.mpdscribble/mpdscribble.conf` 然後按需編輯。

注意：Mpdscribble 解釋器不支持行尾注釋，請將注釋寫在單獨的行中。

用戶密碼也可以使用 md5hash 形式：

    echo -n "password" | md5sum | cut -f 1 -d " "

可以在 systemd 用戶實例下使用 `mpdscribble.service` 讓 mpdscribble 自動啟動。詳情請參考 systemd/用戶。

同樣可以讓 mpdscribble 與 mpd 一同自動啟動，請在啟動 mpd 的文件中增加一條啟動條目（例如 `~/.xinitrc`）：

    [[ -z $(pgrep -xU $UID mpdscribble) ]] && mpdscribble &

注意：若遇到 `[last.fm] handshake failed, username or password incorrect (BADAUTH)` 錯誤，請確保用戶名和密碼都是正確的，且密碼不應是 32 字符長度[失效連結 2025-08-16 ⓘ]。

### Sonata

Sonata 內置了歌曲記錄功能，儘管該功能需要程序全程處於運行狀態。此外，如果播放時未能成功將記錄轉發至 Last.fm，Sonata 也不會緩存這些記錄，這意味著這些記錄不會被計入統計數據。

### YAMS

YAMS 是一個 MPD 的 Last.FM 歌曲記錄守護進程，用 Python 編寫而成。

由於 YAMS 是針對 2.0 版本的 Last.FM 記錄接口編寫的，YAMS 不會將用戶名和密碼信息存儲至本地，而是使用一個 cookie。與其他的記錄器類似，YAMS 可以保存失敗的記錄上傳並之後將其重新上傳。YAMS 也提供了很多的配置選項，這些選項可以定義何時或如何創建歌曲記錄（包括忽略掉一首曲子的重複播放記錄）。

可以安裝 python-yamsAUR 軟體包。

必須在交互式終端內運行 `yams` 命令（至少需要運行一次）並跟隨指示操作，才能完成身份認證。

身份驗證完成後，可通過二進制文件啟動 YAMS：

`yams` 默認以守護進程運行（`yams -N` 將以前台進程運行 YAMS）。

`yams -k` 將終止當前運行的實例。

`yams -a` 將附加上當前運行的實例的日誌文件，此時用戶可以觀察運行輸出。

`yams -h` 將輸出所有命令行選項。

YAMS 自帶一個 systemd 服務文件，可在身份認證完成後，通過 `yams.service` 用戶單元啟動。

## 禁用啟動時恢復播放的功能

mpd 0.16.2 開始有「恢復播放」功能。當該功能啟用時，mpd 總是（即使停止時 mpd 正在播放音樂）以「暫停」狀態啟動。添加下面這一行以啟用這個功能：

    mpd.conf

     restore_paused "yes"

## 配置示例：以 44.1 KHz 和 16 bit 位深度輸出至多個程序

為什麼要選擇這樣的格式？
  因為這是 CD 音頻的標準格式，ALSA 本身也允許多個程序僅通過 dmix（dmix 默認的使用低質量的重採樣算法）播放聲音，而 dmix 默認會將所有音頻重採樣至 48 KHz（或是正在播放的音頻的格式的採樣率）以下。而且，若不這麼配置，至少對於 `mpd.conf` 而言，如果不進行更改，一些用戶可能會遇到播放時的咔噠聲（clicking sounds）。

這麼做有什麼缺點？
  這些設置將導致「所有」音頻（若有必要）被重採樣至此格式（44.1 KHz 16 bit），例如實際上是 48 KHz 採樣率的 DVD 或電視素材。但是目前沒有方法讓 ALSA 動態改變格式，不過對於經常聽、且次數遠多於其他音頻的 CD 用戶而言，偶爾將 48 KHz 降採樣至 44.1 KHz 也不算是太大的採樣率損失。

下面的示例假定沒有其他已知設置與之衝突或會覆蓋它。這尤其適用於當前用戶潛在的 `~/.asoundrc` 設置。MPD 通常會忽略該設置，因此,下面的示例應當轉入 `/etc/asound.conf`：

    /etc/asound.conf

    defaults.pcm.dmix.rate 44100 # 強制使用 44.1 KHz
    defaults.pcm.dmix.format S16_LE # 強制使用 16 bits

    /etc/mpd.conf

    audio_output {
            type                    "alsa" # 使用 ALSA 輸出插件。
    	name			"your_custom_name" # 必須存在，但不必與實際的音效卡名一致，例如 /etc/asound.conf 中的此項。
            options                 "dev=dmixer"
            device                  "plug:dmix" # 這兩行讓 MPD 輸出至 dmix。
    	format	        	"44100:16:2" # 實際格式。
    	auto_resample		"no" # 用於繞過 ALSA 自身的算法（通常會更低）。請查看下面的內容以了解如何選擇。
    }

注意：MPD 會對 mp3 格式進行特殊處理：永遠使其輸出為 24 bit。由 format 行所指定的強制轉換會在此特殊處理之後進行。

若希望讓 ALSA resp. 決定 MPD 使用的位深度，注釋掉 resp. 並省略 dimx.format 這一行，同時將 mpd 的 format 更改為 "44100:*:2"。

注意：在以兩種不同位深度解碼的文件（例如，一個 mp3 和一個 16 位 flac）之間進行「交叉淡入淡出」（Crossfading）時，除非轉換處於激活狀態，否則不起作用。

## 用 LIRC 控制 MPD

已有一些客戶端被設計用於在 lircd 與 MPD 之間進行通信，然而在實際使用過程中，這些客戶端由於功能限制，並不實用。

建議將 mpc 與 irexec 一同使用。mpc 是一個命令行播放器，它僅僅能夠將命令發送至 MPD，隨後立即退出（這一點與 irexec 配合極佳），命令執行器已經包含在 lirc 中了。irexec 會在接收到一個遠程控制按鈕的消息時執行特定的命令。

首先，請根據 LIRC（英語：LIRC） 文章設置好遠程控制。

編輯 lirc 啟動配置文件，默認位置位於 `~/.lircrc`。

將下面的內容寫入文件：

    begin
         prog = irexec
         button = <按钮名称>
         config = <要执行的命令>
         repeat = <0 或 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(1) 查看更多的 mpc 功能及其詳細信息。

## PulseAudio

### 本地（單用戶）

無需任何特殊選項，只需要按照 MPD 配置文件中的注釋說明，添加一個 PulseAudio 輸出即可。

### 本地（多用戶）

以單用戶運行 MPD 時，聲音是無法發送到其他用戶的 PulseAudio 服務上的。解決方法：要麼讓 PulseAudio 作為全系統範圍的守護進程運行（然而這是上游極其不推薦的做法），要麼配置 MPD，讓 MPD 使用 PulseAudio 的 TCP 模塊，從而將聲音發送到本地：

首先，編輯 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。

接下來編輯 `/etc/mpd.conf`，添加一個新的 pulse 類型的輸出，指向 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 接收到聲音。

### 遠程

MPD 可以通過網絡將聲音發送到任何使用了 PulseAudio 的程序。完整的 PulseAudio 系統並不需要在一個運行著 MPD 的服務端上，只需要使用 libpulse包 作為發送源，該軟體包已經是 MPD 的依賴項。

要讓 MPD 把音頻發送到另一台計算機上，請參照上述指引，在運行了 MPD 的服務端上，編輯 `/etc/mpd.conf`，將 IP 地址設置成目標計算機的，同時在目標計算機上，編輯 `/etc/pulse/default.pa` 或 `$XDG_CONFIG_HOME/default.pa`（或 `~/.config/pulse/default.pa`），在配置中設置好服務端的 IP 地址。

完成配置後，在服務端播放音頻時，目標計算機上會顯示服務端的源，並且可以像普通的播放源那樣控制。MPD 停止後，目標計算機上將沒有可用的源。

## Cue 文件

由於 0.17 版本的 MPD 已經集成了能夠處理外部或嵌入式 cue 腳本的解釋器，無需額外操作即可支持 cue 文件。 例如，`$ mpc load albumx/x.cue` 命令將 `music_directory/albumx/x.cue` 文件加載為播放列表，若文件是例如 `$ mpc load albumx/x.flac`，則加載為 CUESHEET 標籤。

支持 cue 文件的客戶端較為有限。有兩個支持 cue 文件的程序，分別是：cantataAUR 和 ncmpcpp。

## HTTP 串流

自 0.15 版本起，MPD 內置了 HTTP 串流守護程序（服務端）。這讓 MPD 可以將音樂廣播至 HTTP 客戶端。

但這並不意味著把這個功能直接作為一個串流方案使用（例如替代 Spotify、Deezer 等）。首先，它只允許播放一個音頻流，所以多個用戶無法同時收聽多個不同音頻流。其次，MPD 會對音頻做大量緩衝，因此，即使客戶端離線了一段時間也依然能夠播放，但也是因為這個原因，切換歌曲時會有非常明顯的延遲。若要將 MPD 作為串流方案使用，請參考 #以衛星模式串流音樂。

### 配置

在 mpd.conf 中將其設置為一個輸出設備即可激活 HTTP 串流服務：

    audio_output {
    	type		"httpd"
    	name		"My HTTP Stream"
    	encoder		"opus"		# 可选
    	port		"8000"
    #	quality		"5.0"			# 若 bitrate 已设置，请勿设置此项
    	bitrate		"128000"			# 若 quality 以设置，请勿设置此项
    	format		"48000:16:1"
    	always_on       "yes"			# 阻止 MPD 停止播放时中断与所有监听器的连接。
    	tags            "yes"			# httpd 支持发送标签至播放流。
    }

#### 格式

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 支持多種存儲插件用於獲取文件。例如，如果選擇了 curl 插件，服務端需要一個 WebDAV 服務。

最後，服務端和客戶端之間需要一個安全的通信隧道。這是因為控制 MPD 的協議不會加密傳輸信息，也不提供身份驗證功能。此時 VPN 或 SSH 隧道將是一個不錯的選擇。

### 配置

在服務端的配置文件中添加 MPD 構建資料庫的相關配置：

    /etc/mpd.conf

    pid_file            "/run/mpd/mpd.pid"
    playlist_directory  "/var/lib/mpd/playlists"
    music_directory     "音樂文件的路徑"

    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 配置
    music_directory     "https://optional_user:optional_password@example.com/path/to/your/music/"

    # NFS 配置
    music_directory     "nfs://example.com/path/to/your/music/"

    # Samba 配置
    music_directory     "smb://example.com/path/to/your/music/"

    # 注意這裡的代理設置
    database {
        plugin  "proxy"
        host    "example.com"
        port    "6600"
    }

    audio_output {
        type  "alsa"
        name  "Some output name"
    }

注意：

- libsmbclient 有一個會導致 MPD 崩潰的嚴重缺陷[失效連結 2025-08-16 ⓘ]，因此該插件默認是禁用狀態，在該缺陷被修復之前請不要嘗試使用。
- 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 軟體包。mpDris2 運行在當前用戶會話內，監控 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

    # musnify-mpd 將從如下的位置搜索本地專輯封面。
    musiclibrary = ~/Music
    #

    [apiKey]
    # 若希望從 LastFm 獲取專輯封面，
    # 請啟用下面的選項並提供一個 apiKey。
    # 可以從此處獲取 apiKey：https://www.last.fm/api/account/create
    #
    # lastfm = YOUR_LASTFM_API_KEY

### mpd-notification

mpd-notification 用於提示 mpd包 所播放的歌曲信息。它運行於後台，並在 MPD 產生事件時（例如：開始、暫停或停止播放一首歌曲）發送通知。對於本地或 `.mp3` 專輯作品集同樣支持。

可以安裝 mpd-notificationAUR 軟體包。

安裝完成後，只需要運行一次 `mpd-notification`。也可以選擇啟用 `mpd-notification.service` 用戶單元使其自動啟動。

## 添加一個獨立的 ALSA 音量控制

雖然 MPD 默認不允許用戶調整它自己的音量（`mpc volume` 會影響全局音量），用戶仍然可以通過 ALSA 的「softvol」模塊製作一個控制 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 服務，可以通過 ssh 登錄並使用 ncmpcpp 控制 MPD。

而如果 MPD 服務端監聽了一個可用的接口或埠（例如，在運行 MPD 的設備上使用 `$ ss -p -l -t` 能觀察到 MPD 正在監聽 0.0.0.0），此時設置 MPD_HOST 環境變量可以讓本地客戶端如 mpc 等指向運行著 MPD 服務的遠程伺服器。

    $ export MPD_HOST=ip.of.server
    $ export MPD_PORT=6600      # 可选
    $ mpc play

分類：​

- 音樂
- 包含失效連結的頁面

隱藏分類：​

- 有藍鏈卻未移除內部連結助手模板的頁面

MPD/提示與技巧
新增話題