Mac/Linux 使用终端来播放音乐,并且个性化我们的播放器

我使用过很多流媒体播放器,我实在喜欢Spotify。但是我也希望给我离线30G(目前来说)音乐库一个家。我尝试过不少离线播放器,实在牵强人意,而且在我使用Linux和Mac之后,选择性就变得更少(实则不然,只是我太挑剔,很多用过觉得不好就删了)。而最终,为何不试试在终端播放音乐呢?反正我已经泡在终端里出不来。

正文

所以,我发了一个博文。我比较喜欢的两个终端播放器分别是:
【Cmus】和【Ncmpcpp】
(还有一些,如moc、sayonara-terminal)

Cmus

它长这样:
Cmus

事实上,Cmus 是不错的,因为它支持的系统很多,而且开箱即用,只需要包管理器安装好: brew install cmus 就可以直接打开 cmus,我也使用过一段时间,但是我发现我有些Flac音乐播放卡卡的沙沙声音,总是会吓人一跳,我也懒得找问题,因为有固定几首歌会这样。

但是我们今天的主题并不是 Cmus ,但是我依旧会提供一些 Cmus 的快捷键指南:

x                           播放
c                           暂停/播放
b                           下一首
z                           上一首
v                           归零

+/=                          音量 +10%
-                           音量 -10%

,                           退后 -1m
.                           快进 +1m

h                          退后 -5
l                           快进 +5

left                        退后 -5
right                      快进 +5

更多在这里:https://github.com/cmus/cmus/blob/master/Doc/cmus.txt


让我们回到我们的重点 —— 正题 【Ncmpcpp】

Ncmpcpp

(经过美化设置)它长这样:
Ncmpcpp

来吧,废话不多说了,让我们开始安装: (本文 Ncmpcpp 版本为 ncmpcpp 0.10.1)

第一步 – 安装 MPD

MPD(Music Player Daemon)是 ncmpcpp 的后端服务,它负责管理和播放音乐。

brew install mpd

# Linux 自行换掉 Brew 就行

第二步 – 创建 MPD 的配置文件目录

mkdir -p ~/.mpd/playlists
touch ~/.mpd/{mpd.conf,mpd.db,mpd.log,mpd.pid}

第三步 – 编辑配置文件

vim ~/.mpd/mpd.conf
music_directory    "~/Music"        # 音乐目录
playlist_directory "~/.mpd/playlists"
db_file            "~/.mpd/mpd.db"
log_file           "~/.mpd/mpd.log"
pid_file           "~/.mpd/mpd.pid"
state_file         "~/.mpd/mpdstate"
bind_to_address    "127.0.0.1"      # 服务地址绑定到本机(如果你需要让 MPD 在局域网中被其他设备访问,可以将 bind_to_address 设置为 0.0.0.0)
port               "6600"       # MPD 服务使用的端口
audio_output {      # macOS 上选择 osx,如果需要输出到其他设备可自行调整。
    type            "osx"
    name            "Mac Audio"
    buffer_time     "12"
}

如果是Linux的话:(在安装完毕后,7 页面可以查看,支持开关输出)

....同上
audio_output {
    type            "alsa"    # 对应 Linux 的音频系统
    name            "My ALSA Output"
}

第四步 – 启动MPD

mpd

# 设置开机自启动
# Mac 立即启动 mpd 并在登录时重新启动:
brew services start mpd
# 如果你不想/不需要后台服务,可以直接运行:
/opt/homebrew/opt/mpd/bin/mpd --no-daemon

# Linux
systemctl enable --now mpd

# 重启 MPD
brew services restart mpd       # MacOS
systemctl restart mpd           # Linux

第五步 – 安装Ncmpcpp

brew install ncmpcpp

# 验证安装
ncmpcpp --version

# 输出内容:
ncmpcpp 0.10.1

第六步 – 配置Ncmpcpp

因为 Ncmpcpp 是依赖 MPD 的,所以需要为 Ncmpcpp 设置配置文件,以便它能够正确连接到 MPD。

~/.ncmpcpp/config 中创建 ncmpcpp 的配置文件:

mkdir -p ~/.ncmpcpp
vim ~/.ncmpcpp/config

添加下面内容:

# MPD 服务器地址
mpd_host = "127.0.0.1"

# MPD 服务器端口
mpd_port = "6600"

# 指定 mpd 音乐库路径
mpd_music_dir = "~/Music"

# 播放列表设置
playlist_disable_highlight_delay = "0"

美化指南在结尾

配置文件要确保的内容:

  • mpd_host 和 mpd_port:确保与 MPD 的设置一致(默认是 127.0.0.1:6600)。

  • mpd_music_dir:指定你的音乐文件夹路径。

