这里实例素材:

我们不一样.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. leetcode:Single Number【Python版】

    1.用双重循环逐个遍历(超时) 2.用list B的append和remove函数(超时) 3.用dict B(AC) class Solution: # @param A, a list of in ...

  2. 基于TLS(线程局部存储)的高效timelog实现

    什么是timelog? 我们在分析程序性能的时候,会加入的一些logging信息记录每一部分的时间信息 timelog模块的功能就是提供统一的接口来允许添加和保存logging 我们正在用的timel ...

  3. 阿里巴巴Java开发手册-并发处理

    1. [强制]获取单例对象需要保证线程安全,其中的方法也要保证线程安全.说明:资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯.正例: ...

  4. Win7 搭建pptpvpn服务器方法

    打开网络与共享中心 选择更改适配器设置 选择菜单文件选项(若无菜单栏,可以按一下alt键就会显示出来的) 选择新建传入链接 选择需要哪些用户可以访问vpn服务器,把勾搭上,点击下一步 注意此处的通过i ...

  5. 使用Angular提交表单

    使用Angular提交表单 我们准备在之前使用的<script>标签中设置我们的Angular应用.所以删除里面的内容,我们就可以开始了. 设置一个Angular应用 步骤为: 1. 加载 ...

  6. 如何在UltraEdit中高亮显示PB代码

    打开UE,从菜单中选择高级->配置… 点击打开按钮,注意文件WordFile.txt最后一个高亮显示语言的编号,格式为“ /L(number) ”,假设最后一个高亮显示语言的编号是15,修改UE ...

  7. WPF Demo5

    <Application x:Class="Demo5.App" xmlns="http://schemas.microsoft.com/winfx/2006/xa ...

  8. TX Textcontrol 使用总结一模板

    以下内容纯属个人使用感想,如有问题,还望讲解!!! 简介与使用感想: TX Text Control是一套功能丰富的文字处理控件,它以可重复使用控件的形式为开发人员提供了Word中常用的文字处理功能, ...

  9. Excel数组排序+图片统一大小

    Sub 图片调整合适大小() ' Debug.Print ActiveWorkbook.Name 图片显示比例 = 0.9 '1为顶满单元格 Dim wb As Workbook, sh As Wor ...

  10. vs 2017/2015/2013 如何定位C++内存泄漏

    定位内存泄漏是C++的一个大问题 我们可以通过如下方式进行定位: //在主函数文件中加入如下代码 #include <stdlib.h> #include <crtdbg.h> ...