头图

简介

mdp 是一款开源的音乐播放软件, 全名为 media player daemon , 从字面意思理解, 就是一个后台播放进程. 不同于传统的音乐播放软件集成了播放解码和界面, mpd 只是一个后台播放进程, 需要单独的客户端程序与 mpd 进行交互. mpd 的客户端也各种各样, 有浏览器插件/windows客户端/gnome客户端/终端客户端等等, 而今天主要介绍的就是终端客户端程序 ncmpcpp.

mdp 及ncmpcpp 安装

osx 平台下可以使用 brew 命令进行快速安装, 以下命令可以搜索当前本地仓库是否有以上两个应用程序.


➜  brew search mpd
==> Formulae
bandcamp-dl        libmpdclient       mpdas              mpdscribble        rtmpdump           mpw                mad
libmpd             mpd                mpdecimal ✔        mpdviz             mpc                mpv
==> Casks
cisdem-pdf-converter-ocr                     cisdem-pdfmanagerultimate                    kmbmpdc

➜  brew search ncmpcpp
==> Formulae
ncmpcpp                                                             ncmpc

如果仓库中不存在以上程序, 可以使用 brew update 命令更新仓库索引.

使用 brew install 命令安装, 稍待片刻后安装完成后就可以使用 mpd 及 ncmpcpp :

➜  brew install mpd ncmpcpp
Updating Homebrew...

配置 mpd

在启动 mpd 之前, 我们需要 mpd 对进行一些配置.

创建 mdp 媒体文件夹

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

创建配置文件 ~/.mpd/mpd.conf, 用于配置 mpd 进程.

$ cat ~/.mpd/mpd.conf

music_directory "~/Music"
playlist_directory "~/.mpd/playlists"
db_file "~/.mpd/mpd.db"
log_file "~/.mpd/mpd.log"
log_level "default"
# log_level "verbose"
pid_file "~/.mpd/mpd.pid"
state_file "~/.mpd/mpdstate"
auto_update "yes"
auto_update_depth "3"
follow_outside_symlinks "yes"
follow_inside_symlinks "yes"

audio_output {
    type "osx"
        name "CoreAudio"
        mixer_type "software" # control volume localy
        # mixer_type "hardware"
}

decoder {
    plugin "mp4ff"
        enabled "no"
}

bind_to_address "127.0.0.1"
port "6600"
user "guoxiangxun"

# Visualizer
audio_output {
    type "fifo"
        name "my_fifo"
        path "/tmp/mpd.fifo"
        format "44100:16:2"
        buffer_time "100000"
        # # auto_resample "no"
        # # use_mmap "yes"
}

配置ncmpcpp

创建 ncmpcpp 配置文件夹

$ mkdir ~/.ncmpcpp/
$ touch ~/.ncmpcpp/error.log

创建 config 配置文件

$ cat ~/.ncmpcpp/config

# Files
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_show_remaining_time = "yes"

## Display Modes ##
playlist_editor_display_mode = "columns"
search_engine_display_mode = "columns"
browser_display_mode = "columns"
playlist_display_mode = "columns"

## Song List ##
# song_columns_list_format = "(10)[blue]{l} (30)[green]{a} (30)[magenta]{b} (50)[yellow]{t}"
song_columns_list_format = "(10f)[250]{l} (50)[cyan]{t|f} (18)[blue]{a} (22)[magenta]{br}"
song_list_format = "{$3%n │ $9}{$7%a - $9}{$5%t$9}|{$8%f$9}$R{$6 │ %b$9}{$3 │ %l$9}"

## General Colors ##
colors_enabled = "yes"
main_window_color = "red"
header_window_color = "cyan"
volume_color = "red"
progressbar_color = "cyan"
statusbar_color = "red"
progressbar_elapsed_color = "white"
active_window_border = "blue"

## Current Item ##
current_item_prefix = "$(blue)$r"
current_item_suffix = "$/r$(end)"
current_item_inactive_column_prefix = "$(cyan)$r"

## Alternative Interface ##
user_interface = "alternative"
# user_interface = "classic"
alternative_header_first_line_format = "$0$aqqu$/a {$7%a - $9}{$5%t$9}|{$8%f$9} $0$atqq$/a$9"
alternative_header_second_line_format = "{{$6%b$9}{ [$6%y$9]}}|{%D}"

# visualizer
# # visualizer_fifo_path = "/tmp/mpd.fifo" # deprecated , using visualizer_data_source
visualizer_data_source = "/tmp/mpd.fifo"
visualizer_output_name = "my_fifo"
# # visualizer_sync_interval = "12"  # using buffer_time in mpd.conf audio_output
visualizer_type = "wave" (spectrum/wave)
#visualizer_type = "spectrum"
visualizer_in_stereo = "yes"
visualizer_look = "+|"
# 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 = "yes"

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

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

