使用 mpd 和 ncmpcpp 聆听您喜爱的音乐

2020 年 3 月 31 日 | Sébastien 'sogal' Poher | 无许可

Listen to your music with mpd and ncmpcpp

在本文中,我们将发现一个软件三合一,它将允许您从终端管理和收听音乐

  • mpd:音乐播放守护进程
  • mpc:一个用于 mpd 的 CLI 界面
  • ncmpcpp:一个 mpd 客户端,用 C++ 编写,具有 ncurses 界面

我们将了解如何安装、配置和使用它,以及配置流畅集成的桌面通知。

安装

由于它们在官方 openSUSE 仓库中可用,因此安装它们就像

zypper in mpd mpclient ncmpcpp

继续配置部分!

配置 mpd,音乐播放守护进程

在本文中,我们将配置并运行 mpd 作为用户实例。如果需要,它当然可以作为系统实例运行。在这种情况下,您应该在 /etc/mpd.conf 中对其进行配置。

首先,让我们创建一些配置文件目录

mkdir ~/.config/mpd
mkdir ~/.config/mpd/playlists 

然后,我们将使用软件包模板

cp /usr/share/doc/packages/mpd/mpdconf.example ~/.config/mpd/mpd.conf

并对其进行编辑以满足我们的需求。以下是重要设置的摘录(示例用户为 geeko

grep -v "^#|^$" ~/.config/mpd/mpd.conf

music_directory                 "~/Music"
playlist_directory              "~/.config/mpd/playlists"
db_file                         "~/.config/mpd/mpd.db"
log_file                        "~/.config/mpd/log"
pid_file                        "~/.config/mpd/mpd.pid"
state_file                      "~/.config/mpd/mpdstate"
sticker_file                    "~/.config/mpd/sticker.sql"
user                            "geeko"
bind_to_address                 "localhost"
port                            "6600"
log_level                       "default"
restore_paused                  "yes"
input {
        plugin "curl"
}
audio_output {
        type            "pulse"
        name            "Pulse MPD Output"
}
audio_output {
    type        "fifo"
    name        "mpd_fifo"
    path        "/tmp/mpd.fifo"
    format      "44100:16:2"
}
filesystem_charset              "UTF-8"

至关重要的是正确设置音频文件和声音输出的路径。在这里,我们使用 PulseAudio,因为它默认安装并用于大多数 openSUSE 桌面。如果您细心,您会注意到我们添加了第二个音频输出,该输出不会用于音频,而是用于在 ncmpcpp 中显示图形可视化器(是的,在终端模拟器中!)

将 mpd 作为用户空间 systemd 服务激活

现在我们将创建一个 systemd 服务,该服务将使用用户设置启动 mpd。这样 mpd 将与您的会话一起启动。

让我们创建所需的目录结构

mkdir -p ~/.config/systemd/user

并创建服务文件

$EDITOR ~/.config/systemd/user/mpd.service

添加以下内容(请记住根据您的需要调整 $USER 变量)

[Unit]
Description=Music Player Daemon

[Service]
ExecStart=/usr/bin/mpd --no-daemon /home/$USER/.config/mpd/mpd.conf
ExecStop=/usr/bin/mpd --kill
PIDFile=/home/$USER/.config/mpd/mpd.pid

[Install]
WantedBy=default.target

最后,让我们启动并启用此服务

systemctl --user start mpd
systemctl --user enable mpd

ncmpcpp 的配置

现在 mpd 启动并正在运行,我们将配置我们安装的 ncurses 客户端:ncmpcpp

mkdir ~/.ncmpcpp
cp /usr/share/doc/packages/ncmpcpp/config ~/.ncmpcpp/
$EDITOR ~/.ncmpcpp/config

这是一个带有拆分视图的漂亮的彩色配置示例

grep -v "^#|^$" ~/.ncmpcpp/config

ncmpcpp_directory = ~/.ncmpcpp
lyrics_directory = ~/.ncmpcpp/lyrics
mpd_host = localhost
mpd_port = 6600
mpd_connection_timeout = 5
mpd_music_dir = ~/Music
mpd_crossfade_time = 5
visualizer_fifo_path = /tmp/mpd.fifo
visualizer_output_name = mpd_fifo
visualizer_in_stereo = yes
visualizer_sync_interval = 30
visualizer_type = ellipse
visualizer_look = ▮●
visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161
system_encoding = "UTF-8"
playlist_disable_highlight_delay = 5
message_delay_time = 5
song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9}
song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f}
song_library_format = {%n - }{%t}|{%f}
alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
now_playing_prefix = $b
now_playing_suffix = $/b
song_window_title_format = {%a - }{%t}|{%f}
browser_sort_mode = name
browser_sort_format = {%a - }{%t}|{%f} {(%l)}
song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}
playlist_show_mpd_host = no
playlist_show_remaining_time = yes
playlist_shorten_total_times = no
playlist_separate_albums = no
playlist_display_mode = columns
browser_display_mode = classic
search_engine_display_mode = classic
playlist_editor_display_mode = classic
incremental_seeking = yes
seek_time = 1
volume_change_step = 2
autocenter_mode = yes
centered_cursor = yes
progressbar_look = =>
default_place_to_search_in = database
user_interface = alternative
media_library_primary_tag = genre
default_find_mode = wrapped
header_visibility = yes
statusbar_visibility = yes
titles_visibility = yes
header_text_scrolling = yes
cyclic_scrolling = yes
lines_scrolled = 2
follow_now_playing_lyrics = yes
fetch_lyrics_for_current_song_in_background = yes
store_lyrics_in_song_dir = yes
allow_for_physical_item_deletion = no
screen_switcher_mode = browser, media_library, visualizer
startup_screen = playlist
startup_slave_screen = "visualizer"
startup_slave_screen_focus = no
locked_screen_width_part = 50
jump_to_now_playing_song_at_start = yes
ask_before_clearing_playlists = yes
clock_display_seconds = no
display_volume_level = yes
display_bitrate = no
display_remaining_time = yes
ignore_leading_the = no
mouse_support = yes
enable_window_title = yes
external_editor = vim
use_console_editor = yes
colors_enabled = yes