第七步 – 启动Ncmpcpp

启动步骤:

1.确保 MPD 正在运行:

mpd

2.启动 Ncmpcpp:

ncmpcpp

3.如果一切正常,你应该会看到 Ncmpcpp 的主界面,类似于下图:
Ncmpcpp

如果没看到音乐

即便刷新了还是没看到,但是我们看一下日志,确实是导入成功了。

Ncmpcpp-Music-Import01

这是为什么呢,是因为 1播放历史,默认是空白的,你需要切换到 2 文件浏览器,选择音乐的目录,选择播放后,才会在 1 播放历史里看到。

Ncmpcpp-Music-Import02

至此,所有的工作就完成了,可以开始听歌了。而详细的美化指南在结尾


常用操作和快捷键

基本操作:

添加音乐到 MPD 数据库:
要确保音乐文件已放在 music_directory 指定的路径中(如上文配置的 ~/Music)。
之后在 ncmpcpp 中按下 u,更新 MPD 数据库。

播放音乐:

使用 箭头键 导航到歌曲或专辑,按 Enter开始/重新播放。

切换窗口:

1:主播放窗口(播放历史)。
2:文件浏览器。
3:搜索。
4:音乐库。
5:播放列表编辑。
6:标签设置。
7:输出接口。
8:音乐波频。

播放控制:

Enter:开始/重新播放。
>/<:下一首/上一首(这个是括号,不是方向键)
p/s:暂停/终止播放。
方向左右 - 调整音量
r/z/y:重复/随机/循环播放模式。
c/S:清除/保存播放列表。
n/m:移动播放列表音乐。

搜索:

/,然后输入搜索关键词(如歌曲名、艺术家)。

退出:

q 退出 ncmpcpp。

更多快捷键

https://linux-in-the-house.pages.dev/ncmpcpp


美化指南

实现 FIFO 频谱图可视化显示。

报错前言

v0.9 – v0.10 后的 MPD 新版本里, mpd.conf 配置文件 已经弃用 下面的 设置

Reading configuration from ~/.ncmpcpp/config...
Unknown option: visualizer_fifo_path
Unknown option: visualizer_sync_interval

visualizer_fifo_path , 新版本请使用 visualizer_data_source

之后可以在 mpd.conf 配置中【指定】 buffer_time,并在 ncmpcpp 配置中【移除】 visualizer_sync_interval

如果你希望使用大家的(旧)配置而不报错,可以编译安装 v0.8 或之前的版本

配置 FIFO

什么是FIFO呢?

FIFO(First In First Out)管道文件 是一种特殊的文件类型,用于在程序间传递数据。在 MPD 和 ncmpcpp 中,FIFO 通常用于传递音乐的可视化数据(如频谱图)。MPD 将音频数据输出到 FIFO 文件,而 ncmpcpp 读取该文件并显示频谱效果。

下面,我们来配置。

第一步 – 创建 FIFO 文件

mkfifo /tmp/mpd.fifo

第二步 – 给予 FIFO 读写权限

chmod 666 /tmp/mpd.fifo

第三步 – 在 MPD 配置追加点东西

vim ~/.mpd/mpd.conf
### 追加下面内容

# FIFO 输出
audio_output {
    type            "fifo"           # 使用 FIFO 类型
    name            "Visualizer"     # 输出名称,可自定义
    path            "/tmp/mpd.fifo"  # FIFO 文件的路径
    format          "44100:16:2"     # 音频格式(采样率:位深度:声道数)
}

type "fifo":指定输出类型为 FIFO。
path "/tmp/mpd.fifo":与前面创建的 FIFO 文件路径一致。
format "44100:16:2":指定音频数据的格式(44.1 kHz、16 位深度、双声道)。

第四步 – 保存文件后,(每次修改都要)重新启动 MPD:

brew services restart mpd       # MacOS

systemctl restart mpd           # Linux

之后就没问题了。编辑 ncmpcpp 的配置文件(~/.ncmpcpp/config):

visualizer_output_name = "FIFO"
visualizer_data_source = "/tmp/mpd.fifo"
visualizer_type = "spectrum"
visualizer_in_stereo = "yes"
visualizer_look = "●▋"

visualizer_output_name:指定可视化的输出名称,与 MPD 配置一致。

visualizer_data_source:FIFO 文件路径,必须与 MPD 的配置一致。

visualizer_type

  • spectrum:频谱图。

  • wave:波形图。

visualizer_in_stereo:启用立体声显示(可选)。

visualizer_look:设置频谱柱字符样式,例如 ●▋。

进入 Ncmpcpp 开启波频图

首先要播放一首歌,之后打开 7 输出设备管理,可以看到一个新的设备,回车打开

Ncmpcpp-Settings

