AS3 歌词同步

这里实例素材:

我们不一样.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;
		}
	}
}

  

原文地址:https://www.cnblogs.com/dt1991/p/9162684.html

时间: 2024-12-28 19:44:35

AS3 歌词同步的相关文章

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

在项目中需要做一个播放器,还要实现歌词同步的效果,就跟现在搜狗音乐的歌词同步差不多,在网上查了一些关于这方面的,整理了一下,在这里,其实用这个方法可以吗? <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript" src="js/jqu

安卓音乐播放器中歌词同步问题

音乐文件是.lrc格式的,以一首歌曲为例, [ti:回忆的沙漏][ar:邓紫棋][al:G.E.M.][by:][offset:0][00:02.50]回忆的沙漏 - G.E.M. 邓紫棋[00:04.62]词:庭竹[00:05.72]曲:G.E.M.[00:15.03]拼图一片片失落[00:18.56]像枫叶的冷漠[00:21.87]墙上的钟[00:23.79]默默数着寂寞[00:29.30]咖啡飘散过香味[00:33.06]剩苦涩陪着我[00:36.68]想念的心[00:39.44]埋葬我在

HTML5音频播放,歌词同步,及视频播放功能(JPlayer、JWPlayer、VideoJS)

近期项目中用到音频视频播放.所以就写了一个demo: 这个是JPlayer插件的视频播放: 这个是音频播放,歌词同步: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <!--注意:在IIS上配置的时候,需加入mime映射,否则歌词出不来.在IIS列表中找到"MIME类型".进行加入.lrc类型;.mp4类型文件--> <head>     <

linux 下 python 调用 mplayer 解析歌词同步播放显示

加载同目录同名歌词同步显示 #!/usr/bin/python # -*- coding: utf-8 -*- import sys, os, time, subprocess, re, chardet def load_lrc(lrc_file):     try:         lrc_contains = open(lrc_file, 'rb').read()         encoding = chardet.detect(lrc_contains)['encoding']     

HTML5实现歌词同步

开篇 HTML5的最强大之处莫过于对媒体文件的处理,如利用一个简单的vedio标签就能够实现视频播放.相似地,在HTML5中也有相应的处理音频文件的标签,那就是audio标签 在线Demo audio标签 实现一个audio标签非常easy,相应的html代码例如以下: <audio id="player" src="music/我在人民广场吃炸鸡.mp3" autoplay controls> </audio> 上述代码不须要一行js脚本就

Jplayer歌词同步显示插件

http://blog.csdn.net/wk313753744/article/details/38758317 1.该插件是一个jquery的编写的跟jplayer实现歌词同步的插件,最终效果如图: 2.首先引入jplayer的相关的js库和样式文件. [html] view plaincopy <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link

Android练习项目 Mp3播放器实现 歌词同步播放(四)

其实到后面就需要我们如何显示歌词,对于歌词的同步显示还是比较好实现的,主要通过判断当前播放的时间和每个结点的歌词的时间的大小,来同步对应到结点的数据,现在就是如何来实现这个问题. 其实,这个时候就需要自定义控件来实现. 第一步需要自定义View的属性. 第二步需要实现在View的构造方法中获得我们自定义的属性. 主要通过初始化函数,init() 第三步,重写ondraw函数. LrcView.java package com.flashmusic.View; import android.con

手机影音第十七天,实现歌词同步

代码已托管到码云,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 效果图: 有一个小的遗憾,就是该MP3文件和歌词文件要在同一路径下,才能读取到歌词,否则读取不到录音文件. 将录音文件发到这里,是.lrc格式的文件,其实TXT文件的也行:如果在手机上显示是乱码的话,就改一下文件的编码为Unicode,再尝试下. [ti:北京北京] [00:00.05]献给我最爱的老婆 --常长丽 [00:02.17]歌曲名:北京北京 [00

我的Android进阶之旅------&gt;Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内容的实体类LrcRow 2解析歌词的构造器 ILrcBuilder接口 DefaultLrcBuilder歌词解析构造器 lrc歌词原始内容 lrc歌词解析后的内容 三显示LRC歌词内容 1定义一个ILrcViewListener接口 2定义一个ILrcView接口 3自定义一个LrcView 同步