写点什么

osx 安装 mpd 和 ncmpcpp

作者:alps2006
  • 2023-01-03
    上海
  • 本文字数:7649 字

    阅读完需:约 25 分钟

osx安装mpd和ncmpcpp

简介

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

mdp 及 ncmpcpp 安装

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



➜ 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
复制代码


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


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


➜  brew install mpd ncmpcppUpdating 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"
# Visualizeraudio_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
# 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%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_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%a $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"
复制代码

启动 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}"fiexit 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)'
复制代码


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



其它问题

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

用户头像

alps2006

关注

从事音视频即时通信领域开发, 喜欢瞎折腾. 2018-09-18 加入

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

评论

发布
暂无评论
osx安装mpd和ncmpcpp_macos_alps2006_InfoQ写作社区