这里实例素材:

我们不一样.lrc

我们不一样.mp3

歌词同步其实就是靠lrc文本文件,打开它,可以看到时间点和对应的歌词。

打开lrc内容如下:

[ti:我们不一样]
[ar:大壮]
[al:]
[by:错爱QQ]
[t_time:(04:30)]
[00:00.00]歌词千寻 www.lrcgc.com
[00:01.11]我们不一样
[00:05.07]演唱:大壮
[00:08.26]词曲:高进
[00:11.29]编曲:张亮
[00:14.85]缩混:侯春阳
[00:20.04]
[00:34.81]这么多年的兄弟
[00:37.27]有谁比我更了解你
[00:41.52]太多太多不容易
[00:43.90]磨平了岁月和脾气
[00:48.35]时间转眼就过去
[00:50.90]这身后不散的筵席
[00:54.52]只因为我们还在
[00:57.39]心留在原地
[00:59.39]
[01:01.41]张开手需要多大的勇气
[01:08.37]这片天你我一起撑起
[01:15.10]更努力只为了我们想要的明天
[01:21.85]好好的这份情好好珍惜
[01:26.81]
[01:28.85]我们不一样
[01:31.77]每一个人都有不同的境遇
[01:35.83]我们在这里在这里等你
[01:42.27]我们不一样
[01:45.26]虽然会经历不同的事情
[01:49.48]我们都希望来生还能相遇
[01:55.28]
[01:57.29]这么多年的兄弟
[01:59.85]有谁比我更了解你
[02:04.12]太多太多不容易
[02:06.51]磨平了岁月和脾气
[02:10.73]时间转眼就过去
[02:13.30]这身后不散的筵席
[02:16.94]只因为我们还在
[02:19.64]心留在原地
[02:23.76]张开手需要多大的勇气
[02:30.51]这片天你我一起撑起
[02:36.66]更努力只为了我们想要的明天
[02:44.16]好好的这份情好好珍惜
[02:49.19]
[02:51.26]我们不一样
[02:53.81]每一个人都有不同的境遇
[02:58.14]我们在这里在这里等你
[03:04.87]我们不一样
[03:07.49]虽然会经历不同的事情
[03:11.80]我们都希望来生还能相遇
[03:17.44]
[03:34.16]我们不一样
[03:36.91]每一个人都有不同的境遇
[03:40.73]我们在这里在这里等你
[03:47.83]我们不一样
[03:50.50]虽然会经历不同的事情
[03:54.63]我们都希望来生还能相遇
[04:01.18]我们不一样
[04:04.21]虽然会经历不同的事情
[04:08.36]我们都希望来生还能相遇
[04:15.23]我们都希望来生还能相遇
[04:21.20]歌词编辑:错爱QQ 1320395669
[04:25.86]

找歌词,上歌词千寻 www.lrcgc.com。支持歌词找歌名,LRC歌词免费下载。

歌词同步原理很简单,就是将时间点转换为以毫秒为单位的时间,然后根据歌曲播放的position也就是播放到的时间,显示对应的歌词。

简单源码如下:

//装载歌词时间与内容
var lrcArr:Array = new Array();
//加载声音的类
var sd:Sound = new Sound();
//开始加载外部歌曲
sd.load(new URLRequest("我们不一样.mp3"));
//开始播放,并将其赋值给SoundChannel类对象,这样才可以获取播放的进度
var sdCtrl:SoundChannel = sd.play();
//加载lrc文本的类对象
var urlLdr:URLLoader = new URLLoader();
//开始加载歌词文本
urlLdr.load(new URLRequest("我们不一样.lrc"));
//侦听歌词文本是否加载完毕
urlLdr.addEventListener(Event.COMPLETE,onLoad_Fun); //歌词文本加载完毕
function onLoad_Fun(e:Event):void{
//将歌词文本全部内容存入str变量
var str:String = urlLdr.data;
//根据换行符转化成数组
var childArr:Array = str.split("\n");
//正则表达式,大致内容就是获取时间
var reg:RegExp = /\[[0-5][0-9]:[0-5][0-9].[0-9][0-9]\]/g;
//循环整个数组
for (var i:int=0; i<childArr.length; i++){
//将数组某个内容赋值到变量newStr
var newStr:String = childArr[i] as String;
//根据表达式获取时间存入数组timeArr
var timeArr:Array = newStr.match(reg);
//循环整个时间
for (var j:int = 0; j<timeArr.length; j++){
var theLastStr:String = timeArr[j] as String;
var obj:Object = new Object();
//将时间转换为毫秒
obj.time = (Number(theLastStr.substr(1,2))*60 + Number(theLastStr.substr(4,5)))*1000;
//将歌词存入obj.lrc 因为时间是[00:05.07]共10个字符串,则从第10个字符串开始截取,则为歌词内容
obj.lrc = newStr.substr(timeArr.length * 10) as String;
lrcArr.push(obj);
}
}
//添加帧侦听
this.addEventListener(Event.ENTER_FRAME,onEnter_Fun);
} function onEnter_Fun(e:Event):void{
//当文本的时间小于播放的时间,则显示对应的歌词
for (var i:int=0; i<lrcArr.length; i++){
var newObj:Object = lrcArr[i];
if (newObj.time < sdCtrl.position){
lrc_txt.text = newObj.lrc;
}
}
}

  