之后在 8 音乐可视化页面,就可以看到波频图了,否则是看不到的

Ncmpcpp-Wave

之后就完成了。

我的配置

下面是我使用的一些美化设置:

来自 – vim ~/.mpd/mpd.conf

~/.mpd/mpd.conf

music_directory    "~/Music"
playlist_directory "~/.mpd/playlists"
db_file            "~/.mpd/mpd.db"
log_file           "~/.mpd/mpd.log"
pid_file           "~/.mpd/mpd.pid"
state_file         "~/.mpd/mpdstate"
bind_to_address    "127.0.0.1"
port           "6600"
audio_output {
    type            "osx"
    name            "Mac Audio"
    buffer_time     "12"
}
audio_output {
    type            "fifo"           # 使用 FIFO 类型
    name            "Visualizer"     # 输出名称,可自定义
    path            "/tmp/mpd.fifo"  # FIFO 文件的路径
    format          "44100:16:2"     # 音频格式(采样率:位深度:声道数)
}
来自 – vim ~/.ncmpcpp/config

~/.ncmpcpp/config

mpd_music_dir = "~/Music"
 lyrics_directory  = ~/.ncmpcpp/lyrics
 ncmpcpp_directory  = ~/.ncmpcpp
 mpd_host = "localhost"
 mpd_port = "6600"
 mpd_connection_timeout = "5"
 mpd_crossfade_time = "5"

 # Playlist
 playlist_disable_highlight_delay = "0"
 playlist_display_mode = "columns"
 playlist_show_remaining_time = "yes"

 browser_display_mode = "columns"
 autocenter_mode = "yes"
 fancy_scrolling = "yes"
 follow_now_playing_lyrics = "yes"
 display_screens_numbers_on_start = "yes"
 ignore_leading_the = "yes"
 lyrics_database = "1"
 song_columns_list_format = "(10)[blue]{l} (30)[green]{a} (30)[magenta]{b} (50)[yellow]{t}"
 colors_enabled = "yes"
 main_window_color = "white"
 main_window_highlight_color =  "blue"
 header_window_color = "cyan"
 volume_color = "red"
 progressbar_color = "cyan"
 statusbar_color = "white"
 active_column_color = "cyan"
 active_window_border = "blue"

alternative_header_first_line_format = "0aqqu/a {7%a - 9}{5%t9}|{8%f9}0atqq/a9"
alternative_header_second_line_format = "{{6%b9}{ [6%y9]}}|{%D}"
song_list_format = "{3%n │ 9}{7%a - 9}{5%t9}|{8%f9}R{6 │ %b9}{3 │ %l9}"
user_interface = "alternative"
#user_interface =                    "classic"
default_place_to_search_in = "database"

# visualizer
visualizer_data_source = "/tmp/mpd.fifo"
visualizer_output_name = "my_fifo"
#visualizer_type = "wave" (spectrum/wave)
visualizer_type = "spectrum" (spectrum/wave)
visualizer_in_stereo = "yes"
visualizer_look = "●▋"

## Navigation ##
cyclic_scrolling = "yes"
header_text_scrolling = "yes"
jump_to_now_playing_song_at_start = "yes"
lines_scrolled = "2"

## Other ##
system_encoding = "utf-8"
regular_expressions = "extended"

## Selected tracks ##
selected_item_prefix = "* "
discard_colors_if_item_is_selected = "no"

## Seeking ##
incremental_seeking = "yes"
seek_time = "1"

## Visivility ##
header_visibility = "yes"
statusbar_visibility = "yes"
titles_visibility = "yes"

progressbar_look =  "=>-"
progressbar_elapsed_color = "white"

now_playing_prefix = "> "
song_status_format = " 2%a4⟫3⟫8%t 4⟫3⟫ $5%b "
autocenter_mode = "yes"
centered_cursor = "yes"

# Misc
display_bitrate = "yes"
# enable_window_title = "no"
follow_now_playing_lyrics = "yes"
ignore_leading_the = "yes"
empty_tag_marker = ""

Done


美化参数指南:https://twily.info/.ncmpcpp/config

中文美化教程:https://blog.yangmame.org/mpd-ncmpcpp%E9%85%8D%E7%BD%AE%E7%BE%8E%E5%8C%96%E6%95%99%E7%A8%8B.html

完成的美化样式配置大全(有图):http://dotshare.it/category/mpd/ncmpcpp/


疑难杂症

专辑 / 音乐名字没有正常显示

music-kuwo
music-kuwo

如果你的音乐出现这样的问题,其实是音乐的 tag 标签不全。

你可以在 6 标签编辑器里面补全。

也可以使用一些好用的,可视化的标签修改器,编辑补全。

如开源的 – MusicBrainz PicardKid3


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注