Mixer

Photo by Abigail Keenan on StockSnap

你是否曾經想過在終端機聽 Spotify,本來以為 Spotify 只能在瀏覽器或是桌面客戶端使用,竟然還有這種方案,原本想說這方案可以替代 Linux 版的 Spotify 桌面客戶端,結果只能播放收藏的播放清單,也無法搜尋,不過 Mopidy 只是個串流伺服器,沒辦法要求這麼多,雖然無法達到預期效果,還折騰了我一夜,不過真的配好了播放本機音樂還挺不錯用的,一般人看見你用終端機播音樂一定會覺得你是位大神,也順便達到耍帥的作用了。

其實整套下來就是個 Server/Client 架構,Mopidy 當串流伺服器,ncmpcpp 是客戶端,所以播放音樂時如果退出 ncmpcpp 音樂還是會繼續播放。

Mopidy

mpd 的替代品,相較於 mpd 多了許多擴充功能,可以串流 Spotify, SoundCloud 等線上音樂服務,比較多人裝在樹莓派來做 mpd 串流伺服器,不僅支援 mpd 也支援 http,可以透過各種客戶端控制。

ncmpcpp

一款簡潔的 mpd 客戶端,同時兼容 Mopidy,提供音樂庫搜尋、過濾、檔案瀏覽器等功能,使用 ncmpcpp 必須指定 mpd 伺服器位址。

使用方式:

  • F1: 使用說明
  • #: 當前連線伺服器資訊
  • 1: 目前播放佇列
  • 2: 檔案瀏覽器,可以在這裡新增歌曲到播放清單
  • 3: 資料庫搜尋
  • 4: 音樂資料庫
  • 5: 播放清單編輯器
  • 6: 標籤編輯器
  • 7: 輸出選擇
  • 8: 音樂可視化
  • =: 數位時鐘
  • \: 切換版面
  • f: 播放進度向前
  • q: 播放進度向後
  • i: 顯示歌曲資訊
  • I: 顯示歌曲藝術家資訊
  • l: 顯示歌詞(靜態歌詞)
  • L: 切換歌詞源(建議選 All)
  • <: 前一首
  • >: 下一首
  • p: 播放/暫停
  • s: 停止
  • +: 增大音量
  • -: 減小音量

更多 Key Binding 可以去看這個 Cheat Sheet

安裝

這裡只介紹 Arch Linux 的安裝方法,先把 Mopidy 和 ncmpcpp 裝好。

1
sudo pacman -S mopidy ncmpcpp

設定

強烈建議將 Mopidy 作為系統服務執行,這樣比較不容易出錯,也可以保持其穩定性。

mopidy 加入 audio 組。

1
sudo gpasswd -a mopidy audio

先建立一個範例設定檔。

1
sudo mopidyctl config

如果建立途中發生 使用者帳戶已逾期 就更改 mopidy 使用者的過期日期為永不逾期,這個是大坑啊,找了好久資料才找到解決方法。

1
sudo chage -E -1 mopidy

設定檔的位置在 /etc/mopidy/mopidy.conf

1
sudo vim /etc/mopidy/mopidy.conf

注意:設定檔修改後須重啟服務才會生效。

1
sudo systemctl restart mopidy

本機音樂瀏覽

Mopidy 設定檔中的 [file] 區塊取消註解,在 media_dirs 裡設定你想要瀏覽的目錄。

1
2
3
4
5
6
[file]
enabled = true
media_dirs = 
  $XDG_MUSIC_DIR|Music
  ~/|Home
  /mnt/

Spotify 模組

安裝 Mopidy 的 Spotify 的擴充套件,Arch 已經放在 aur 裡了。

1
yay -S mopidy-spotify

加入 Spotify 模組的設定,比特率預設 160,嫌音質不夠高的話可以改成 320client_idclient_secret 請從這裡獲取。

注意:Spotify 會員才能使用此模組

1
2
3
4
5
6
[spotify]
username = abc@example.com
password = 123456
client_id = 
client_secret = 
bitrate = 320

2 進入檔案瀏覽器界面應該能看見一個 Spotify 的選項,點進去有各類榜單,就是沒有自己的播放清單,不知道是不是 Bug?

ncmpcpp 的 Spotify 界面

用 PulseAudio 輸出音源

輸出建議設定 PulseAudio 來混合音道,使用 autoaudiosink 會有聲卡獨占的問題,如果想要音質好一點的可以設 alsasink

若要使用 PulseAudio 服務要先配置 PulseAudio 的 TCP Socket 監聽,編輯 /etc/pulse/default.pa,寫入下面這行。

1
2
3
4
5
### 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

然後 Mopidy 設定檔輸出設定指定剛才設置的 PulseAudio 端口。

1
2
[audio]
output = pulsesink server=127.0.0.1

修改完設定後重啟 PulseAudio 和 Mopidy。

1
2
3
pulseaudio --kill
start-pulseaudio-x11
sudo systemctl restart mopidy

如果你不是在 X 環境下操作,請把 start-pulseaudio-x11 替換成 pulseaudio --start

音樂可視化

ncmpcpp 內建

ncmpcpp 之所以被譽為終端機的音樂播放神器其中一個原因就是內建音樂可視化功能,進入 ncmpcpp 後按數字鍵 8 就可以跳轉到 Music visualizer 界面。

音樂可視化需要在 ncmpcpp 設定檔設定,先建立 config 資料夾。

1
mkdir ~/.ncmpcpp

編輯 ~/.ncmpcpp/config 寫入:

1
2
3
4
5
6
visualizer_output_name =                 "FIFO"
visualizer_in_stereo =                     "no"
visualizer_fifo_path =                     "/tmp/mpd.fifo"
visualizer_sync_interval =                 "10"
visualizer_type =                         "spectrum"
visualizer_look =                         "▋▋"

然後新建 /tmp/mpd.fifo,這個檔案是類比輸出裝置的 buffer。

1
mkfifo /tmp/mpd.fifo

cli-visualizer

用 ncmpcpp 內建的可視化界面常常出現 Could not open file "/tmp/mpd.fifo" for writing 的錯誤,所以我通常使用 cli-visulizer 來做音樂可視化,cli-visualizer 是 CLI 界面下的音樂可視化軟體,有多種可視化模式可以選擇,在 Arch 中一樣可以用 aur 安裝。

1
yay -S cli-visualizer

這個工具可以讀取當前音源,並即時畫出可視化圖形,如果用 PulseAudio 輸出,電腦其他音源也會被繪製出來,安裝好後無須設定,在終端中輸入 vis 即可開啟,缺點是如果終端機字體設太大像素就會很少。

使用方式:

  • space: 切換模式
  • s: 切換立體聲/單聲道
  • q/Ctrl+c: 退出 cli-visualizer
  • c: 切換顏色主題
  • +: 放大 10%
  • -: 縮小 10%

常用的按鍵就 sSpace,剩下的功能不知道為什麼沒用。

立體聲效果:

立體聲效果

單聲道效果:

單聲道效果

還有其他不知如何形容的圖形:

其他圖形

效果展示

顯示當前歌曲歌詞,記得要將 ID3 標籤填寫完整搜到歌詞的機率才比較高。

ncmpcpp 播放界面搭配 cli-visualizer

我用 tmux 切割成兩個視窗,一邊顯示播放清單,另一邊顯示可視化圖形,當然你也可以用終端機自帶的視窗分割功能。

ncmpcpp + Mopidy 效果展示

Reference