[原创]xmms2:现阶段唯一完美支持cue+ape的播放器(ape,wma,mpc等各种格式通吃+lastfm播放)

Totem,mplayer,sopcast,realplayer,bmp
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

[原创]xmms2:现阶段唯一完美支持cue+ape的播放器(ape,wma,mpc等各种格式通吃+lastfm播放)

#1

帖子 xiechy » 2007-10-06 10:40

作为个人觉得最好用的播放器,xmms2有以下几点优点:
1、资源消耗小
本身不需要图形界面,作为后端daemon形式存在,非常省资源。

2、通用型播放器,从音乐格式到输出到tag元数据库管理到网络收听,音乐社区功能,无所不包。
音乐格式:aac,avcodec(asf,3gpp……算了,其实这个就是mplayer的ffmpeg计划,它能支持的,xmms2就能),flac,mp4,wma,asx,mad(for mp3),musepack(mpc),faad,vorbis(ogg),当然,还有我们花很多时间去“转码”的ape格式。
另外,支持jack服务,所以也可以间接的支持midi播放。

元数据库管理:用sqlite做后端,支持媒体库,收集库,播放列表等不同级别的媒体文件整合。内部使用sql搜索,管理
及其方便,没有概念的可以想象成为没有图形界面的amarok。支持保存播放列表,支持m3u。
另外,对于中文用户常见的乱码问题,支持id3v1使用非标准编码。所以也没有了所谓的转tag编码的麻烦。同时支持id3v2

网络收听:支持mms,使用curl库来支持其余http之类的流式播放,也支持icecast的ogg流媒体,支持rss标签,支持lastfm和lastfm meta,支持samba。支持gnome的vfs系统。

输出:支持alsa,oss,diskwrite。
数据传输:支持tcp,也可以unix ipc通信,所以可以很灵活的指定。客户,服务器结构,但是是作为一个user daemon的形式存在,所以可以不需要root的服务启动权限。同时支持replaygain(自动调整不同音乐文件的音量),当然,如果以后有什么音效插件,也可以在这一步“传输”中filter一下~

语言binding:本身自带一个简单的命令行客户端xmms2,但是有ruby,python,c++等各种语言binding,所以客户端的建构是很容易的。

3、总的来说,xmms2的模块化作的非常成功,解码,传输数据,输出,数据库,每一步都是以插件的形式存在,所以整合新功能很容易,而且没有构建在一些臃肿的东西上,保持了精简和高效(例如bmpx就绑死在了gstreamer上,可是我实在是不喜欢gstreamer的臃肿,所以只好放弃),可以说,xmms2的正式发布之日,肯定就是它一统江湖的时候。现在虽然还在开发过程中,但它能给我们的体验,已经超越了绝大多数的播放器。也许mpd可以和它相抗衡,但是mpd的方式,要增加功能实在是不如xmms2方便。而且现阶段的xmms2已经超越了mpd的功能太多,也许只有mpd2能够和xmms2一争长短。

关于xmms2的使用,yhlfh兄已经有篇很好的文章了,这里我就不废话了。
viewtopic.php?t=71986&highlight=xmms2

要讲讲的是ape的播放,ape格式是monkey-audio.com的非自由的格式。在04年有过一个mac-port(monkey audio codec)的项目,但是这个项目很快由于版权的原因在sf上被撤了下来。现在所有的转码、播放插件等都是基于这个项目的,最后的版本是3.99-u4-b4吧,我以前做过deb包,后来又有不少的兄弟也做过,由于都是非官方的,所以有的叫monkey-audio,有的就叫mac,或者是直接叫libmac什么的,反正就是喜欢叫什么名字就叫什么吧,看做包的人的兴趣。由于源里的xmms2肯定是没有编译mac支持的,所以我们要自己编译。

