thanx: AzizLight/moc-on-osx.md
最近升级到 了 MAC OS X 10.9 Mavericks, 一直以来使用 brew 安装的 MOCP 这就不成了,决定折腾清楚,并分享大家
根据 MOC 的文档,列出所有依赖的:
- UNIX system with POSIX threads (e.g., Linux or FreeBSD)
ncurses
(MAC 一般没有,要另外安装,下文详述)- C and C++ 编译器 (MOC 是用C 写的,但 libtool 以及其它各种新增解码插件用的是 C++)
- libdb version 4 or later (除非编译时使用 --disable-cache)
对音频的支持,你需要:
- Ogg Vorbis - libvorbis (http://www.xiph.org/ogg/vorbis/download/), or libvorbisidec (http://svn.xiph.org/trunk/Tremor).
- mp3 - libmad with libid3tag (ftp://ftp.mars.org/pub/mpeg/)
- FLAC - (http://flac.sourceforge.net/)
- WAVE, AU, AIFF, SVX, SPH, IRC, VOC - libsndfile (http://www.mega-nerd.com/libsndfile/)
- Speex - libspeex (http://www.speex.org/)
- Musepack (mpc) - libmpcdec and taglib (http://www.musepack.net/) (http://developer.kde.org/~wheeler/taglib.html)
- WMA, RealAudio (.ra), MP4 - FFmpeg version 0.5 or later (http://www.ffmpeg.org/), or LibAV 0.6.3 or later (http://www.libav.org/)
- modplug - libmodplug (http://modplug-xmms.sourceforge.net)
- MIDI - libtimidity (http://timidity.sourceforge.net/)
- SID - sidplay2 (sidplay2.sourceforge.net/)
- wavpack - libwavpack (http://www.wavpack.com/)
- AAC - libfaad2 version 2.7 or later (http://www.audiocoding.com/), and libid3tag (http://www.underbit.com/products/mad/)
想要网络音频流式:
- libcurl 7.12.2 or later (http://curl.haxx.se)
要 resampling (有些不区支持rate 的硬件播放需要):
- libresamplerate 0.1.2 or newer (http://www.mega-nerd.com/SRC/index.html)
For JACK (髙响应音频服务):
For librcc (解决mp3 tag 的编码问题):
So first you need to install Xcode and Homebrew if you don't already have them installed; I'll let you Google on how to do that. You also need to install a dependency that is not listed above: BerkeleyDB. Luckily there is a Homebrew package for it:
当然一切开始前,你必须安装好 Xcode 以及 Homebrew; 否则,先 Google 一下吧,这儿就不废话了. 同时必须安装 BerkeleyDB 幸好,包含在 brew 中的, 一下子就可以安装好:
% brew install berkeley-db
其实: 对 BerkeleyDB 的依赖,已经列过了,就是 libdb
.
感谢 John Fitzgerald, MOC的维护者, 提点了俺.
NOTE: %
是俺这儿的提示符,使用时,不用复制这货!
现在来安装 JACK, 这是 MOC 使用的音频服务.:
% brew install jack
最后,安装各种期望支持的音频格式解码器, 这儿只举了两个例子,其它的类似::
% brew install libmad
% brew install libid3tag
首先从 这儿 下载 MOC 的源代码. 俺推荐下载开发版 (2.5.0-beta1). 然后解开压缩:
% cd ~/Downloads
% tar xvjf moc-2.5.0-beta1.tar.bz2
% cd moc-2.5.0-beta1
接着配置,编译,安装,三板斧:
% ./configure --prefix=/usr/local/Cellar/moc/2.5.0-beta1 --with-jack --enable-debug --without-ffmpeg
% make
% make install
注意:
俺没有使用 --without-ffmpeg
,但是,依然同 ffmpeg 编译在了一起.
如果你真心不想这样, 先反安装之 brew uninstall ffmpeg
jcf 提供的这一技巧!
图样图森破! 这么编译出来的 MOC ,在遇到包含CJK 字符时,就全部变成 ####
了!
必须先安装 ncurses
并链接进来,
所以:
% curl -O ftp://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz
% tar -xzvf ncurses-5.9.tar.gz
% cd ./ncurses-5.9
% ./configure --prefix=/usr/local \
--without-cxx --without-cxx-binding --without-ada --without-progs --without-curses-h \
--with-shared --without-debug \
--enable-widec --enable-const --enable-ext-colors --enable-sigwinch --enable-wgetch-events \
&& make
% sudo make install
然后,再走一遍前述的配置,编译,安装,三板斧, 就可以观察到编译进来了什么:
% brew link moc
% brew info moc
moc: stable 2.5.0-beta1, HEAD
http://moc.daper.net
/usr/local/Cellar/moc/2.5.0-beta1 (26 files, 664K) *
Built from source
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/moc.rb
==> Dependencies
Build: pkg-config ✔, gettext ✔, autoconf ✔, automake ✔, libtool ✔
Required: berkeley-db ✔, jack ✔
Recommended: ffmpeg ✔
Optional: mad ✔, flac ✔, speex ✔, musepack ✘, libsndfile ✔, wavpack ✘, faad2 ✔, timidity ✘, libmagic ✘
==> Options
...
参考:
- 命令行下的音乐播放器 — MOC - 开源中国社区
- mocp can not display file names with multibyte character? | MOC - music on console
- HOW TO INSTALL ncurses on MacOSX
现在要配置编译好的 MOC.
首先就是注入 $PATH
:
- 如果使用 ZSH, 就加入这行到
~/.zshrc
:
path=( /usr/local/Cellar/moc/2.5.0-beta1/bin $path )
- 如果是 Bash, 则加入到
~/.bashrc
:
PATH=/usr/local/Cellar/moc/2.5.0-beta1/bin:$PATH
然后,在你的目录中给 MOC 安个家:
% mkdir ~/.moc
先放下配置文件,给 MOC 定制个样式,
创建对应目录:
themes
% mkdir ~/.moc/themes
俺用的样式是从 CrunchBang forums 扒的. 所有必须作的,只是在指定目录中,创建对应描述文件:
% vim ~/.moc/themes/rhowaldt_theme
background = default default
frame = default default
window_title = default default
directory = blue default
selected_directory = blue default reverse
playlist = default default
selected_playlist = default default reverse
file = default default
selected_file = default default reverse
marked_file = blue default bold
marked_selected_file = blue default reverse
info = default default
selected_info = default default
marked_info = blue default bold
marked_selected_info = blue default bold
status = default default
title = blue default bold
state = default default
current_time = default default
time_left = default default
total_time = default default
time_total_frames = default default
sound_parameters = default default
legend = default default
disabled = default default
enabled = blue default bold
empty_mixer_bar = default default
filled_mixer_bar = default default reverse
empty_time_bar = default default
filled_time_bar = default default reverse
entry = default default
entry_title = default default
error = default default bold
message = default default bold
plist_time = default default
注意: 俺清除了样式的注释, 但是,你可以从 这儿 获得全版的
现在用内置的配置样本,复制成你实际的配置文件吧::
% cp /usr/local/Cellar/moc/2.5.0-beta1/share/doc/moc/config.example ~/.moc/config
然后,针对性的配置几个关键项就好:
% vim ~/.moc/config
注意: 此配置针对 iTerm2.
ReadTags = no # 对于中文音乐各种奇葩的 TAG 编码,就算了
MusicDir = /path/2/You/Music
StartInMusicDir = yes
SoundDriver = JACK
XTerms = xterm-256color
Theme = rhowaldt_theme
MOCDir = ~/.moc
UseRCC = no
齐了!
在运行 MOC 前, 需要先启动 JACK ,否则 MOC 无法工作! 一般这样:
% jackd -d coreaudio
但是,每次这么来,很不COOL! 所以,使用MAC 的 launch agent:
% vim ~/Library/LaunchAgents/org.jackaudio.jackd.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.jackaudio.jackd</string>
<key>WorkingDirectory</key>
<string>/Users/aziz/</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/Cellar/jack/1.9.7/bin/jackd</string>
<string>-d</string>
<string>coreaudio</string>
</array>
<key>EnableGlobbing</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
然后加载进来:
% launchctl load ~/Library/LaunchAgents/org.jackaudio.jackd.plist
终于可以跑 MOC 了!!!
% mocp
想看看常用命令, 在 MOC 界面中使用 ?
.
最NB 的是,在 MOC 播放过程中,随时可以使用 q
退出控制界面,
但是,音乐不会停止!
以前俺在 Gist 丢了个脚本, 可以 令 Growl 对 MOC 的事务进行提醒! 不过,俺很怀疑是否俺原创的了, 因为找不到起源了,所以,如果是你先写了这段脚本, 请吼俺,俺立即注明:
#!/bin/bash
while out=$(/usr/local/Cellar/moc/2.5.0-beta1/bin/mocp -i); do
# Parse mocp output.
while IFS=: read -r field value; do
case $field in
Artist) artist=$value;;
Album) album=$value;;
SongTitle) title=$value;;
esac
done <<< "$out"
# Don't do anything if we're still on the same song.
[[ "$artist-$album-$title" = "$current" ]] && { sleep 1; continue; }
# Growl notify this information
if [[ $album && $artist && $title ]]; then
/usr/local/bin/growlnotify -t "moc: $title" -n "mocp" -m "by $artist"$'\n'"(album: $album)"
fi
# Remember the current song.
current="$artist-$album-$title"
done
将其放在随便哪儿都成.
俺放在 ~/bin
.
设定为可执行 chmod a+x moc-growl.sh
当然可以每次手工调用.
不过,这就比较闷了,所以,俺包装成了launch agent:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>me.azizlight.mocgrowl</string>
<key>WorkingDirectory</key>
<string>/Users/aziz/</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/Users/aziz/bin/moc-growl.sh</string>
</array>
<key>EnableGlobbing</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
并表忘记加载为启动任务:
% launchctl load ~/Library/LaunchAgents/me.azizlight.mocgrowl.plist
是的,最后还有好物!
俺通过 applescript 将 F7
, F8
和 F9
定制给了 MOC!
这么来:
- 打开 Automator
- 创建一服务 Create a new Service
- 选择 "Run AppleScript"
- 在下面的迷你 AppleScript 编辑器中插入脚本
- 保存
- 从系统配置 进入 键盘热键定制 Go in the Keyboard Shortcuts System Preferences
- 加载新服务 Locate your new service
- 指定快捷键 Assign it a shortcut
选择这几个键,因为它们好象也是媒体控制键. 以下是所有脚本 (three times in total):
-- This is the script to Play/Pause
do shell script "/usr/local/Cellar/moc/2.5.0-beta1/bin/mocp -G"
-- This is the script to go to the Next Song
do shell script "/usr/local/Cellar/moc/2.5.0-beta1/bin/mocp -f"
-- This is the script to go to the Previous Song
do shell script "/usr/local/Cellar/moc/2.5.0-beta1/bin/mocp -r"
同时,也创建了 Alfred2 的工作流来显示当前播放列表, 并可触发常见的 播放/暂停/下一首/前一首 (play/pause/next/previous ) 操作 工作流可以从 这儿 下载.
完成下载后,只要双击,就能安装安装.
以上! 一个全功能,命令行音乐播放环境就折腾好了! 比 iTunes 高大上多了!
Enjoy!