[不折腾会死][逆袭的Linux] Linux下最强播放器MPD主要介绍+使用体会
上次我花了很长很长很长时间介绍了Win平台上的神器级别的音乐播放器Foobar2000以及其神器级别的CUI皮肤Xchange。那么,Linux平台有没有比较完美的音乐播放器?
答案是没有。其实这个和软件开发者的兴趣取向有关:不同于Win平台,Linux的平台基本上就是各种Linuxer自娱自乐的一个“游乐场”,那些开发者普遍认为,听音乐什么的,只要有一个媒体库,有个播放列表,然后能放就可以了,才不要花我宝贵的打码的时间开发什么多余的乱七八糟的功能呢!(扭头)。没有各种“听音乐发烧友”的那种“比较特别的需求”,自然相对于Win平台就没有什么优秀的音乐播放器了。
当然这是与Win平台相比较而言。如果撇开一切Win平台上听音乐的习惯不谈,慢慢深入他们的“游乐场”,你就会发现他们的播放器非常简洁,功能极其精炼,另外还有近乎无限的“玩头”。我现在打算介绍的Linux平台上的音乐播放器MPD,就是这样的一个软件。
唉,这一次文首为什么没有截图?我也只能回答,MPD就是这样的一个软件。
MPD是什么
MPD是Media Player Daemon 的缩写。大部分人看到Daemon应该能大致猜出他的定位了吧——它是一个后台程序。没有CUI,更没有GUI——这就是没有截图的原因。按照我这个基础知识为0的软件玩家的比较主观的视角上看,MPD更像是一个某个网络服务的服务端。它遵循着Unix系最经典的KISS原则(Keep it Simple and Stupid),它别的不管,专门处理音频文件的播放,以及播放列表(还有媒体库)。如果偏要说的话,更像是每个系统都自带的系统音效模块,就像系统上播放音效那么简单。
光是音频的播放,当然不能够称为音乐播放软件——没有人会把系统的音效播放当作音乐来放吧。因此,MPD除了MPD本身之外,还需要一个客户端作为用户界面和各种信息的处理, 因此诞生了所谓的C/S播放器结构。(C/S即为Client/Server)。MPD专门处理播放的部分,而客户端则则理用户界面,播放控制,媒体库、 播放列表的搜索和处理,以及各种外挂……也可以认为是Core和Shell之间的关系吧,话说Core和Shell也是C/S呢,各种巧合……
当然,也有可能会招致不少人的困惑:一个媒体播放器干嘛要把播放和用户界面分开来?分开来到底有什么好处?我在这里稍微斗胆比较比较MPD相对于Foobar2000有什么优势吧:
- 各种用户界面的选择。foobar2000虽然有各种用户界面设置,理论上也近乎无限了,但是始终被框在GUI的环境里面。MPD因为自身没有用户界面,用户界面要靠别的软件来提供,也就是说用户界面真正实现了无限平台化。GUI上我们可以有基于GTK的,基于Python的,基于Perl的,基于Qt的,基于Java的,甚至是终端界面,FF扩展……只要能想到的,就没有什么不可能的。
- 用户界面的统合。MPD可以由各种类型的客户端进行控制和查看,也就意味着同时可以在不同的界面上控制并且查看播放器情况。foobar2000的界面设计之妙已经无人能敌,但是MPD则可以把各种客户端合并起来一起使用,每个客户端所带的特色全部吸收进去,恐怕Foobar2000还是要让一步的吧。
- 网络化。C/S结构的优势自然就是C和S分开来了,也就意味着C和S之间的联系方式是完全自由的,这就自然而然地想到了通过网络来连接它们。 MPD运行的时候会占用一个网络端口,客户端只要连接到该端口,就可以控制MPD了,只要有网络就可以。这样的话应用方面的优势就很明显了——比如说我的 MPD在一个服务器上面,管理着服务器上的大量的音乐,服务器连接着家庭音响装备,然后我只要有一个客户端软件——无论是服务器本身上面的,还是另外一台 局域网上的计算机上的,甚至是外网一台计算机,甚至是Iphone/Android——只要有网络相连,都可以随意控制它的播放,就像是在本地播放一样。
- 多个输出端。既然是专门用来处理音频播放的,自然少不了处理方面的神功能。MPD可以输出到多个设备中,就算是本地的设备也详细到设备ID,音量 控制依赖等等。另外也可以输出到其他的设备,比如http Stream什么的……别小看这个功能,有了这个再结合远程客户端功能,就真正地实现了远程控制和远程播放,远程收听,就等于把音乐放到了云上。我有一段时间在学校里用SSH+Ncmpcpp控制MPD,然后用audacious/foobar2000远程收听家里的音乐,为我的上网本省出了不少放音乐的空间和整理音乐的精力。
综上所述,C/S结构的播放器的最大优势在于C的灵活性和C/S 连接的灵活性。就算C再怎么按照时代的发展进化,S依然不需要进行大幅度的更改,可谓是真正的Unix系软件特色。
安装方法
很多人估计都会觉得MPD非常难折腾,不过实际上还是很简单的——只需要修改一个设置文件就可以了。这里简单描述一下在Ubuntu上安装MPD的方法:
sudo apt-get install mpd mpc mpdscribble
这条命令用来安装mpd和它的命令行客户端mpc以及把mpd歌曲推送到last.fm的mpdscribble。对,就是一条命令。
sudo cp /etc/mpdconf ~/.mpdconf
默认mpd载入的是etc里面的设置文件,而且是root权限运行,我们不需要这样,因此复制到自己目录下。
cd ~ && sudo chmod a+rw .mpdconf
因为复制下来的设置文件只有root权限,所以改变权限使得自己的用户能够读写。
然后用自己喜欢的编辑器编辑.mpdconf文件。建议在自己的home目录下新建一个.mpd的文件夹,然后把conf上面需要定义的几个文件夹 ——playlist_directory,db_file,log_file,error_file,pid_file,state_file等等,全 部改成你新建的.mpd目录下(plylists需要自己新建文件夹)。然后把Music_directory改成自己存放音乐的目录。
再修改output选项。mpd默认使用的是alsa驱动,但是默认设置下会出现独占声卡的现象。于是注释掉alsa里面定义设备的那段(h:w什么的那个),后面基本上没什么问题,个别需要的话把音量控制里面的PCM改成Master,保存退出。
保存退出之后,在编辑/etc/mpdconf文件里的user改成自己的用户名。最后停止自动运行的mpd,再启动自己的mpd,扫描音乐文件夹,大功告成。
sudo /etc/init.d/mpd stopmpd --create-dbmpd
另外还有一个问题就是装好mpd之后,他会在每次开机之后会自动运行root权限的mpd,我们不需要这样,所以取消他的自动运行:
sudo gedit /etc/init.d/mpdsudo gedit /etc/defaults/mpd
把这两个文件里的auto_start改成false即可。
最后用命令行客户端mpc检查一下是否能用。
mpc listall | mpc addmpc plaympc stop
第一条命令是列出mpd上扫描到的所有音乐,然后把这些音乐全部添加到播放列表中,第二行就是播放音乐了。mpc提供了非常基本而又全面的命令行命令,有兴趣的人可以到它的manpage上查看其功能。有时候做脚本的时候还是挺好用的:
man mpc
使用MPD —-各种客户端选择
终于可以放一张截图了么……这是目前我用的所有客户端的合照什么的(不包括mpc),比较流行的客户端有gmpc,Sonata以及CUI界面的 ncmpcpp等,另外个人比较喜欢用firefox的扩展media player minion。另外pidgin的music tracker插件和歌词显示软件OSD Lyrics都支持MPD,因此MPD的多个Client给我们的体验还是非常完美的。我们一个一个来:
Media Player Minion
就像前述,是一个Firefox的扩展。连接成功之后驻留在状态栏上,拥有基本的播放控制。打开主界面之后更是有了很完善的媒体库管理和播放列表管理,播放曲目详细信息查看等,操作界面也是比较友好的。在任意选中曲目上点击右键就可以有可完全自定义的右键菜单,可以进行minion的基本控制,mpc的命令控制和脚本编辑。另外在状态栏上也支持弹出播放曲目信息和快速播放列表切换,可以快速切换mpd服务器和输出模块。还有,这个客户端是目前唯一一个可以把本地歌曲目录下的图片文件作为封面的客户端,其他都是自动到网上搜索什么的。所以这个就变成了我的主要客户端之一。
GMPC
GMPC是Gnome Music Player Client 的缩写。也算是一个比较老牌的客户端了。基本功能非常齐全,比较赞的一个特点就是和Gnome的相对完美的统合性,然后就是歌曲信息的网络化(不同于别的 客户端是从amazon下载封面,他是用last.fm下载封面以及歌手信息,相当于foobar2000的biography)。另外它允许有多视图的 媒体库管理,比较适合拿来管理用。
Sonata
比较经典的一个小巧的MPD客户端。除了小巧,可以有迷你模式之外基本上没有什么特点(啥)好像歌词显示方面比较优秀什么的……呃,我也想不起来了orz
ncmpcpp
主力军之一。CUI界面,反应快到爆,完全的键盘操作,多种视图快速切换,每种视图都有一个功能,功能上可以算是目前所有的mpd客户端之中最强 的。另外由于是CUI界面,因此在远程SSH的时候特别有用,与SSH的L参数进行组合的话就可以一条命令实现远程控制+远程播放的效果。只可惜全文本界 面,没有封面等比较视觉化的元素,不过他的颜色方案也比较到位,大力推荐。
MPD各种使用技巧
第一个问题就是显示正在播放曲目的问题。很多人都希望在IM上显示自己正在听什么歌曲进行分享,在Twitter上显示自己正在听什么歌曲等等。
如果是Pidgin的话非常简单,只要安装一个pidgin插件Musictracker,然后就在它的选项中设置即可。可以直接覆盖状态信息,也 可以通过/np命令直接贴到聊天窗口上,twitter的话直接贴到twitter机器人比如twitalker上,因此可以算是最方便又是最强大的一 种。但是别的客户端比如Gajim,twitter本地客户端等等,要怎么办呢?其实我们可以通过写脚本来解决这个问题。其实说是脚本其实也很简单,就一 行:
mpc | head -n 1 | xsel -b -i
这是三条命令的组合。第一条先用mpc显示当前播放信息,head命令用来提取前面输出的信息的第一行,xsel把提取出来的信息添加到剪贴板上。ubuntu默认没有xsel,你可以到源上去安装它:
sudo apt-get install xsel
这样就大功告成。用compiz的话直接设一个快捷键,等到你想共享的时候按一下快捷键,然后在向粘贴的地方粘贴一下就可以。默认是title - artist的结构,当然你也可以通过mpc的一些额外参数进行修改。具体就参考一下mpc的manpage吧。
总的来说,别看mpc这个客户端简简单单,你要知道,命令什么的最大的优势就是可以随便插入到bash脚本之中,只要了解他,你的视野便能开拓不少。结合MPC和bash脚本可以有很多种技巧,我现在也就不展开了。
总结
通过折腾MPD,我第一感觉就是Linux上的软件从根本上和Win上的软件有着很大的区别:用户群的不同。用户群不同必定会伴有用户群需求的不 同,Win上的软件,无论是Total Commander,还是Foobar2000,还是MirandaIM,都有着“功能全面甚至无限而又相对集中,核心用户较多”等特点,而Linux的 软件则是“功能范畴比较散,单个软件功能单一但是可以与各种别的软件联动,形成分布式结构”的特点,没有核心用户,只有“有需求的用户”,然后根据自己的 需求“组装自己的软件”。可能这个就是开源软件带来的一个非常显著的现象吧。
前几天有个用mac的朋友和我说,哪个软件能够完成我的工作最有效率我就用哪个,就是这么简单的道理。我觉得这个道理虽然简单但是其实还是很复杂, 复杂在于这个“最”字。以前我也说了,使用“最”的时候需要事先定义你的比较范围,就像某个三个代表一样,“最广大人民的根本利益”,人民的范畴和利益的 范畴完全没有定义,就可以让某party自由定制,而使用软件我觉得也是一样的。最有效率的范围就是“在我所认识的所有软件中”,而如果光是使用特定平台 上尤其是苹果的平台上,你的认识是极其有限的。我的意思是,如果我们要用“最”有效率的方法完成自己的工作,我们更多的还是需要寻找“最”,不断扩大自 己”所认识的软件“的范围,不停地更新自己使用软件的方式以及习惯,而不是为坚决使用一系列的软件寻找藉口。
最后摘抄一个六弦アリス的《新興宗教「万華教」》里面的一段歌词:
何が正しいのかと問う 理は数多が常
量るべきはその本質 多数決など論外
试问何为真理 世理常于多数者手中
但我们应衡量其本质 少数服从多数纯扯淡