AS3 歌词同步的更多相关文章

  1. 论HTML5 Audio 标签歌词同步的实现

    HTML5草案里面其实有原生的字幕标签(<track> Tag)的,但使用的是vtt格式的文件,非常规的字幕(.sub, .srt)或歌词文件(.lrc). 用法如下(代码来自W3Scho ...

  2. TextView实现歌词同步

    利用TextView实现歌词同步显示,这是一个简单的利用TextView实现滚动实时显示歌词的. 里面的内容都已经写上了详细的注释.里面播放音乐的时候歌词同步展示. 做媒体这块的朋友可以学习一下,练练 ...

  3. Jplayer歌词同步显示插件

    http://blog.csdn.net/wk313753744/article/details/38758317 1.该插件是一个jquery的编写的跟jplayer实现歌词同步的插件,最终效果如图 ...

  4. HTML5实践之歌词同步播放器

    歌曲播放我们会发现他的兼容性不是很好,譬如IE上能播放的flash播放器,再firfox或者chrome上就不是很好的应用了,因为有插件的阻碍!HTML5的出现让这一切成为了可能,但是播放器虽然播放了 ...

  5. Android VLC播放器二次开发3——音乐播放(歌曲列表+歌词同步滚动)

    今天讲一下对VLC播放器音频播放功能进行二次开发,讲解如何改造音乐播放相关功能.最近一直在忙着优化视频解码部分代码,因为我的视频播放器需要在一台主频比较低的机器上跑(800M主频),所以视频解码能力受 ...

  6. 基于jplayer实现歌词同步的JS音乐播放器效果

    分享一款基于jplayer实现歌词同步的JS音乐播放器效果.这是一款基于jQuery实现的音乐播放器功能代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <textare ...

  7. 我的项目7 js 实现歌词同步(额,小小的效果)

    在项目中须要做一个播放器,还要实现歌词同步的效果,就跟如今搜狗音乐的歌词同步差点儿相同,在网上查了一些关于这方面的.整理了一下,在这里,其有用这种方法能够吗? <!DOCTYPE html> ...

  8. HTML5实现歌词同步

    开篇 HTML5的最强大之处莫过于对媒体文件的处理,如利用一个简单的vedio标签就能够实现视频播放.相似地,在HTML5中也有相应的处理音频文件的标签,那就是audio标签 在线Demo audio ...

  9. 用HTML5的Audio标签做一个歌词同步的效果

    HTML5出来这么久了,但是关于它里面的audio标签也就用过那么一次,当然还仅仅只是把这个标签插入到了页面中.这次呢就刚好趁着帮朋友做几个页面,拿这个audio标签来练练手. 首先你需要向页面中插入 ...

随机推荐

  1. MySQL Transaction--RC和RR区别

    在MySQL中,事务隔离级别RC(read commit)和RR(repeatable read)两种事务隔离级别基于多版本并发控制MVCC(multi-version concurrency con ...

  2. dbt 的知识文档管理

    dbt 支持docs的管理,可以方便进行分享,以及大家的可视化工作 有一篇文档讲的特别好分析了知识共享,知识管理的重要性(dbt 对应公司的ceo) https://blog.fishtownanal ...

  3. 转 web.config设置之system.webServer 详细介绍,为网站设置默认文档

    如何:为 IIS 7.0 配置 <system.webServer> 节2008-06-14 22:26http://technet.microsoft.com/zh-cn/sysinte ...

  4. setsockopt IP_ADD_MEMBERSHIP error!No such device的解决方案

    /mnt # ./onvifserver Happytime onvif server version 2.6Onvif server running at 192.168.1.10:8000crea ...

  5. Asp.Net操作MySql数据库增删改查

    Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git  1.安装MySQL数据库 ...

  6. pm2 知识点

    pm2:node进程管理工具 pm2 命令: pm2 命令 作用 pm start xxx.js 启动 xxx.js pm stop xxx.js 停止 xxx.js pm2 list 显示所有进程状 ...

  7. JSP 执行流程

    一.jsp执行流程 1. 发送请求 ,请求访问jsp文件. 2. 服务器(Tomcat)提供的jsp parser 解析器解将jsp转化为java文件. jsp本质上是一个servlet. 3.ser ...

  8. dubbo实战

    http://blog.csdn.net/hejingyuan6/article/details/47403299

  9. 共享设置及ftp设置

    第一部分 共享设置 一.添加编译选项 network---file transfer---aria2                                                   ...

  10. linux下syscall函数 间接系统调用

    NAME              syscall - 间接系统调用 SYNOPSIS              #define _GNU_SOURCE               #include ...