查看: 2477|回复: 0
打印 上一主题 下一主题

发布一个带完整歌词显示的mp3(基于本站的mp3板)

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-20 22:38:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前说过要写个带歌词显示的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)]
[arueen]
[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了。


程序不仅在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)

该上程序了:

bootloader的hex文件:
(有了这个文件就可以直接使用avrstudio用了)
(注我板子用的14.7456M的晶振,如是其它请修改程序便以后再用)
点击此处下载ourdev_180798.zip(文件大小:2K)
主程序的hex:
点击此处下载ourdev_180799.zip(文件大小:34K)

放在SD卡或U盘中的文件:
(注意不要让这个四个文件有碎片,方法之一:格式化再放文件)
点击此处下载ourdev_180802.zip(文件大小:727K)

bootloader程序:
点击此处下载ourdev_180800.zip(文件大小:65K)
主程序:
(我的板子用14.7456的晶振,115200的波特率)
点击此处下载ourdev_180801.zip(文件大小:127K)



最近公司事特别多,所以业余玩AVR也该告一段落了。这个程序也是我一年来玩AVR的积累吧,99%的程序都是我自己写的,一个字一个字敲出来的,其间花的时间也是非常多。总共应该有近7000行。

最后上传一首好听的歌,以前收音机经常听到。《细说往事》,最近心情也许就是歌辞中描述的差不多:
歌词上面有,把它考下来保存为文本后缀lrc即可。
点击此处下载armok01180916.zip


这是原理图:
(是缺陷板的原理图,具体有哪些问题在上面已经说过了,谢谢armok!)
点击此处打开ourdev_180835.pdf(文件大小:43K)



趁编辑权限还没过期上点图片:

















回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表