MP3播放器教程之一:LRC歌词分析

很多网友对我之前发的MP3播放器很兴趣...于是准备写一个教程,把里边用到了一些功能详细介绍一下...

原理:
其实lrc文件不过是固定格式的一个文本文档。

[时间]歌词

[时间][时间...]歌词
这样的形式保存
那么先以换行符分割行,再以"]"分割歌词与时间。把歌词与时间整理存进数组就可以了。

代码:直接看代码吧

 

代码没怎么优化,写得挺乱了,别见怪   用时直接用:

getlrc(lrc文件路径就可以了)

歌词会保存在一个叫newlrc的数组里.当然改一下做成返回数组也可以,这样按大家发挥就可以了

注意:由于swf不可以跨域读取外部文件(了解安全性 > 关于域、跨域安全性和 SWF 文件)

默认情况下,Flash Player 7 和更高版本防止从一个域提供的 SWF 文件读取从另一个域提供的 SWF 文件的数据、对象或变量。另外,通过不安全的(非 HTTPS)协议加载的内容不能读取通过安全的 (HTTPS) 协议加载的内容,即使两者都在完全相同的域中。例如,未经显式许可,位于 http://www.macromedia.com/main.swf 的 SWF 文件不能加载 https://www.macromedia.com/data.txt 中的数据;从一个域提供的 SWF 文件也不能加载另一个域的数据(例如使用 loadVars())。

这个问题的解决方法,可以在swf所在的域中用动态语言(.net/asp/php/jsp)等把域上的lrc读进来再传给flash.或者直接就把歌词存在自己空间里。

好了,分析歌词就说到这里,下一步我们会介绍歌词与mp3同步...

//分析歌词
function getlrc(path) {
 //定义两个数组,mylrc用过分析过程使用.newlrc为最终保存歌词的数组
 newlrc = new Array();
 mylrc = new Array();
 //加载外部lrc文件
 lrc = new LoadVars();
 lrc.load(path);
 lrc.onData = function(str) {
  //判断是否加载成功
  if (str != undefined) {
   //以“换行符”分割歌词保存在mylrc中
   mylrc = str.split(chr(13)+chr(10));
   //循环每一行...
   for (i=0; i<mylrc.length; i++) {
    if (mylrc[i].substr(0, 3) == "[ti") {
     //包含"[ti"为歌名,暂时不需要使用,备注掉,下同//
     //var temp = mylrc[i].split(":")[1];
     //temp = temp.substr(0, temp.length-1);
     //newlrc.push("00:00.00|歌名:"+temp);
    } else if (mylrc[i].substr(0, 3) == "[ar") {
     //演唱//  
     //var temp = mylrc[i].split(":")[1];
     //temp = temp.substr(0, temp.length-1);
     //newlrc.push("00:00.01|演唱:"+temp);
    } else if (mylrc[i].substr(0, 3) == "[al") {
     //专辑// 
     //var temp = mylrc[i].split(":")[1];
     //temp = temp.substr(0, temp.length-1);
     //newlrc.push("00:00.02|专辑:"+temp);
    } else if (mylrc[i].substr(0, 1) == "[") {
     //正常的歌词
     var temp:Array = mylrc[i].split("]");//判断是不是同时有两个或以上的时间(有时候一句歌词出现几次就会有这种情况)
     if (temp.length == 2) {//只有一句歌词
      newlrc.push(deleteStr(temp[0])+"|"+temp[1]);//加入数组
     } else if (temp.length>2) {//有两句以上的歌词
      for (k=0; k<temp.length-1; k++) {
       newlrc.push(deleteStr(temp[k])+"|"+temp[temp.length-1]);//加入数组
      }
     }
     //ps:这里保存歌词数组的方法有两种:
     //newlrc["00.00.0"] = "歌词"
     //newlrc[0]="00.00.0|歌词"
     //对只歌词一条一条显示的情况.第一种方法更为方便
     //对于列表显示的情况,第二种更为方便
    }
   }
  }
  if (newlrc.length<1) {//加载不成功或分析不成功.
   newlrc.push("00.00.0|找不到歌词");
  }
  newlrc.push("99.99.9|欢迎使用i4cd mp3player");
  newlrc.sort();//进行时间排序,如果只需要一条一条显示,不使用也可
  
  //以下代码只是把歌词显示出来,非必要
  txtArea.text = "";
  for (i=0; i<newlrc.length; i++) {
   txtArea.text += newlrc[i].split("|")[1]+"\n";
  }
 };
}
function deleteStr(str) {//删除多余的[]
 var temp:String = str;
 return (temp.substr(1, temp.length-1));
}
function getStr(str, num) {//返回指定格式的时间文本
 var temp:String = str;
 if (temp.length<num) {
  temp = temp+".00";
 }
 return (temp.substr(0, num));
}

 