progressbar_look = "=>-"
#progressbar_look = "─╼─"

# ## Now Playing ##
#now_playing_prefix = "> "
now_playing_prefix = "$b$2▶ "
centered_cursor = "yes"

# ## Classic Interface ##
song_status_format = " $2%a $4⟫$3⟫ $8%t $4⟫$3⟫ $5%b "

# Misc
display_bitrate = "yes"
# enable_window_title = "no"
follow_now_playing_lyrics = "yes"
ignore_leading_the = "yes"
empty_tag_marker = ""
default_place_to_search_in = "database"
autocenter_mode = "yes"
ignore_diacritics = "yes"
allow_for_physical_item_deletion = "yes"

启动 mpd

启动 mpd 后台进程, 执行以下命令

mpd

关闭 mpd 后台进程, 执行以下命令

mpd --kill

更新 mpd , 执行以下命令

mpd update

在终端打开 ncmpcpp 客户端, 执行以下命令

ncmpcpp

ncmpcpp 快捷键

  Keys - Movement

    Up k                 : Move cursor up
    Down j               : Move cursor down
    [                    : Move cursor up one album
    ]                    : Move cursor down one album
    {                    : Move cursor up one artist
    }                    : Move cursor down one artist
    PageUp               : Page up
    PageDown             : Page down
    Home                 : Home
    End                  : End

    Tab                  : Switch to next screen in sequence
    Shift-Tab            : Switch to previous screen in sequence
    F1                   : Show help
    1                    : Show playlist
    2                    : Show browser
    3                    : Show search engine
    4                    : Show media library
    5                    : Show playlist editor
    6                    : Show tag editor
    7                    : Show outputs
    8                    : Show music visualizer
    =                    : Show clock

    @                    : Show server info

  Keys - Global

    Backspace            : Play
    s                    : Stop
    p                    : Pause
    >                    : Next track
    <                    : Previous track
    Ctrl-H Backspace     : Replay current song
    f                    : Seek forward in playing song
    b                    : Seek backward in playing song
    Left -               : Decrease volume by 2%
    Right +              : Increase volume by 2%

    T                    : Toggle add mode (add or remove/always add)
    |                    : Toggle mouse support
    Ctrl-V               : Select range
    v                    : Reverse selection
    V                    : Remove selection
    Insert               : Select current item
    Ctrl-_               : Select found items
    B                    : Select songs of album around the cursor
    a                    : Add selected items to playlist
    `                    : Add random items to playlist

    r                    : Toggle repeat mode
    z                    : Toggle random mode
    y                    : Toggle single mode
    R                    : Toggle consume mode
    Y                    : Toggle replay gain mode
    #                    : Toggle bitrate visibility
    x                    : Toggle crossfade mode
    X                    : Set crossfade
                         : Set volume
    u                    : Start music database update

    :                    : Execute command
    Ctrl-F               : Apply filter
    /                    : Find item forward
    ?                    : Find item backward
    ,                    : Jump to previous found item
    .                    : Jump to next found item
    w                    : Toggle find mode (normal/wrapped)
    G                    : Locate song in browser
    ~                    : Locate song in media library
    Ctrl-L               : Lock/unlock current screen
    Left                 : Switch to master screen (left one)
    Right                : Switch to slave screen (right one)
    E                    : Locate song in tag editor
    P                    : Toggle display mode
    \                    : Toggle user interface
    !                    : Toggle displaying separators between albums
    g                    : Jump to given position in playing song (formats: mm:ss, x%)
    i                    : Show song info
    I                    : Show artist info
    F                    : Fetch lyrics for selected songs
    L                    : Toggle lyrics fetcher
    Alt-l                : Toggle fetching lyrics for playing songs in background
                         : Show/hide song lyrics

    q EoF                : Quit

  Keys - Playlist

    Enter                : Play selected item
    Delete               : Delete selected item(s) from playlist
    c                    : Clear playlist
    C                    : Clear playlist except selected item(s)
    Ctrl-P               : Set priority of selected items
    m                    : Move selected item(s) up
    n                    : Move selected item(s) down
    M                    : Move selected item(s) to cursor position
    A                    : Add item to playlist
                         : Load stored playlist
    e                    : Edit song
    S                    : Save playlist
    Z                    : Shuffle range
    Ctrl-S               : Sort range
    Ctrl-R               : Reverse range
    o                    : Jump to current song
    U                    : Toggle playing song centering

  Keys - Browser

    Enter                : Enter directory
    Enter                : Add item to playlist and play it
    Space                : Add item to playlist
    e                    : Edit song
    e                    : Edit directory name
    e                    : Edit playlist name
    2                    : Browse MPD database/local filesystem
    Ctrl-S               : Toggle sort mode
    o                    : Locate current song
    Ctrl-H Backspace     : Jump to parent directory
    Delete               : Delete selected items from disk
    G                    : Jump to playlist editor (playlists only)

  Keys - Search engine

    Enter                : Modify option / Run action
    Space                : Add item to playlist
    Enter                : Add item to playlist and play it
    e                    : Edit song
    y                    : Start searching
    3                    : Reset search constraints and clear results

  Keys - Media library

    4                    : Switch between two/three columns mode
    Left h               : Previous column
    Right l              : Next column
    Enter                : Add item to playlist and play it
    Space                : Add item to playlist
    o                    : Locate current song
    e                    : Edit song
    e                    : Edit tag (left column)/album (middle/right column)
    `                    : Toggle type of tag used in left column
    Ctrl-S               : Toggle sort mode

  Keys - Playlist editor

    Left h               : Previous column
    Right l              : Next column
    Enter                : Add item to playlist and play it
    Space                : Add item to playlist
    o                    : Locate current song
    e                    : Edit song
    e                    : Edit playlist name
    m                    : Move selected item(s) up
    n                    : Move selected item(s) down
    Delete               : Delete selected playlists (left column)
    Delete               : Delete selected item(s) from playlist (right column)
    c                    : Clear playlist
    C                    : Clear playlist except selected items

  Keys - Lyrics

    Space                : Toggle lyrics update on song change
    e                    : Open lyrics in external editor
    `                    : Refetch lyrics

  Keys - Tiny tag editor

    Enter                : Edit tag / Run action
    y                    : Save

  Keys - Tag editor

    Enter                : Enter directory (right column)
    Enter                : Perform operation on selected items (middle column)
    Enter                : Edit item (left column)
    Left h               : Previous column
    Right l              : Next column
    Ctrl-H Backspace     : Jump to parent directory (left column, directories view)

  Keys - Outputs

    Enter                : Toggle output

集成 tmux

如果使用 tmux 需要在状态栏显示当前播放歌曲, 可以创建 ~/.tmux/tmux-scripts/np_mpd.sh 脚本文件, 并在 tmux.conf 中配置状态栏. np_mpd.sh 文件如下:

#!/usr/bin/env bash
# Print a simple line of NP in mpd.

# Rolling anything what you want.
# arg1: text to roll.
# arg2: max length to display.
# arg3: roll speed in characters per second.
roll_stuff() {
    local stuff="$1"    # Text to print
    if [ -z "$stuff" ]; then
        return;
    fi
    local max_len="10"    # Default max length.
    if [ -n "$2" ]; then
        max_len="$2"
    fi
    local speed="1"    # Default roll speed in chars per second.
    if [ -n "$3" ]; then
        speed="$3"
    fi
    # Anything starting with 0 is an Octal number in Shell,C or Perl,
    # so we must explicityly state the base of a number using base#number
    local offset=$((10#$(date +%s) * ${speed} % ${#stuff}))
    # Truncate stuff.
    stuff=${stuff:offset}
    local char    # Character.
    local bytes # The bytes of one character.
    local index
    for ((index=0; index < max_len; index++)); do
          char=${stuff:index:1}
          bytes=$(echo -n $char | wc -c)
          # The character will takes twice space
          # of an alphabet if (bytes > 1).
          if ((bytes > 1)); then
            max_len=$((max_len - 1))
          fi
    done
    stuff=${stuff:0:max_len}
    #echo "index=${index} max=${max_len} len=${#stuff}"
    # How many spaces we need to fill to keep
    # the length of stuff that will be shown?
    local fill_count=$((${index} - ${#stuff}))
    for ((index=0; index < fill_count; index++)); do
          stuff="${stuff} "
    done
    echo "${stuff}"
}

trim_method="roll"     # Can be {trim or roll).
max_len=40        # Trim output to this length.
roll_speed=2        # Roll speed in chraacters per second.

np=$(ncmpcpp --current-song="{{{%a - }%t}}|{%f}")

if [ -n "$np" ]; then
    case "$trim_method" in
        "roll")
            np=$(roll_stuff "${np}" ${max_len} ${roll_speed})
            ;;
        "trim")
            np=$(echo "${np}" | cut -c1-"$max_len")
            ;;
    esac
    echo "♫ ${np}"
fi
exit 0

打开 ~/.tmux.conf 文件, 修改状态栏配置如下:


set -g status-right '#{prefix_highlight} | %a %Y-%m-%d %H:%M | Mail: #(sh ~/.tmux/tmux-scripts/tmuxmail) | #(sh ~/.tmux/tmux-scripts/np_mpd.sh)'

主要参考最后一段参数配置, 最终效果显示如下图:

image.png

其它问题

如果 ncmpcpp 配置无误,但就是没有音乐,进入ncmpcpp,按下2或4,选择文件(文件夹),按下a,添加到playlist即可


alps2006
4 声望0 粉丝

从事音视频即时通信领域开发, 喜欢瞎折腾.