以前说过要写个带歌词显示的mp3,但是一直没有时间。前一阵子抽4个晚上写出来了,后来又陆续做了改进,现在正式出炉了!
硬件环境:
是网站的mp3板,还是去年卖的缺陷板,当时是这个板第一次做板,但是有点小错误。当时我仔细看了看问题不大就购了一块。虽然贴了个标签说不可以用作mp3用途,但是我还是做了。
这个板的问题就是ch375的接线搞成5v版本的了,还有ch375的晶振离芯片太远,并且离数据线太近,这会导致ch375工作不稳定。后来我通过改变晶振端的电容来稳定起工作。还有就是AVCC没有接VCC,还有个小毛病是232的RXD中少串了个电阻,直接接会导致无法isp下载。
板子回来东西也是过了很久一个一个焊上去的,3310是从ppa2001那转让来的(在此表示感谢,他顺便还送了我很多PCB板)。最近从armok这里弄了些零件才算弄完整了。
软件平台:
AVRSTudio4.13 + WinAVR20070525
到了公司用起了source insight才觉得AVRSTudio的编辑器太滥了,所以我是用source insight编辑代码,直接命令行敲命令make,用avrdude + jtagice下载代码
功能描述:
程序包含两部分bootloader+application
bootloader是前一阵子在坛子里搜到的stk500的bootloader,我对它作了修改,以和我的程序匹配。
bootloader需要配置成2Kbytes的,可以复位按住start/puse,或者在主程序中按VOL+建,另外复位后10秒如果没有操作则自动进入bootloader
application部分完成的就是mp3的播放功能:
5个按键,功能上我只对start/pause作了修改,这个按键是用作模式选择的,可以选择单曲重复,全曲重复,随几播放(shuffle)
mp3文件可以存放在任意目录,但是总的文件夹数目受到限制(目前代码限制136个)。也可以采用以前的惯用方法,把文件放在特定目录下,这个需要修改程序fat.h文件中的一个宏定义FIX_DIRECTORY。
歌词文件可以存放在歌曲所在的目录和一个默认目录下,代码中是\\lrc 即根目录下的lrc文件夹下。
程序对歌词提供了完整的支持,支持标准的lrc文件规范。[XX:XX]&[XX:XX.XXX],可以多个时间tag共用一句歌词。
程序处理歌词的方法是,根据mp3文件的文件名(短/或长文件名)去寻找lrc后缀的文件。注意:文件名采用前段匹配的方式,即只要歌词文件前面的和音乐文件匹配即可。如:细说往事.mp3 和 细说往事-南方二重唱.lrc是可以对应起来的。另外对于文件名中的大小写是区分的,如may it be.mp3 和May it be.lrc是对应不起来的。
找到歌词文件后程序会对其解析,然后对所有数据进行排序。将结果存到ram或eeprom中。程序中使用静态单向链表来描述各个时间tag,真正的歌词数据则放到一个数组里。目前这数组在内部ram中试640字节,eeprom中有1500字节。程序优先使用ram如果ram放步下则会存到eeprom中。eeprom剩下的空间用于存放文件夹的信息,用于支持文件的任意存放。
由于部分歌词会存放到eeprom中,eeprom的操作很慢,所以歌词推荐那种使用多个tag公用一个歌词的形式,[xx:xx][yy:yy]XXXX 。当然不是这种也支持了。像这种歌词:
[ti: Bohemian Rhapsody (Mercury)]
[ar:Queen]
[al:A Night At The Opera (c)1975]
[00:01]Is this the real life
[00:04]Is this just fantasy
[00:07]Caught in a landslide
[00:10]No escape from reality
[00:15]Open your eyes
[00:18]Look up to the skies and see
[00:25]I'm just a poor boy, I need no sympathy
[00:31]Because I'm easy come, easy go,
[00:35]little high, little low,
[00:38]Anyway the wind blows, doesn't really matter to me,
[00:48]- to me -,
[00:55]Mama, just killed a man,
[01:01]Put a gun against his head,
[01:05]Pulled my trigger, now he's dead,
[01:09]Mama, life had just begun,
[01:15]But now I've gone and thrown it all away
[01:22]Mama, ooo,
[01:29]Didn't mean to make you cry
[01:32]If I'm not back again this time tomorrow
[01:37]Carry on, carry on, as if nothing really matters
[01:54]Too late, my time has come,
[02:01]Sends shivers down my spine,
[02:04]Body's aching all the time,
[02:08]Goodbye everybody - I've got to go
[02:14]Gotta leave you all behind and face the truth
[02:21]Mama, ooo
[02:28]I don't want to die,
[02:31]I sometimes wish I'd never been born at all
[03:05]I see a little silhouetto of a man,
[03:08]Scaramouche, scaramouche will you do the Fandango
[03:11]Thunderbolt and lightning - very very frightening me
[03:16]Galileo, Galileo,
[03:17]Galileo, Galileo
[03:19]Galileo figaro - Magnifico
[03:22]I'm just a poor boy and nobody loves me
[03:25]He's just a poor boy from a poor family
[03:29]Spare him his life from this monstrosity
[03:33]Easy come easy go -, will you let me go
[03:36]Bismillah! No -, we will not let you go - let him go
[03:40]Bismillah! We will not let you go - let him go
[03:43]Bismillah! We will not let you go - let me go
[03:46]Will not let you go - let me go
[03:48]Will not let you go - let me go
[03:50]No, no, no, no, no, no, no
[03:53]Mama mia, mama mia, mama mia let me go
[03:56]Beelzebub has a devil put aside for me, for me
[04:03]for me -
[04:14]So you think you can stone me and spit in my eye
[04:20]So you think you can love me and leave me to die
[04:25]Oh Baby - Can't do this to me baby -
[04:32]Just gotta get out - just gotta get right outta here
[05:10]Nothing really matters,
[05:14]Anyone can see,
[05:18]Nothing really matters -, nothing really matters to me
[05:40]Any way the wind blows...
这样程序至少要花10秒钟才能把多余的数据存到eeprom中
像这种:
[ti:细说往事]
[ar:南方二重唱]
[al:细说往事]
[by:炫网资讯 Liuxuan.com]
[00:00.00]细说往事 - 南方二重唱
[00:09.56]词/曲:李子恒
[00:12.24]
[02:55.60][00:14.89]蓝蓝的天
[02:58.17][00:17.31]往事一缕轻烟飘过你的眼廉
[03:05.12][00:23.89]沉默的眼
[03:07.19][00:25.75]请回答我还爱不爱我的从前
[03:13.56][00:32.82]我的从前
[03:16.06][00:35.03]有你陪伴的梦和一张疼爱的脸
[03:22.80][00:41.49]如今细说往事
[03:25.05][00:43.95]往事如烟
[03:26.61][00:45.65]我是否还算是你的誓言
[03:30.60][00:49.97]
[04:09.91][02:04.40][00:50.93]白云翩翩
[04:11.78][02:06.32][00:52.83]心事一面银幕飘过你的窗前
[04:18.63][02:13.12][00:59.79]寂寞的窗
[04:20.53][02:15.07][01:01.45]请开启我被岁月紧锁的思念
[04:27.54][02:22.02][01:08.45]我的思念
[04:29.58][02:24.00][01:10.63]有你牵挂的心和一首叫做誓言
[04:36.30][02:30.59][01:16.91]如今细说往事
[04:38.48][02:32.97][01:19.50]往事如烟
[04:40.13][02:34.51][01:21.09]我是否还算是你的从前
[04:46.16][02:39.20][01:26.58]
[03:34.05][01:28.01]往事从头
[03:35.59][01:30.17]轻轻细说梦的演变
[03:42.30][01:36.95]多年以后
[03:44.56][01:39.04]是否还有爱的容颜
[03:51.42][01:45.93]往事从头
[03:53.52][01:47.97]轻轻细说沧海桑田
[04:00.20][01:54.65]是否能够
[04:02.40][01:56.87]回到从前再走一遍
[04:08.67][02:02.68]
就比较好了,用不着eeprom了。
回复: 带完整歌词显示的MP3
程序不仅在LCD上显示信息在串口也会show一些,
说说字库文件:
总共有四个文件:st12.sys,st16.sys,gbk2uni.sys,uni2gbk。其中st12/16是12*12 和16*16点阵字库。其余两个为gbk和unicode互转的文件。
其中st16和gbk2uin.sys没有用到,但是我程序中没有去掉,如果想去调请在程序中改,在LCD_GBK.c文件的初始化中改。
字库是GBK字库,不是GB2312,所以支持很多汉字,总共两万多个,所以再生僻的都可以正常显示,如下面的繁体:
[ti:失恋阵线联盟]
[ar:草蜢]
[al:]
[by:ZJM]
[00:00]失戀陣線聯盟
[00:10]演唱:草蜢
[00:14]
[01:43][00:16]她總是只留下電話號碼
[01:47][00:19]從不肯讓我送她回家
[01:50][00:23]聽說你也曾經愛上過她
[01:54][00:26]曾經也同樣無法自拔
[01:57][00:30]你說你學不會假裝瀟洒
[02:01][00:34]卻教我別太早放棄她
[02:05][00:37]把過去全說成一段神話
[02:08][00:41]然後笑彼此一樣的傻
[02:12][00:45]我們這麼在乎她卻被她全不抹煞
[02:16][00:48]越疼她越傷心永遠得不到回答
[02:19][00:52]到底她怎麼想應該繼續猜測嗎
[02:23][00:56]還是說好全忘了吧
[02:27][00:59]找一個承認失戀的方法
[02:30][01:03]讓心情好好的放個假
[02:34][01:06]當你我不小心又想起她
[02:45][02:41][02:37][01:10]就在記憶裡畫一個"X"
[01:14](Music)
回复: 带完整歌词显示的MP3
歌词要村到eeprom时的显示:
顺便介绍一个超强的软件:Procom
支持很多种通信协议,什么X/Y/Z modem阿,还有VT100等协议,可以用来构建菜单的,有兴趣的去搜用用。
串口调试只是其最基本的功能,比普通的串口调试软件强多了。
回复:带完整歌词显示的MP3
呵呵 好帖子 我最近打算做mp3 呵呵 等我搞定了 整理一个资料贴上来
南京璞晓电子 www.cpx0.com需要
msn:njlianjian@hotmail.com
回复: 带完整歌词显示的MP3
我现在做毕业设计,正做这个,做好了麻烦你发一份资料到我邮箱,谢谢!
pkjianguo@126.com
回复:带完整歌词显示的MP3
强!正开始学这方面的东东!谢谢了
回复:带完整歌词显示的MP3麻烦楼主能给份资料
楼主有没有资料,我正好也在做MP3,麻烦你发一份资料到我邮箱,谢谢!
abcd0521@tom.com
我现在,正做这个,做好了麻烦你发一份资料到我邮箱,谢谢![email=!
wang357050043@163.com]wang357050043@163.com[/email]
楼主有没有资料,我正好也在做MP3,麻烦你发一份资料到我邮箱,谢谢!
wgf_bwm@163.com