Mpd について

Introduction

windows 平台的 foobar2000,linux 平台 amarok 与源自于 mac osx 的 itunes 演绎的都是同一出“大肚能容”,无论是播放,管理,刻录音乐,各色功能都是无所 不包,尤其要点名指出 itunes 的臃肿,太让自己各种不堪不忍。

mpd 相比于这些音乐播放器,太精准贯彻了 unix 'Do one thing and do it best' 哲学思想。mpd 全名为 'Music Player Damon',从其隐藏大名中也可管 中窥豹知其仅仅只是一个简单到极致的音乐播放守护进程,他只完成播放音乐这一 项纯粹的任务。

而相比于 moc/mpg123/mpg321 这一票同为 cli 音乐播放器而言,mpd 最大的特色 即为带来 c/s 架构的 Daemon,通过作为默默的守护进程运行在后台,这也提供了 非常多的想象空间,例如可以在千里之外的 iPad 上收听,在 Firefox 中无缝切 换控制,或是在 emacs 中与 emms 相互协作。

每次与 FreeBSD 相遇时,初识与结束之时总是在美妙的音乐中度过,太过完美。

Configuration

官方配置指导一读

Windows

这里要特别介绍下 mpd 在 window 下的配置。由于 mpd 默认的配置文件位于 '~/.mpdconf', 而由于 cygwin, msys/mingw, cmd 彼此之间对于路径的处理存在 着差异性,因此不建议使用相对路径。自己在使用中,必须显式地指定 mpd 启动 读取的配置文件,'mpd /.mpdconf &' 才可以顺利启动之。

而对于 .mpdconf 文件,建议在设置诸如音乐文件,播放列表时使用其路径全名, 诸如 '~/music/' 总是无法被 mpd 解析,猜测或许是其是由于使用 mingw 编译所 致。

Basic

MPD 基础配置很简单,只需要设置如下变量即可:

  • 音乐文件夹变量 music_directory,如将音乐统一存放于 '~/music/'。 在 Unix 平台上可以使用软链接,windows 上可以使用 [junction][],这样音 乐管理也可以更加弹性灵活。

  • 保存 MPD 播放状态的一系列文件,建议将这些文件统一存放于 '~/.mpd' 目录。

    • 播放列表目录 playlist_directory,相应于 '~/.mpd/playlists/'
    • 日志文件 log_file,相应于 '~/.mpd/mpd.log'
    • pid 文件 pid_file,相应于 '~/.mpd/pid'
    • 音乐数据库文件 db_file, 相应于 '~/.mpd/tag_cache'

Audio Outputs

mpd 负责音乐的播放,因此就需要驱动相应的音频设备工作,这在 mpd 中称为 audio outputs,而这是操作系统相关的,因此对于不同平台是相异的。或者也可 以选择不配置 audioo outputs,而让 mpd 去猜测可使用的音频输出,可以使用 'mpc outpus' 查看其结果。

Alsa

对于 Linux 平台当然推荐 Alsa,由于 mpd 起源于 linux,因此在不配置 audio outpus 时,mpd 在大多数情况下也可以正确找到 alsa 驱动之。

简单的 alsa audio outpus 配置如下:

audio_output {
        type            "alsa"
        name            "Debian ALSA Device"
}

Oss

由于工作平台迁移到了 freebsd,而 freebsd 没有 linux 专属的 alsa,因此需 要业已“廉颇老矣”的 oss,而这也是 freebsd 上最好的选择。小小吐槽下,由于 刚刚开始使用 freebsd,也为 mpd 无法播放音乐文件折腾了好久。对于广大 linuxer 而言,alsa/oss 任君挑选。

audio_output {
        type            "oss"
        name            "FreeBSD OSS Device"
}

Windows

audio_output {
        type            "winmm"
        name            "My Windows Device"
}

Httpd Stream

Mpd c/s 架构发挥想象力的地方正在于其可以输出音频流为 https stream,而这 可以为服务端的通用播放器所播放,诸如 windows 上无所不能的 foobar2000, linux 上的 mplayer/vlc。

Mpd 对于如何输出 httpd stream 有两种可选方案,inline/icecast。

audio_output {
        type            "httpd"
        name            "HTTP Stream"
        encoder         "lame"
        port            "8080"
        bitrate         "192"
        format          "44100:16:1"
}

Misc

当然 mpd 的功能及其可配置性不仅仅只是如此单薄,你也可以设置客户端连接的 端口/密码/数量,播放音乐时自动调节增益。

更详细的可定制选项,可以翻阅下 '~/.mpdconf' 文件或是 man 文档,或许其中也 会找到所需要的定制功能。

Clients

官方一众各平台客户端一览

Linux

Linux 平台上的 mpd 客户端很是丰富,mpd 就是孕育于此平台。gtk/QT/cli 一应 俱全,就看看官如何偏爱选择之。

对于 Gnomer 而言,应也最偏爱 sonata,简洁,完整。Gmpc 也是不错的选择,但 也许是先入为主,总还是一如既往偏爱之,sonata 抢占自己的桌面。

对于 Kder 而言,qmpdclient 算是中规中矩的客户端,自己没有感觉到太多的亮 点,也是使用频率很低。

cli 而言,强烈推荐 ncmpcpp(ncmpc),强大的可配置性,丰富的特性,任意定制 的快捷键,很适合键盘流。

Windows

由于 mpd 不是为 windows 而生,因此 windows 上的客户端相当的匮乏。或许基 于 gtk 的 gmpc 是个不错的选择,功能还算很是完备,应该可以敷衍之。

