您的位置: 首页 > 技术文档 > 多媒体制作 > FLASH打造LRC歌词播放器
用flash从百度搜索中找歌词 回到列表 ActionScript 3.0 概要
 FLASH打造LRC歌词播放器

作者:HBrO 时间: 2006-01-09 文档类型:原创 来自:蓝色理想

第 1 页 FLASH打造LRC歌词播放器 [1]
第 2 页 FLASH打造LRC歌词播放器 [2]
第 3 页 FLASH打造LRC歌词播放器 [3]
第 4 页 FLASH打造LRC歌词播放器 [4]

怎么让歌词平滑滚动呢?
在整个容器里,只显示了SHOWNUM行歌词,所以,不可能就是简单地让歌词在播放过程中一直地上升。
我们主要是让两句歌词之间能够缓慢地上升,而不是播到相应歌词才让歌词跳动.
以以下两句歌词为例:
[00:15.84]难过 是因为闷了很久
[00:21.18]是因为想了太多
在15秒84和21秒18之间,我们让列表框的所有项目匀速移动一个列表框项目的高度.这样,当时间无限接近21秒18的时候,列表框的所有项目移动的距离接近于一个列表框项目的高度.当时间到21秒18,ONENTERFRAME事件响应时,列表框的内容恰好要更改,因为高亮显示的歌词发生改变.更改是原列表框第一项去掉,其它项目相应地往上移动,最后追加后面还没显示的歌词的第一行.所以,假如列表框项目实际上不移动的话,就会给人一种刚好移动了也恰好是一个列表框项目高度.因此,此时让列表框的位置恢复到原来15秒84时的位置,就不会有跳动的感觉。
知道了这个原理以后,就开始写这段匀速移动的代码了。这是个初中的物理问题,解决起来应该不难。
我们主要是要求出列表框项目移动的距离△S,然后求出列表框项目的位置.这时,可能会有读者问:那不就是要设置SHOWNUM个列表框的位置吗?从上面的分析可见,所有列表框项目的△S值是相同的,所以,我们干脆控制整个列表框的位置属性。
根据匀速运动的公式,有
△S=V*△T
其中△T就是当前歌曲时间与歌词时间信息的差值,即当前时间(T-15.84).那么V怎么求呢?
我们刚才说了,在两句歌词的时间差里,我们需要移动一个列表框项目的距离S,代入上述公式,得
S=V*(21.18-15.84)
V=S/(21,18-15.84)

解出了V以后,就可以把距离跟时间的关系写出来:
△S=S/(T-15.84)*(21.18-15.84) (其中S为常数)
把该函数用于AS中:
S就是一个列表框的高度itembutton0._height,15.84就是以当前歌词位置TEMPPOS为下标的数组项的值timeValue[temppos],21,18就是当前歌词下一项的时间信息值timeValue[temppos+1],当前歌曲位置T就是歌曲位置pos/1000(因为上面设置了pos=_parent.song.duration,而duration是以毫秒为单位的,TIMEVALUE数组是以秒为单位,所以需要转换一下单位)
于是,控制列表框位置的代码就写出来了:

delta=itembutton._height*(pos/1000-timeValue[temppos])/ (timeValue[temppos+1]-timeValue[temppos]);

该代码添加在MOVEUP函数里。然后列表框的位置就等于列表框初始值减去DELTA(因为往上为负,所以是减)。
为了获得初始值,在MOVEUP函数的外面追加:

inity=_y

接着就可以在MOVEUP函数里追加:

_y=inity-delta

此时,测试影片,就可以看到平滑移动的效果了.但是,当歌词高亮显示发生改变的时候,你会看到列表框上面一项突然消失,同时下面弹出下一项.这个该怎么消除呢?
很简单,就在主场景画两块颜色跟背景颜色一样,大小跟列表框项目相同的矩形方块,一块放在列表框的上面,底线与列表框顶断对齐,另一块放在列表框下面,底线跟列表框底线对齐.这样就看不到这种突然消失的现象了。
效果是达到了,但是可能有些读者还会有疑问:要遮住上下两个项目,用遮罩不是更方便吗,为什么要这么麻烦呢?
原因在于:这样做会让被遮罩层有动态文本,这就需要嵌入字体轮廓才能显示文字,而且文字是从歌词文件那里读取的,什么字符都可能有,于是,就要为所有字符嵌入字体轮廓.也就是需要导入整个字体文件,结果就是导致文件很大(一般是几M到十多M),使得加载的时间大大增加,浏览者会等得不耐烦.所以建议读者还是不使用遮罩为佳.
接着就是制作鼠标点击控制歌词的效果了。

要实现点击歌词的跳转功能,在ITEMBUTTON按钮里添加代码:

on(release){
pos=_parent.timeValue[_name.slice(10)+_parent.startpoint] //获得被点击歌词的相应时间,其中,SLICE(10)是把ITEMBUTTON十个字符去掉,以获得被点击按钮所在的索引.
_parent._parent.song.start(pos,1)  //从点击时间开始播放
gotoAndPlay(2) //表示高亮显示被点击的歌词
}

大家现在可以下载源文件了:Player.rar
不过声音文件太大,没放到压缩包里.大家可以从别处下载,或者点击:download.incoo.com/blueidea/hbro/player/mp3player_x1.swf

然后也告诉大家声音文件地址的通式:
download.incoo.com/blueidea/hbro/player/sound/歌名.mp3
声音文件下载后,解压上面的RAR文件.把它们放到SOUND文件夹下,注意声音文件名要跟歌词文件名一致喔(当然不包括扩展名).歌词文件放在LYRICS文件夹下。

经典论坛讨论帖:
http://www.blueidea.com/bbs/newsdetail.asp?id=2205817

出处:蓝色理想
责任编辑:moby

上一页 FLASH打造LRC歌词播放器 [3] 下一页

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
Google 视频下载工具
flash留言本梯度教程(附源)
Accordion组件的使用实例
歌词同步关键技术
用flash从百度搜索中找歌词
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:4/41个记录/页 转到 页 共4个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2