今天看到胡里胡涂发布了AudioPlayer汉化版
。这个插件很不错,简洁,不花哨。
胡里胡涂说这个插件有一点问题,有些MP3文件的tag信息显示不正常,即使反编译了Flash文件也没法解决。我看了一下那个MP3文件,tag里用的BIG5编码。我给转成GBK编码,上传测试,无效;把tag格式由ID3v1换成ID3v2,无效;使用UTF-16编码的ID3v2,无效;转成APEv2格式的tag,程序不支持,汗了。最后把一个地方修改了一下,可以正常显示了。

无语,不选那个复选框就好了,只是这个Flash里默认的字体太小,大概只有10px吧,中文显示看不清,起码要12px才可以。不管了,反正以后有显示不正常的,就把tag转成UTF-16的ID3v2格式,并取消选择Unsync就是了。用mp3infp
修改起tag来非常方便,不是吗?
试试看效果如何:
Update:今天仔细研究了一下这个插件。这确实是个好插件,当然也有些小瑕疵。
到Audio Player主页下载插件后,解压得到audio-player.php文件和audio-player目录,将这两者上传至WordPress的plugins目录,到插件页面激活。这时插件已经可以使用了,在文章里写入[ audio:http://yskin.net/wp-content/uploads/audio/曾宝仪-专注.mp3],发布出来就可以看到效果了。
下面说一下Audio Player选项页里各个选项。好像汉化者翻译的不怎么样,估计他最终也没有弄明白"enclosures"是什么意思,如果把写版权声明和责任说明的时间多花点在汉化上也许会更好些,嘿嘿。 /023
- 第一项是MP3文件默认存放的路径,插件推荐是/audio,而我设置成/wp-content/uploads/audio。这个很好理解,如果你写了这样的代码:
[ audio:曾宝仪-专注.mp3],只有文件名而没有完整的路径,那么插件会到这个默认目录中去查找这个文件。 - 第二项是插件的使用方式。三个选项分别是使用
[audio]标签、当发布podcasting时添加一个enclosures自定义域、替换文章内所有链接到MP3文件的链接。一般使用第一种即可。 - 第三项是在站内所有的播放器播放时在前后分别插入一段音频。这个也只对podcasting有用吧。
- 第四项是在feed中的显示选项。你可以选择在feed中音频的显示方式。你可以选择显示MP3文件的下载链接,或者什么都不显示,或者一段提示,请浏览者到文章页面来听这段音频。我觉得在feed中直接显示播放器也应该是可以的,可是这个插件就是这么设计的。
- 第五项是调整播放器显示界面各部分的颜色。下面有一幅图片详细说明每个选项具体对应的位置,你在调整各个部位的颜色的同时可以立刻在下面看到显示效果,真是非常的方便。这些设置都是作为播放器的默认值,你也可以直接在调用播放器的代码里设置各部分颜色,它们将只用于此次调用,并覆盖掉默认设置。
[audio]标签的使用方法有多种,你可以直接使用[ audio:http://yskin.net/wp-content/uploads/audio/曾宝仪-专注.mp3]这样的完整链接形式,也可以使用[ audio:曾宝仪-专注.mp3]这样的简短形式,插件会在默认目录下查找文件。你还可以放置多个MP3文件,只需要用逗号把他们分隔起来,比如[ audio:a.mp3,b.mp3]。不过,这个插件没有前一首,后一首的按钮,也没有播放列表,所以播放多首歌曲时不是很方便。没办法,它是个轻量级的播放器嘛。你还可以在调用播放器的时候加上参数,在选项页允许设置的各部位颜色这里也同样可以设置,具体可以参照软件主页中的Runtime options部分。还有两个额外的参数:autostart和loop,看名字就知道,前一个是自动播放,后一个是循环播放。这两项默认值都是no,使用时只要把他们设成yes就可以了:[ audio:a.mp3|autostart=yes|loop=yes]。需要提醒一句的是,音频文件的自动播放有时会令人反感。
另外,在文章以外其实也可以使用播放器,只要把代码写入一篇文章,发布后得到生成的HTML代码,再复制到模版里就可以了。播放的MP3文件的URL也可以在这段HTML代码里找到,如果听到别人的Blog中播放的音乐不错的话也可以用这个方法来找到MP3文件的URL然后下载。URL在"soundFile"字样后面,不过被HTML实体化了,可以用UEStudio解一下码。
Update2:今天胡里胡涂又说要研究研究,我也就跟着再研究一下。Flash这个东西我不熟,是胡里胡涂帮忙把swf反编译成fla的。也许是反编译器不太好,胡里胡涂说反编译后再编译成swf就不能工作了,我也就只能大概看看fla文件。Flash里有个ActionScript,也就是个类似于Javascript的脚本语言。没有Flash软件,直接用UEStudio打开fla文件看里面的脚本,凭着以前C语言的基础,勉强能看懂一点。(这说明了C语言是多么的重要,学会了C,再学一点C++里类的知识,那么JavaScript、PHP什么的全都可以迎刃而解。C语言真是祖宗级的语言啊。)感觉上ActionScript就是借用了JavaScript的语言规范,很多地方都很象,比如定义类的函数,和C++区别很大。大概看了一下,读取ID3 tag直接用了这样的语句:
emff.id3Tags[_l1.index].data[0] = _l1.id3.artist;
emff.id3Tags[_l1.index].data[1] = _l1.id3.songname;
去网上查了一下,Macromedia网站的文档里说这是Flash提供的功能。Flash读取MP3文件时已经解析出ID3标签,并存在这些变量里。查了下这个"emff",指的是Easy musicplayer for Flash
,Audio Player 1.0的更新记录里也提到了它是基于这个emff播放器的。
也就是说,读取ID3 tag是由Flash进行的,那么Audio Player对各种ID3标签的兼容性也就等于Flash对于各种ID3标签的兼容性。我对Flash不太了解,大概分析一下吧:fla文件里是ActionScript源代码,编译后形成swf文件,然后浏览器读取后交给Flash Player播放出来。我想兼容性应该取决于Flash Player,因为我觉得ActionScript是解释执行的。不过swf文件里也许会标记出自带的代码所使用ActionScript版本,这也会影响兼容性吧。上面提到的Macromedia网站的文档里说,Flash Player 6添加了对ID3v1的支持,Flash Player 7添加了对ID3v2的支持,包括2.3和2.4。《ActionScript 3.0 的 Sound类》一文中提到:“MP3声音文件可包含ID3标签,ID3标签提供文件的元数据。如果一个你使用Sound.load()方法加载的MP3文件包含了ID3标签,你可以查询这些属性。只有使用UTF-8编码的ID3标签能够被支持。Flash Player 9以及后续版本支持ID3 2.0标签,特别是2.3和2.4。”后面一句自然不可能,怎么会从Flash Player 9才开始支持呢。“只支持UTF-8编码的ID3标签”也是不正确的,ID3v1里没有确定编码方式,而ID3v2里只有2.4可以写入UTF-8,之前的版本只能用UTF-16。
那么,很明显,Flash读取ID3标签时,只支持ISO 8859-1和UTF-16编码格式(对于ID3v2.4标签多支持个UTF-8)。这也体现在mp3infp软件里,ID3v2里只能选择这两种编码,ID3v1里则没得选择。ID3在最初设计时,就只考虑了英语和一些欧洲国家的语言,于是用了ISO 8859-1编码方式。一般的软件比如foobar2000和Winamp迫于现在tag的混乱状态,解码tag时都是按照本地编码方式解码的,比如GBK。这也是没办法,ID3v1设计时就没有考虑到兼容性,弄的亚洲国家只好拿本地编码往里写,比如GB2312、GBK、BIG5。ID3v1标签部分又不象HTML文档那样允许在HTTP头或者HTML文档开头声明编码方式,于是造成了很大的混乱,每个地方的播放器都优先使用本地的编码方式解码,写入tag时也是以本地编码写入,这样出来的MP3文件拿到别的语言的播放器上就不能正常显示tag。Flash比较遵守ID3标准,在ID3v2的说明文档的ID3v2 frame overview一节里也提到,tag的编码要么是ISO 8859-1编码方式,要么是16-bit unicode 2.0,也就是UTF-16,而且必须加BOM,以便区别于ISO 8859-1。所以,Flash读取ID3标签时,如果是ID3v1,就直接使用ISO 8859-1方式解码,于是所有第一个字位为0的字节被认为是ASCII码,为1的被认为是西欧字符,不会象Winamp和foobar2000那样用本地编码比如GBK解码。如果是ID3v2,并且编码方式是ISO 8859-1的,和前面的ID3v1一样。乱码就是这么出来地。如果是UTF-16或者ID3v2.4的UTF-8,则可以正常解码,不会产生乱码。
关于"Unsync",在mp3infp作者的网站上的这篇文章有一段介绍,不过是日文的。在这个页面也有一段介绍,把Unsync翻译成“非同期化”,不过也是日文的。用Google翻译翻成英文,再扛上糍粑看了半天,看的晕晕乎乎的。最后在ID3官方网站看到了ID3 tag version 2.3.0:5.The 'unsynchronisation scheme'。Unsync具体的行为里面讲的很清楚,不过这一段开头就讲到:"The only purpose of the 'unsynchronisation scheme' is to make the ID3v2 tag as compatible as possible with existing software. There is no use in 'unsynchronising' tags if the file is only to be processed by new software. Unsynchronisation may only be made with MPEG 2 layer I, II and III and MPEG 2.5 files."也就是说只是为了满足一些老软件的特殊需求,如果你用的播放器都是比较新的软件则无须使用这个功能,而且这个功能也只能用于MPEG 2和MPEG 2.5的文件。
呃,稍微解释一下,所谓MP3文件,指的是MPEG 1 layer Ⅲ, MPEG 2 layer Ⅲ, MPEG 2.5 layer Ⅲ这三种文件,而一般我们接触到的扩展名为MP3的文件,90%是MPEG 1 layer Ⅲ格式,其余的则是另两种MP3格式,还有一些是MP2格式的。所以这个功能大多数MP3文件上都不能用,遇到的MP3文件都把这个功能关闭就可以了。
所以,上传到Blog上用Audio Player插件播放的MP3,如果是英文的则无所谓,只要注意一下ID3读取的顺序,如果同时有ID3v1和ID3v2两个tag,则ID3v2优先读取。如果是中文的,则需要把正确的信息写入ID3v2 tag里,并把编码方式选为UTF-16或者ID3v2.4的UTF-8,并取消选择Unsync。至于在本机收藏的MP3文件嘛,我从两三年前接触了foobar2000以来,就一直让收藏的MP3文件只留一个APEv2 tag,这样就非常方便,尤其是更新tag的时候。另外还要提到一点,ID3v1和APEv2标签都是保存在文件尾部的,ID3v2标签则是直到v2.3都是保存在文件头的,V2.4则可以选择保存在文件头或文件尾。ID3v2这样的保存方式造成一个问题,就是更新tag的时候,软件必须修改文件头,所以整个文件都要被读出来,修改后重新写回硬盘,造成更新tag速度很慢。而ID3v1和APEv2标签,由于在文件尾,所以更新时只要修改文件存放的最后几个扇区就可以了。再加上ID3v1标签能存放的信息很少,比如吴宗宪的“是不是这样的夜晚你才会这样的想起我”这首歌,由于ID3v1的歌名部分只能存放30个字节,而这首歌的歌名有17个字,用GBK编码存入需要34个字节,ID3v1存不下。而且APEv2标签很简练,存放的数据不是非常多的情况下,占用的空间比ID3v2少。综合起来,APEV2标签是最好的选择。
不过现在的情况下,当tag为中文时,由于Flash不支持APEv2标签,所以ID3v2是唯一的选择。而且在网络上,由于ID3v2标签在文件头,所以浏览者会很快看到歌曲名和歌手名出现在播放器界面上,不会象ID3v1标签那样,一定要整首歌曲缓冲完毕才能看到歌曲名。所以用在播放器的MP3文件我们还是尽量用ID3v2的标签吧。
另外提一下,很多人有MP3硬件播放器,也就是随身带着的那个可以听歌的小东西。那玩意也分好坏,有些比较古老的经常要求标签必须是ID3v1,因为它的解码芯片只能识别ID3v1,支持不了比较新的比如ID3v2.4格式,更别说UTF-16编码和APEv2标签了。歌词也大多只能支持lyric歌词文件,不支持tag内嵌的歌词。所以用那玩意的时候,尽量用些早期的格式比如ID3v1,免得它不认得。
好了,我所了解的都说完了,要想解决这个问题,要么刚收购了Macromedia的Adobe更新Flash Player,增加解码方式的判断,提高兼容性,虽然这样就离标准更远了,不过现在大家都是这样,大势所趋,没办法啊。要么自己注意点,尽量用ID3v2的UTF-16和UTF-8格式。字体大小的问题嘛,还是让作者解决吧。
Update3:最近好像有很多人问到Audio Player为啥不支持WMA。首先,WMA格式是小一些,在低码率的情况下,WMA格式音质无疑比MP3要好,所以WMA很适合低码率环境。以前研究foobar2000时,有一点很多人不明白,就是码率一样的情况下,文件大小基本一样。因为码率的定义就是每秒音频占用的字位数,比如128 Kbps码率的音频文件(无论是MP3还是WMA或者APE),指的是每一秒钟的声音要占用128K个bit,也就是16K字节的空间。所以,码率一样的情况下,无论哪种音频文件大小都差不多,差别只在于tag等数据,顶多差几K。
而Audio Player不支持WMA,在插件主页写的很清楚:"This plugin only plays MP3 files. This is a limitation of the Adobe Flash Player."这是受Flash播放器所限,没办法的。或许这说明Adobe和Microsoft关系不好?呵呵。所以,如果想在Blog里播放WMA文件,还是用CoolPlayer
吧。
那个swf根本不用反编译的......
人家作者放了源码在网站上的
另外这种插件我一般都是扒下来直接在网页上写代码的
自己在页面上写
还有coolplayer也一样
这样应该能节省好多资源吧
再另 我也很喜欢阿宝啊 真的是才女呢^_^
Hi! yeskin,
我按照您所说的步骤安装了Audio Player这个插件,但却没有任何动静,即使更换了模板,更换了mp3的地址也不行,实在不知何故。能否帮我看一下这个页面:
http://www.kenlee.cn/archives/116,谢谢!
奇怪了,怎么越看越像 http://www.blogthissong.com
http://www.blogthissong.com是拿Audio Player改的,连说明都是原样copy的...
为什么我用它播放速度快了好多啊~~~
可不可以把这个东西用在非WP的我BLOG上啊,有哪位大哥帮下忙。
汗 还是没整明白