而对于 cli tools 而言,mpc/ncmpc/mpdscribble 都需要“自力更生”编译。于 cygwin 平台上顺利编译了,msys 未尝试过。编译软件还是颇费周折的,或许如 上的 gmpc 是 windows 上最好的选择了。

  • libmpdclient(ncmpc, mpdscribble 依赖于此)
  tar zxvf libmpdclient-2.4.tar.gz && cd libmpdclient-2.4
  ./configure --prefix=/usr
  make && make install
  
  • ncmpc
  tar jxvf ncmpc-0.18.tar.bz2 && cd ncmpc-0.18
  ./configure --prefix=/usr
  make && make install
  
  • mpdscribble
  tar jxvf mpdscribble-0.21.tar.bz2 && cd mpdscribble-0.21
  ./configure --prefix=/usr
  make && make install
  

iOs

iphone/ipad 下很建议使用 mPod/mPad,太方便与强大,也是很好的贯彻了 c/s 精髓,可以实现随心所欲的远程播放/控制,现在自己已经更加习惯于用 mPod 做 为自己主力了,而且也可以在 last.fm 上浏览歌曲信息,实在是个太好的玩具。

Last.fm

部分客户端自身提供了 scribble 到 last.fm 的功能,诸如 sonata/gmpc。 而对于通用 scribble 而言,推荐朴素的 mpdscribble。

轻量标记语言的比较

轻量标记语言

txt2tags

最开始接触的轻量标记语言,是在啄木鸟社区浏览 python 时意外收获的。于自己 使用 markdown 记录心得和写文章之前一直使用 txt2tags。txt2tags 给自己的影 响很好,使自己在庞大而强大的TeX 也有了另外的选择。

  • txt2tags 的语法很简洁,但还是基本可以满足要求,

  • 它的一个特点是输出格式非常丰富,有些格式自己还真是很少有机会接触到,这 也是很体现了此软件的哲学思想:“ont to all”。

  • txt2tags 也支持 css 对输出的html 进行美化,所以 html 输出还是有很大的自定义性的。

自己而言,不是很喜欢其语法,后来有预见了很偏爱的 markdown,遂弃之。 github 现在还是不支持 txt2tags,当然此为后话。

asciidoc

LinuxToy 也有对 asciidoc 做过介绍,自己也有看到过,但当时对 此软件也未有任何的在意。后来也是慢慢的了解轻量标记语言才开始真正的有接触 和使用。

  • asciidoc 理论上可以支持所有常见的文档格式,因为 asciidoc 的后端 (backend) 为 html 和 docbook。通过 docbook 作为中间格式,自然可以实现 groff,pdf 等格式的支持。

  • asciidoc 的功能很完备,可以当作是完整的排版系统,一些功能也很贴心,例 如 'verse' ,很多项目也是选用此作为文档工具,例如韦诺之战GitVimperator

  • asciidoc 的中文支持不好,或者言之为对 utf-8 支持不佳,但是有相应热心网 友相应的改进版本。另外关于 asciidoc 的中文介绍和使用也很少,使用还是要 参考文档,但还是很简单的。

reStructeredText

reStructeredText 简称为 rst,是 python 的 docutils 的组成部分,可以称 之为 python 的官方文档工具。

在轻量标记语言里,rst 应该可以算是功能最完备的,但是自己不是很习惯,但是 使用起来总是感觉不是很顺手,写 rst 文章都要查阅语法,推荐 pythoner 使用。

github 的 中文 rst 文件渲染还是会乱码,因此现在使用的很少了。

markdown

  • markdown 的语法可读性很好,很偏爱 markdown 的语法,非常的简洁而且也很 符合自己的偏好。但是比较麻烦的是对于表格没有语法支持,这也是由于 markdown 自身的哲学所致,其初衷并不是替代并 html,只是为了提高文件的可 读性。最近写作文章和记录笔记,经常要插入表格,只能使用内嵌的 html,对 于不熟悉 html 的自己来说也实在是很折腾。

  • markdown 另一个很吸引自己的是其语言实现非常丰富, perl(原始实现), c, java, lua, python, javascript 都有相应的实现,对于 想 hacking 的自己也是很好的素材。当然,你可以整合这些插件,例如可以把 lua 的插件整合进 scite 编辑器,scite 也可以成为 blog 文章编辑器。

  • github 也可以很好的支持 markdown 格式,这对于自己太方便了。

orgmuse

org 以及 muse(原来的 emacs-wiki) 都是只存在于 emacs 世界的轻量标记语言。 muse 使用很方便而且语法高亮也很强大(依赖于 htmlize 插件),原来也有使用写 作文章的经历。muse 现在基本慢慢被 org 替代了,虽然它们的初衷不一致。 org 最近发展很快,从 emacs23 开始已经成为了其标准组件,语法与 muse 基本兼容。

  • org 的功能很完善,把它列为轻量标记语言或许也不是太完善。org 的功能主要 分为文档发布(wiki)或者其本来的 GTD 管理。自己使用 org 也基本只是用其日 程规划的功能,文档发布功能很少用。在 emacser 中文站 大伙基 本都是用 org 来撰写文章的,只有自己是用 markdown 的“异类”了,自己太过 偏爱 markdown 了。

  • “背靠大树好乘凉”,有了 emacs(elisp) 的支持,org 可拓展性非常好。但是由 于应用只限于 emacs,你在使用 org 之前还要先进入 emacs 的世界,要付出很 多的学习代价,但是学习代价应该还是值得的,毕竟 emacs 是 “神的编辑器”。

summary

可以参考下 wiki 的比较介绍,看一下众多轻量标记语言的语法差异和输出格 式支持,选择自己喜欢的。

当然,由于轻量标记语言很丰富,因此它们之间的语法相差还是很大。如果经常要 在不同的标记语言之间切换,那大脑的思维转换太累了,那要好好查阅手册了。

自己一直很偏爱 markdown,现在文章写作基本都是用其描述的。而且也可以很方便与 html 整合。