由于xmms2不是使用的通常的autotools工具链来作编译系统的,它使用一种特殊大的waf编译系统。只要我们系统中有了mac-port的开发包,它自动就会加上mac的支持,所以,你要检查的是:你的系统中有没有这样的文件:
/usr/include/mac/*
有这个目录,说明你以经装上了。那么直接

代码: 全选

apt-get builddep xmms2
apt-get source xmms2
cd xmms2***
dpkg-buildpackage -rfakeroot
就可以完成了。
如果没有,那么,可以参考:
viewtopic.php?t=59920&highlight=ape

xmms2已经内建了lastfm的插件,可以处理lastfm://协议。我们只要在firefox中设定好关联就好了。
在自己的bin/的path中添加脚本:
#!/bin/sh

代码: 全选

xmms2 clear
xmms2 add $1
xmm2 play
about:confg
新建字符串键

代码: 全选

network.protocol-handler.app.lastfm
值为你刚才建好的这个脚本,就可以在线听lastfm音乐广播了这样再也不担心自己听的都是老歌~out于时代鸟。

作为开发中的版本,现在released的是0.2DrJekyll版本。这个版本如果没有下面的patch,那么可以播放ape,也可以正确识别cue中的标签信息,但是无法对cue中的每首歌自动寻址。也就是说,仍然是每首歌都在ape文件的开始播放。下面是修正这个问题的补丁:(gentoo的ebuid和补丁我已经放到sir的gentoo版了。雕,xhy,ib你们就直接去那吧~:D)

代码: 全选

commit cee22c84e6be8ae4c89c333695fa5b50c63ea036
Author: Florian Ragwitz <rafl@debian.org>
Date:   Sun Sep 30 00:15:57 2007 +0200

    BUG(1637): honor startms.

diff --git a/src/xmms/output.c b/src/xmms/output.c
index 6f5933c..4f5e0b1 100644
--- a/src/xmms/output.c
+++ b/src/xmms/output.c
@@ -251,6 +251,7 @@ typedef struct {
 	xmms_output_t *output;
 	xmms_xform_t *chain;
 	gboolean flush;
+	guint startms;
 } xmms_output_song_changed_arg_t;
 
 static void
@@ -285,6 +286,21 @@ song_changed (void *data)
 	if (arg->flush)
 		xmms_output_flush (arg->output);
 
+	if (arg->startms > 0) {
+		xmms_error_t err;
+		xmms_error_reset (&err);
+
+		XMMS_DBG ("Got startms. Trying to seek to %u.", arg->startms);
+
+		arg->output->filler_state = FILLER_SEEK;
+		arg->output->filler_seek = xmms_sample_ms_to_samples (arg->output->format, arg->startms);
+		g_cond_signal (arg->output->filler_state_cond);
+
+		if (xmms_error_iserror (&err)) {
+			XMMS_DBG ("Failed to seek to startms");
+		}
+	}
+
 	xmms_object_emit_f (XMMS_OBJECT (arg->output),
 	                    XMMS_IPC_SIGNAL_OUTPUT_CURRENTID,
 	                    XMMS_OBJECT_CMD_ARG_UINT32,
@@ -404,6 +420,8 @@ xmms_output_filler (void *arg)
 			xmms_medialib_entry_t entry;
 			xmms_output_song_changed_arg_t *arg;
 			xmms_medialib_session_t *session;
+			gchar *tmp;
+			gint startms = 0;
 
 			g_mutex_unlock (output->filler_mutex);
 
@@ -435,10 +453,21 @@ xmms_output_filler (void *arg)
 				continue;
 			}
 
+			if (tmp=xmms_xform_metadata_get_str (chain, "startms")) {
+				gchar *endptr;
+
+				startms = g_ascii_strtoull (tmp, &endptr, 10);
+
+				if (*endptr != '\0') {
+					startms = 0;
+				}
+			}
+
 			arg = g_new0 (xmms_output_song_changed_arg_t, 1);
 			arg->output = output;
 			arg->chain = chain;
 			arg->flush = last_was_kill;
+			arg->startms = startms;
 			xmms_object_ref (chain);
 
 			last_was_kill = FALSE;
打上补丁之后,

代码: 全选

xmms2 addpls aa.cue
此时,已经分不出cue中的每首单曲和单独的文件有什么不同了。也可以加入mlib中。
手头上没有debian,希望有兴趣的兄弟做个带上这个patch的xmms2。

xmms2现有插件:
A、解码器
* FLAC
o FLAC Decoder
* MOD
o Modplug Decoder
* Monkey's Audio
o Monkey's Audio Decoder
* MPEG-1 Part 3 Layer 3 (MP3)
o MAD Decoder
* MPEG-4 Part 3 (Advanced Audio Coding - AAC)
o FAAD Decoder
* Musepack
o Musepack Decoder
* Ogg Vorbis
o Vorbisfile Decoder
* SID
o SID Decoder
* WAVE audio files
o Wave Decoder
* Windows Media Audio
o WMA Decoder
B、播放列表

代码: 全选

    *  ASX - Advanced Stream Redirector xform, reads ASX playlists (made popular by Windows Media Player)
    * cue - Cuefile xform.
    * HTML - HTML xform.
    * m3u - M3U xform.
    * pls - PLS xform.
    * RSS - RSS xform, loads RSS playlists, like podcasts.
    * XSPF - XML Shareable Playlist Format xform. 
C、传输:
* CDDA - Compact Disc Digital Audio xform, reads audio CDs.
* cURL - cURL xform, reads http, https, ftp, and other streams.
* DAAP - Digital Audio Access Protocol xform, reads from DAAP shares (made popular by iTunes)
* file - File xform, reads files from the local filesystem.
* gnomevfs - GnomeVFS xform, uses Gnome's virtual filesystem to access many types of media.
* lastfm - Last.fm xform, reads Last.fm streams.
* MMS - Libmms xform, reads from MMS (Microsoft Media Services) streams.
* samba - Samba xform, reads from SMB shares.
D、元数据管理:
Metadata xforms strip out metadata like ID3 tags and vorbis comments from streams.

* icymetaint - ICY xform, extracts info from ICY headers in ShoutCast streams.
* ID3v2 - ID3v2 xform, extracts ID3v2 tags.
* lastfmeta - Last.fm xform, extracts info from Last.fm streams.
* ofa - Libofa xform, MusicDNS fingerprinting.
E、音效:
Effects modify the raw audio data before it is sent to the output.

* equalizer - Equalizer xform, to tune different frequency bands to taste.
* replaygain - ReplayGain xform, normalizes audio according to settings stored in the file.
* vocoder - Vocoder xform, produces a cool vocoder effect.
:D
上次由 xiechy 在 2007-10-08 18:20,总共编辑 4 次。
头像
jupengfei
帖子: 1258
注册时间: 2006-10-31 11:02
来自: Beijing

#2

帖子 jupengfei » 2007-10-06 10:54

audacious也不错
上述功能也都具备
图片
我也喜欢蓝妹妹......
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#3

帖子 xiechy » 2007-10-06 11:13

jupengfei 写了:audacious也不错
上述功能也都具备
audacious支持mms?没有吧~支持icecast?也没有吧,支持内置数据库管理?也没有吧~支持lastfm?我可说的不是一个scrobbler ~是lastfmplayer那样的效果;还有samba?还有网络播放?

audacious是从xmms算是fork出去的项目,除了gtk+以外,其他的xmms的缺点都有。可以说,bmp,bmpx,audacious这一类从xmms中fork出去的项目,只能是在xmms2没有完善之前临时性的修补,没有架构上的优势。最终是会被淘汰的。
lzqhhx
帖子: 106
注册时间: 2007-01-03 11:53

#4

帖子 lzqhhx » 2007-10-06 11:35

呵呵。linux下的音乐播放器效果确实不大行,不过我不在乎,反正我的本本音箱烂。。。。
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#5

帖子 xiechy » 2007-10-06 11:57

lzqhhx 写了:呵呵。linux下的音乐播放器效果确实不大行,不过我不在乎,反正我的本本音箱烂。。。。
音效和alsa/oss有关,但是其实现在已经并不差了,只是所谓的那些“特效”不多。以前用了xmms的修改过的立体声特效,其实效果也很好的,不过这是“味精音乐”,并不值得夸耀。

还有,win下像xmms2这样优秀的播放器,说实话,我觉的还没诞生吧。
firef
帖子: 20
注册时间: 2007-07-22 1:05

#6

帖子 firef » 2007-10-07 13:52

我也是最近才发现了这个好东西,挺不错的。 可惜不支持tta和wavpack。
头像
reulis
帖子: 156
注册时间: 2007-05-26 11:50

#7

帖子 reulis » 2007-10-07 13:58

xiechy 写了:
jupengfei 写了:audacious也不错
上述功能也都具备
audacious支持mms?没有吧~支持icecast?也没有吧,支持内置数据库管理?也没有吧~支持lastfm?我可说的不是一个scrobbler ~是lastfmplayer那样的效果;还有samba?还有网络播放?

audacious是从xmms算是fork出去的项目,除了gtk+以外,其他的xmms的缺点都有。可以说,bmp,bmpx,audacious这一类从xmms中fork出去的项目,只能是在xmms2没有完善之前临时性的修补,没有架构上的优势。最终是会被淘汰的。
呵呵,其实够用就好了,我机器上音乐全是ape和flac格式的,一个xmms加上mac解码器就够了。
---------------------------------------------------------------------
我终身奋斗的最低革命纲领:农妇__山泉__有点儿田
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26

#8

帖子 windwiny » 2007-10-07 21:18

它没有图形界面,怎么用噢??
头像
wth123456
帖子: 234
注册时间: 2006-12-07 17:32

#9

帖子 wth123456 » 2007-10-07 21:37

图也贴几张看看啊。
还有中文支持好不好的?
andrew_t
帖子: 614
注册时间: 2006-12-14 3:00

#10

帖子 andrew_t » 2007-10-07 21:57

带cue的flac或者ape支持如何?我用amarok感觉总是对cue支持太差,定位不准确
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#11

帖子 xiechy » 2007-10-07 22:20

windwiny 写了:它没有图形界面,怎么用噢??
有图形客户端,很多,从网页,python,gtk,qt,
各种都有,但我没有试过,我自己用命令行原配客户端就觉得很方便了。
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#12

帖子 xiechy » 2007-10-07 22:22

wth123456 写了:图也贴几张看看啊。
还有中文支持好不好的?
它是daemon~说过了的,客户端只是浮云而已。
头像
依寻依然
帖子: 1617
注册时间: 2006-10-31 14:49

#13

帖子 依寻依然 » 2007-10-07 22:27

个人觉得还是应该做一个功能较全的但是占用资源少的小图形界面。
新世纪的软件也应该有新世纪的时尚品位
Borders are meant to be crossed
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#14

帖子 xiechy » 2007-10-07 23:22

andrew_t 写了:带cue的flac或者ape支持如何?我用amarok感觉总是对cue支持太差,定位不准确
对cue等playlist的支持是用毫秒计算的。
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#15

帖子 xiechy » 2007-10-07 23:24

依寻依然 写了:个人觉得还是应该做一个功能较全的但是占用资源少的小图形界面。
新世纪的软件也应该有新世纪的时尚品位
客户端有很精简的,也有很繁复的,可以自己选。客户端浮云。
回复