使用这些设置,您将拥有一个带有左侧当前播放列表和右侧可视化器的拆分视图。所有选项在 ncmpcpp 的 man 页面中都有很好的文档记录。

ncmpcpp

使用它

以下是一些可以帮助您入门的快捷键

  • F1:显示帮助
  • 1:显示播放列表;
  • 2:显示目录浏览器
  • 3:显示搜索
  • 4:显示库
  • 5:播放列表编辑器
  • 6:标签编辑器
  • 8:可视化器
  • p:切换播放/暂停
  • a:将选择添加到播放列表
  • >:播放下一首曲目
  • <:播放上一首曲目

桌面环境快捷方式

默认情况下,按 p 将切换暂停,但是如果您不在运行 ncmpcpp 的终端前呢?这就是 mpc 发挥作用的地方。让我们打开我们最喜欢的桌面环境设置并添加一些键盘快捷方式

  • MPD 暂停:使用 mpc toggle 命令
  • MPD 上一首歌曲:使用 mpc prev 命令
  • MPD 下一首歌曲:使用 mpc next 命令

额外:在歌曲更改时收到通知

ncmpcpp 的配置中有一个参数,可以使其在歌曲更改时触发一个命令,我们将使用它来执行一个小型的 Python3 脚本,以便弹出漂亮的桌面通知。

为了使用此脚本,您需要确保安装了两个小库

zypper in python3-notify2 python3-python-mpd2

然后将以下代码添加到名为 mpd_notify.py 的文件中,该文件位于您的 $HOME/bin

#!/usr/bin/env python3
# -*- coding: UTF8 -*-

import gi
import notify2
from gi.repository import GLib
from mpd import MPDClient

client = MPDClient()
client.timeout = 10
client.idletimeout = None
client.connect("localhost", 6600)

mpd_song = MPDClient.currentsong(client)

s_artist = mpd_song['artist']
s_title = mpd_song['title']
s_album = mpd_song['album']

s_notification = s_artist + " - " + s_title + " - (" + s_album +")"

notify2.init("Music Player Demon")
show_song = notify2.Notification("Music Player Demon", s_notification,
    icon="/usr/share/icons/Adwaita/scalable/emblems/emblem-music-symbolic.svg")

show_song.set_hint("transient", True)

show_song.show()

现在,我们将只在 ncmpcpp 配置文件的文件中添加相应的参数

execute_on_song_change = "/usr/bin/python3 /home/$USER/bin/mpd_notify.py"

mpd desktop notification

最后

我们希望您喜欢这次发现,并享受使用这些工具管理您的音乐。ncmpcpp 非常强大,它包括搜索功能、音乐库的不同视图、标签编辑器以及您需要的一切,可以根据您的喜好进行调整!

分享此帖子