<article class=“article fmt article-content”><h2>简介</h2><p>mdp 是一款开源的音乐播放软件, 全名为 <code>media player daemon</code> , 从字面意思了解, 就是一个后盾播放过程. 不同于传统的音乐播放软件集成了播放解码和界面, mpd 只是一个后盾播放过程, 须要独自的客户端程序与 mpd 进行交互. mpd 的客户端也各种各样, 有浏览器插件/windows客户端/gnome客户端/终端客户端等等, 而明天次要介绍的就是终端客户端程序 <code>ncmpcpp</code>.</p><h2>mdp 及ncmpcpp 装置</h2><p>osx 平台下能够应用 <code>brew</code> 命令进行疾速装置, 以下命令能够搜寻以后本地仓库是否有以上两个应用程序.</p><pre><code class=“shell”>➜ brew search mpd==> Formulaebandcamp-dl libmpdclient mpdas mpdscribble rtmpdump mpw madlibmpd mpd mpdecimal ✔ mpdviz mpc mpv==> Caskscisdem-pdf-converter-ocr cisdem-pdfmanagerultimate kmbmpdc➜ brew search ncmpcpp==> Formulaencmpcpp ncmpc</code></pre><p>如果仓库中不存在以上程序, 能够应用 <code>brew update</code> 命令更新仓库索引. </p><p>应用 <code>brew install</code> 命令装置, 稍待片刻后装置实现后就能够应用 mpd 及 ncmpcpp :</p><pre><code class=“shell”>➜ brew install mpd ncmpcppUpdating Homebrew…</code></pre><h2>配置 mpd</h2><p>在启动 mpd 之前, 咱们须要 mpd 对进行一些配置.</p><p>创立 mdp 媒体文件夹</p><pre><code>$ 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</code></pre><p>创立配置文件 <code>/.mpd/mpd.conf</code>, 用于配置 mpd 过程.</p><pre><code>$ cat /.mpd/mpd.confmusic_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”# Visualizeraudio_output { type “fifo” name “my_fifo” path “/tmp/mpd.fifo” format “44100:16:2” buffer_time “100000” # # auto_resample “no” # # use_mmap “yes”}</code></pre><h2>配置ncmpcpp</h2><p>创立 ncmpcpp 配置文件夹</p><pre><code>$ mkdir ~/.ncmpcpp/$ touch ~/.ncmpcpp/error.log</code></pre><p>创立 config 配置文件</p><pre><code>$ cat /.ncmpcpp/config# Filesmpd_music_dir = “/Music"lyrics_directory = ~/.ncmpcpp/lyricsncmpcpp_directory = /.ncmpcppmpd_host = “localhost"mpd_port = “6600"mpd_connection_timeout = “5"mpd_crossfade_time = “5”# Playlistplaylist_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 - $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 - $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_sourcevisualizer_data_source = “/tmp/mpd.fifo"visualizer_output_name = “my_fifo”# # visualizer_sync_interval = “12” # using buffer_time in mpd.conf audio_outputvisualizer_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 $4⟫$3⟫ $8%t $4⟫$3⟫ $5%b “# Miscdisplay_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”</code></pre><h2>启动 mpd</h2><p>启动 mpd 后盾过程, 执行以下命令</p><pre><code>mpd</code></pre><p>敞开 mpd 后盾过程, 执行以下命令</p><pre><code>mpd –kill</code></pre><p>更新 mpd , 执行以下命令</p><pre><code>mpd update</code></pre><p>在终端关上 ncmpcpp 客户端, 执行以下命令</p><pre><code>ncmpcpp</code></pre><h2>ncmpcpp 快捷键</h2><pre><code> 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</code></pre><h2>集成 tmux</h2><p>如果应用 tmux 须要在状态栏显示以后播放歌曲, 能够创立 <code>/.tmux/tmux-scripts/np_mpd.sh</code> 脚本文件, 并在 <code>tmux.conf</code> 中配置状态栏. np_mpd.sh 文件如下:</p><pre><code class=“shell”>#!/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=”{{{ - }%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}“fiexit 0</code></pre><p>关上 ~/.tmux.conf 文件, 批改状态栏配置如下:</p><pre><code class=“shell”>set -g status-right ‘#{prefix_highlight} | %Y-%m-%d %H:%M | Mail: #(sh ~/.tmux/tmux-scripts/tmuxmail) | #(sh ~/.tmux/tmux-scripts/np_mpd.sh)’</code></pre><p>次要参考最初一段参数配置, 最终成果显示如下图:</p><p></p><h2>其它问题</h2><p>如果 ncmpcpp 配置无误,但就是没有音乐,进入ncmpcpp,按下2或4,抉择文件(文件夹),按下a,增加到playlist即可</p></article>
...