i966电话可以支持播放MP3和WMA两种格式的声音文件,并且可以连接蓝牙立体声耳机。可是,不知产品设计的时候出于什么考虑,在音乐播放方面出了纰漏。
我喜欢在锻炼身体的时候,听评书或者小说的音频文件。你知道,运动的时候,最好就是带着蓝牙立体声耳机——因为没有线的束缚很方便。但是i966的播放器跟了我很大的打击:
1、音频播放器,不支持播放单个子目录的音乐文件!这使得每次要在几百个都放在music目录下的音频文件中寻找自己想要的那一个非常费力。
2、那好,你不是支持播放列表吗?咱不怕麻烦建立播放列表!小说的音频文件一般都会压缩成比较小的WMA格式,可是发现建立播放列表的功能里面竟然无法增加wma文件!MP3文件也有见不到的。(明显是BUG)。
3、咱不用播放器,在文件夹里面不是可以直接播放音频文件吗?咱不怕费力,每次都找呗。可是又发现了致命的毛病:在文件夹中直接播放音频文件竟然不支持蓝牙耳机!每次声音都是从扬声器中传出来的(不知道设计的时候出于什么考虑?),最要命的是,文件夹中直接播放音频使用的简易播放器不能实现快进,在听一集半小时的评书一半的时候,突然来个短信,整个就停了!你还要从头开始再听一次嘛?我完全疯了!
真的就这么难吗?
我想了几种方案解决这个问题,首先可以肯定的是,我必须使用多媒体功能里面的音乐播放器,因为文件夹里面的简易播放器实在没法弄。于是就要想办法让前者支持wma的播放列表。否则,全都转换为MP3文件,占用空间太大,而且选择歌曲也忒不方便了!(再鄙视一下不支持播放文件夹的设计!)。所以我决定还是看看能不能自己生成播放列表,让播放器支持我的需求!
一、首先要分析i966的播放列表。
我建立了一个小的播放列表,发现是在手机内存的音乐目录下,产生一个叫做XXX.lst的文件。于是传到电脑上分析,一看,并非我想象的文本文件,是一个二进制文件。而且还是编码过的。通过列表中的几个英文歌曲名,我经过试验,终于搞清楚的它的结构:每条歌曲名占152个字节固定长度,最前面2个字节是表示音乐存放的位置,01表示在手机内存,02表示在存储卡上面,在后面跟随着是utf-8(ucs-2)编码的歌曲名称(一看就是高级语言用序列化写的文件)。文件结尾,跟一个文件结束符3E。
二、实验
我必须验证一下设计师在设计播放列表的时候不支持WMA是忘了,还是真的另有原因!于是我在UltraEdit手工编辑了一个播放列表,带有WMA文件的,传到手机上实验,支持得非常好!这下就放心了
三、写程序!
知道了文件格式,写程序就简单了,我本来想写一个Windows程序给大家共享,可后来想,这些明显的问题,也许厂家下个版本的升级就会解决了。就不费劲了。还是用perl写命令行脚本好了。好在perl语言对unicode支持得相当好!我写的源代码就不全列出来了,其实就是读一个编辑好的文件,然后转成一条条的unicode二进制文件保存起来。其中转换部分的代码如下:
foreach $inline (@in_file)
{
chomp($inline);
@line = split(/,/ , $inline);
if($line[0] eq "1")
{
$mem = "\x00\x01";
}
else
{
$mem = "\x00\x02";
}
$songname = $line[1];
$songname = decode('gb2312',$songname);
$songname = encode('ucs-2',$songname);
$namelen = length($songname);
$zeronum = 152 - 2 - $namelen;
print OUT ($mem.$songname);
for($i=0;$i<$zeronum;$i++)
{
print OUT ("\x00");
}
print $inline."\n";
}
print OUT ("\x00\x3E");
close(OUT);
我这个程序具体用法是这样的:用记事本编写一个文本文件:每一行代表一个曲目,前面是1或者2,表示存储位置,1是手机内存,2是存储卡。隔一个逗号,接下来是音频文件名。看起来像这样子:
2,邪兵谱 (01).wma
2,邪兵谱 (02).wma
2,邪兵谱 (03).wma
2,邪兵谱 (04).wma
2,邪兵谱 (05).wma
2,邪兵谱 (06).wma
2,邪兵谱 (07).wma
2,邪兵谱 (08).wma
。。。
存成“邪兵谱”文本文件,最好不要扩展名。
然后运行程序:
开始-》运行-》cmd进入DOS窗口
C:\Documents and Settings\My Documents\>perl playlist.pl 邪兵谱
Create a playlist for lenovo i966 phone
(c)200802 by XXX
2,邪兵谱 (01).wma
2,邪兵谱 (02).wma
2,邪兵谱 (03).wma
2,邪兵谱 (04).wma
2,邪兵谱 (05).wma
2,邪兵谱 (06).wma
2,邪兵谱 (07).wma
2,邪兵谱 (08).wma
Output to : 邪兵谱.lst
C:\C:\Documents and Settings\My Documents\>
然后把生成的邪兵谱.lst文件传到手机内存的music文件夹下面即可。进入播放器,按选项选择播放列表,哈哈!全都有呢!这下子再也不怕听着听着半截来短信了!因为这个播放器支持后台播放和自动恢复功能!
我们可以在电脑上准备好大量音乐文件,使用"dir > XXX.txt"管道命令可以很方便的生成播放列表输入文件,经过简单编辑就可以转换了,但是要注意,文件名要跟实际手机上的一样啊。
我这个脚本可以编译成.exe文件免费提供给大家,有需要的朋友可以留下电子信箱给我。
(AD209原创,转载请声明谢谢!)