首页 > 学院 > 手机知识 > 正文

自制联想i966手机音乐播放列表

2024-06-10 11:51:08
字体:
来源:转载
供稿:网友

    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原创,转载请声明谢谢!)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选