时间: 2024-09-15 00:55:54

MP3播放器教程之一:LRC歌词分析的相关文章

MP3播放器教程之二:歌词同步

上次说到了MP3播放器中的LRC歌词分析,今天我们来说一下如何把LRC歌词与mp3同步播放. 在as2里,播放mp3我们一般会用sound或者MediaPlayback组件...前面是的声音管理类,后者则支持mp3与flv的播放.. 如果简单的做mp3播放器..我们直接使用sound就可以解决基本的需求,不过为了更好的同步LRC同步,我们将使用MediaPlayback组件,因为MediaPlayback提供了cuePoint(提示点)功能,使用该功能,我们就可以把歌词数组里的时间添加到Medi

MP3播放器不显示歌词

问:我的MP3播放器在播放音乐的时候不能显示歌词,文件格式也没错,是"LRC".请这个问题该如何解决? 答:MP3播放器在播放音乐的时候如果想显示歌词,那么歌词文件的文件名就必须与MP3文件名一样.另外,少数MP3播放器要求歌曲和歌词文件分别存在不同的文件夹内:还有少数MP3播放器虽然不要求歌曲与歌词文件同名,但是要手动设置每首歌的歌词文件是哪一个.

FLASH制作LRC歌词播放器教程

教程 自WINAMP出了个迷你歌词以后,笔者一直心里痒痒的,想找个时间自己也做一个.现在做好了,大家先预览一下效果.测试地址一asp5.6to23.com/7years/yiyuan7years/HBrO/Player/mp3player_x1.swf测试地址二download.incoo.com/blueidea/hbro/player/mp3player_x1.swf其中歌词就是现在标准的WINAMP的LRC文件,从别处下载的,没作任何修改,就是说,这个播放器可以用于播放WINAMP格式的L

MFC做播放器时怎么实现歌词同步显示

问题描述 MFC做播放器时怎么实现歌词同步显示 RT,大神们给个教程啥的一步步来的那种,直接看代码感觉太复杂了,看不懂那.. 解决方案 http://download.csdn.net/detail/qq_23668339/8732801教程,看<深入浅出MFC> 解决方案二: MFC制作音乐播放器的歌词同步问题http://download.csdn.net/detail/ouyangtianhan/3046678 解决方案三: 可以先打开一些歌词文件看看,基本的格式就是时间:歌词这样的,其

Flex4制作一个带波形的MP3播放器的例子

下面是一个使用Flex制作的MP3播放器,除了音量调节,左右声道调节,播放暂停外.还会通过对声音的采样进行动态波形图的绘制.效果图如下:   代码如下 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx=" http://ns.adobe.com/mxml/2009 "                xmlns:s="library://ns.a

mp3-网页嵌入MP3播放器后时间显示不完全

问题描述 网页嵌入MP3播放器后时间显示不完全 播放器时间在播放到1小时后就变成后面的分和秒变成了省略号,请问是哪里的问题?

我的Android进阶之旅------&amp;gt;Android MediaPlayer播放mp3的实例--简易mp3播放器

大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的. 首先来看看MediaPlayer的生命周期: 从MediaPlayer的生命周期图或者说是状态转移图上来看: 当一个MediaPlayer对象别创建或者调用reset()方法之后,它处于空闲状态,在调用release()方法

【【【超高仿】】】迅雷播放器教程 -- 总结(14)

代码下载:http://download.csdn.net/detail/qq316293804/6502879           迅雷播放器教程汇总: 仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)仿迅雷播放器教程 -- 媒体播放器对比 (2)仿迅雷播放器教程 -- 媒体播放三大底层架构简析 (3)仿迅雷播放器教程 -- 基于VLC的C++播放器 (4)仿迅雷播放器教程 -- 封装VLC (5)仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)仿迅雷播放器教程 -- 十

如何用C#进行Winform MP3播放器开发

总结一下,下午半天进行的MP3播放器的开发:  首先,新建一个解决方案:命名MP3solution,设置FormBorderStyle为None,即上面的图标,最大化最小化按钮隐藏,但如图所示还有最大化关闭按钮,这时自己添加的两个PictureBox控件,下面的暂停,停止,静音等也是PictureBox控件设置其Image属性为properties资源中的图片.如何导入图片资源也是一个关键点.我们点击Properties下的Resources文件,然后在添加资源中添加图片资源PNG图片.值得一提