Skip to content

Instantly share code, notes, and snippets.

@ZoomQuiet
Forked from RobertAudi/moc-on-osx.md
Last active January 2, 2016 02:09
Show Gist options
  • Save ZoomQuiet/8234667 to your computer and use it in GitHub Desktop.
Save ZoomQuiet/8234667 to your computer and use it in GitHub Desktop.
Chinese verion and appended how to install ncurses for display mutli-byte words

MOCp on OS X 10.9 Mavericks with CJK

thanx: AzizLight/moc-on-osx.md

最近升级到 了 MAC OS X 10.9 Mavericks, 一直以来使用 brew 安装的 MOCP 这就不成了,决定折腾清楚,并分享大家

依赖 Requirements

根据 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)

对音频的支持,你需要:

想要网络音频流式:

要 resampling (有些不区支持rate 的硬件播放需要):

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

从源代码安装 Compiling MOC from source

首先从 这儿 下载 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 提供的这一技巧!

显示 CKJ

图样图森破! 这么编译出来的 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
...

参考:

配置 Configuring MOC

现在要配置编译好的 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

齐了!

运行 Running MOC

在运行 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 退出控制界面, 但是,音乐不会停止!

又 One more thing

以前俺在 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

额外甜品 The cherry on the cake

是的,最后还有好物! 俺通过 applescript 将 F7, F8F9 定制给了 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"

Alfred Workflow

同时,也创建了 Alfred2 的工作流来显示当前播放列表, 并可触发常见的 播放/暂停/下一首/前一首 (play/pause/next/previous ) 操作 工作流可以从 这儿 下载.

完成下载后,只要双击,就能安装安装.

以上! 一个全功能,命令行音乐播放环境就折腾好了! 比 iTunes 高大上多了!

Enjoy!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment