i966電話可以支持播放MP3和WMA兩種格式的聲音文件,并且可以連接藍(lán)牙立體聲耳機(jī)?墒牵恢a(chǎn)品設(shè)計(jì)的時候出于什么考慮,在音樂播放方面出了紕漏。
我喜歡在鍛煉身體的時候,聽評書或者小說的音頻文件。你知道,運(yùn)動的時候,最好就是帶著藍(lán)牙立體聲耳機(jī)——因?yàn)闆]有線的束縛很方便。但是i966的播放器跟了我很大的打擊:
1、音頻播放器,不支持播放單個子目錄的音樂文件!這使得每次要在幾百個都放在music目錄下的音頻文件中尋找自己想要的那一個非常費(fèi)力。
2、那好,你不是支持播放列表嗎?咱不怕麻煩建立播放列表!小說的音頻文件一般都會壓縮成比較小的WMA格式,可是發(fā)現(xiàn)建立播放列表的功能里面竟然無法增加wma文件!MP3文件也有見不到的。(明顯是BUG)。
3、咱不用播放器,在文件夾里面不是可以直接播放音頻文件嗎?咱不怕費(fèi)力,每次都找唄?墒怯职l(fā)現(xiàn)了致命的毛。涸谖募䦅A中直接播放音頻文件竟然不支持藍(lán)牙耳機(jī)!每次聲音都是從揚(yáng)聲器中傳出來的(不知道設(shè)計(jì)的時候出于什么考慮?),最要命的是,文件夾中直接播放音頻使用的簡易播放器不能實(shí)現(xiàn)快進(jìn),在聽一集半小時的評書一半的時候,突然來個短信,整個就停了!你還要從頭開始再聽一次嘛?我完全瘋了!
真的就這么難嗎?
我想了幾種方案解決這個問題,首先可以肯定的是,我必須使用多媒體功能里面的音樂播放器,因?yàn)槲募䦅A里面的簡易播放器實(shí)在沒法弄。于是就要想辦法讓前者支持wma的播放列表。否則,全都轉(zhuǎn)換為MP3文件,占用空間太大,而且選擇歌曲也忒不方便了。ㄔ俦梢曇幌虏恢С植シ盼募䦅A的設(shè)計(jì)。K晕覜Q定還是看看能不能自己生成播放列表,讓播放器支持我的需求!
一、首先要分析i966的播放列表。
我建立了一個小的播放列表,發(fā)現(xiàn)是在手機(jī)內(nèi)存的音樂目錄下,產(chǎn)生一個叫做XXX.lst的文件。于是傳到電腦上分析,一看,并非我想象的文本文件,是一個二進(jìn)制文件。而且還是編碼過的。通過列表中的幾個英文歌曲名,我經(jīng)過試驗(yàn),終于搞清楚的它的結(jié)構(gòu):每條歌曲名占152個字節(jié)固定長度,最前面2個字節(jié)是表示音樂存放的位置,01表示在手機(jī)內(nèi)存,02表示在存儲卡上面,在后面跟隨著是utf-8(ucs-2)編碼的歌曲名稱(一看就是高級語言用序列化寫的文件)。文件結(jié)尾,跟一個文件結(jié)束符3E。
二、實(shí)驗(yàn)
我必須驗(yàn)證一下設(shè)計(jì)師在設(shè)計(jì)播放列表的時候不支持WMA是忘了,還是真的另有原因!于是我在UltraEdit手工編輯了一個播放列表,帶有WMA文件的,傳到手機(jī)上實(shí)驗(yàn),支持得非常好!這下就放心了
三、寫程序!
知道了文件格式,寫程序就簡單了,我本來想寫一個Windows程序給大家共享,可后來想,這些明顯的問題,也許廠家下個版本的升級就會解決了。就不費(fèi)勁了。還是用perl寫命令行腳本好了。好在perl語言對unicode支持得相當(dāng)好!我寫的源代碼就不全列出來了,其實(shí)就是讀一個編輯好的文件,然后轉(zhuǎn)成一條條的unicode二進(jìn)制文件保存起來。其中轉(zhuǎn)換部分的代碼如下:
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是手機(jī)內(nèi)存,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
。。。
存成“邪兵譜”文本文件,最好不要擴(kuò)展名。
然后運(yùn)行程序:
開始-》運(yùn)行-》cmd進(jìn)入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文件傳到手機(jī)內(nèi)存的music文件夾下面即可。進(jìn)入播放器,按選項(xiàng)選擇播放列表,哈哈!全都有呢!這下子再也不怕聽著聽著半截來短信了!因?yàn)檫@個播放器支持后臺播放和自動恢復(fù)功能!
我們可以在電腦上準(zhǔn)備好大量音樂文件,使用"dir > XXX.txt"管道命令可以很方便的生成播放列表輸入文件,經(jīng)過簡單編輯就可以轉(zhuǎn)換了,但是要注意,文件名要跟實(shí)際手機(jī)上的一樣啊。