|
 
- 帖子
- 1669
- 积分
- 334
- 技术分
- 88
- 来自
- 重庆渝北
- 在线时间
- 620 小时
- 注册时间
- 2005-4-9
|
2#
发表于 2006-12-25 21:38
| 只看该作者
代码有些乱糟糟的,慢慢看吧。
舞台上有些实例,名称看源文件吧。不列举了-
- System.useCodepage = true;//使用操作系统编码
- //通过浏览来加载外部的mp3歌曲
- //import flash.net.FileReference;
- import flash.net.FileReferenceList;
- import mx.styles.CSSStyleDeclaration;
- var SouMc:MovieClip=this.createEmptyMovieClip("SouMc",100);//装载声音的MC
- var Sou:Sound=new Sound(SouMc);
- var LoadTxt:LoadVars = new LoadVars();
- var TxtArray:Array = [];//存放歌词的数组
- var mylist:Array = [];//存放歌曲列表的数组
- var TxtArr:Array;
- var SouT:Number=0;//播放头位置标记
- var LoadLrcSouOk:Boolean=false;//加载成功标志
- 歌词.进度._width=0;
- 歌词.ii=0;//歌词指针
- //列表组件样式
- List_mp3.vScrollPolicy="auto";
- _global.styles.ScrollSelectList.setStyle("color",0xFFFF66);//文本颜色
- _global.styles.ScrollSelectList.setStyle("backgroundColor",0x990000);//背景颜色
- _global.styles.ScrollSelectList.setStyle("borderColor",0xFFFF00);//边框色
- _global.styles.ScrollSelectList.setStyle("rollOverColor",0xFFFFCC);//鼠标滑过高亮色
- _global.styles.ScrollSelectList.setStyle("textRollOverColor",0xCC0000);//鼠标滑过文本色
- var listener:Object = new Object();//共用侦听对象
- listener.change = function(evt){
- SouStop();
- listNum=evt.target.selectedIndex;
- SouLoad(listNum);
- }
- List_mp3.addEventListener("change", listener);
- prev_btn.enabled=false;
- next_btn.enabled=false;
- var listNum:Number;//歌曲指针
- var listMaxNum:Number;//歌曲数
- var allTypes:Array = [];
- var 浏览类型:Object = new Object();
- 浏览类型.description = "选择歌曲(*.mp3)";
- 浏览类型.extension = "*.mp3";
- allTypes.push(浏览类型);
- var fileRef:FileReferenceList = new FileReferenceList();
- listener.onSelect = function(file:FileReferenceList) {
- mylist = file.fileList;//获取选中文件数组
- listNum = 0;
- listMaxNum = mylist.length;
- List_mp3.removeAll();//清空列表
- for(i=0;i<listMaxNum;i++){
- List_mp3.addItem((i+1)+"."+mylist[i].name,i);//显示播放列表
- }
- SouLoad(0); //立即加载第一曲
- };
- fileRef.addListener(listener);
- //歌曲浏览按钮
- op_mp3.onRelease = function() {
- SouStop();
- fileRef.browse(allTypes);//触发浏览
- };
- //下一首曲
- next_btn.onRelease = function() {
- listNum++;
- SouStop();
- SouLoad(listNum);
- };
- //上一首曲
- prev_btn.onRelease = function() {
- listNum--;
- SouStop();
- SouLoad(listNum);
- };
- //歌词加载处理
- LoadTxt.onData = function(data) {
- if(data!=undefined){
- TxtArr = data.split("\r\n"); //以回车换行符为界分开存入数组
- //读出lrc文件各种信息
- for(var i=0;i<TxtArr.length;i++){
- if(TxtArr[i].indexOf("[ti:")==0){
- TxtArray.ti = TxtArr[i].slice(4,TxtArr[i].indexOf("]"));//歌曲名
- }else if(TxtArr[i].indexOf("[ar:")==0){
- TxtArray.ar = TxtArr[i].slice(4,TxtArr[i].indexOf("]"));//演唱者
- }else if(TxtArr[i].indexOf("[al:")==0){
- TxtArray.al = TxtArr[i].slice(4,TxtArr[i].indexOf("]"));//专集名(唱片名)
- }else if(TxtArr[i].indexOf("[by:")==0){
- TxtArray.by = TxtArr[i].slice(4,TxtArr[i].indexOf("]"));//出品人
- }else if(TxtArr[i].indexOf("[offset:")==0){
- TxtArray.offset = TxtArr[i].slice(8,TxtArr[i].indexOf("]"));//歌词偏移量
- }else if(TxtArr[i].indexOf("[")==0 && TxtArr[i].indexOf("]")==9){
- TxtArr[i]=TxtArr[i].split("]");//把时间和歌词分开。
- for(j=0;j<TxtArr[i].length-1;j++){
- TxtArray.push([Number(TxtArr[i][j].slice(1,3))*60000+Number(TxtArr[i][j].slice(4,6))*1000+Number(TxtArr[i][j].slice(7))*10,TxtArr[i][TxtArr[i].length-1]]);
- }
- }
- }
- TxtArray.sortOn("0",16);//按时间顺序排序歌词数组
- 歌词.txt.text=TxtArray.ti;
- dir_lrc.text="歌曲名:"+TxtArray.ti+"\r\n演唱者:"+TxtArray.ar+"\r\n唱片名:"+TxtArray.al+"\r\n出品人:"+TxtArray.by
- lrc_Sou();//歌词与歌曲匹配吗?
- }else{
- 歌词.txt.text="歌词加载失败!";
- }
- }
- //加载外部MP3后处理
- Sou.onLoad = function(success:Boolean) {
- if (success) {
- //trace(Math.floor(Sou.duration/60000)+":"+Math.floor(Sou.duration%60000/1000)+"."+Sou.duration%60000%1000);//总时间
- 更新();
- LoadLrcSouOk=false;
- lrc_Sou();//歌词与歌曲匹配吗?
- }else{
- _root.dir_lrc.text="MP3加载失败!";
- }
- };
- //开始播放
- SouPlay.onPress=function(){
- 更新();
- }
- //暂停
- SouPause.onPress=function(){
- //trace(Math.floor(Sou.position/60000)+":"+Math.floor(Sou.position%60000/1000)+"."+Sou.position%60000%1000;//输出播放头位置,写歌词时间用。
- if(SouT!=0){
- SouPlay.enabled=true;
- Sou.stop();
- delete SouMc.onEnterFrame;
- }
- }
- //停止
- SouStopBtn.onPress=function(){
- SouStop();
- }
- //循环模式
- z_btn.onPress=function(){
- this.play();
- }
- //Sou_LR声道转换
- var 左声道:Object={ll:100,lr:0,rr:0,rl:100};
- var 右声道:Object={ll:0,lr:100,rr:100,rl:0};
- var 混合声:Object={ll:50,lr:50,rr:50,rl:50};
- var 立体声:Object={ll:100,lr:0,rr:100,rl:0};
- Sou_LR.onPress=function(){
- if(this._currentframe==1){
- Sou.setTransform(左声道);
- this.gotoAndStop(2);
- }else if(this._currentframe==2){
- Sou.setTransform(右声道);
- this.gotoAndStop(3);
- }else if(this._currentframe==3){
- Sou.setTransform(混合声);
- this.gotoAndStop(4);
- }else if(this._currentframe==4){
- Sou.setTransform(立体声);
- this.gotoAndStop(1);
- }
- }
- //播放完毕
- Sou.onSoundComplete = function() {
- SouStop();
- if(z_btn._currentframe==1){
- (listNum>=listMaxNum-1)?listNum=0:listNum++;
- SouLoad(listNum);
- }else if(z_btn._currentframe==2){
- if(listNum<listMaxNum-1){
- listNum++;
- SouLoad(listNum);
- }
- }
- }
- SouDir(Sou.position);
- //停止播放函数,进行一些复位工作
- function SouStop(){
- delete SouMc.onEnterFrame;
- SouT=0;
- Sou.stop();
- SouPlay.enabled=true;
- SouDir(SouT);
- _root.歌词.txt.text=TxtArray[0][1];
- _root.歌词.进度._width=0;
- 歌词.ii = 0;
- }
- //加载新歌曲
- function SouLoad(Num:Number){
- LoadLrcSouOk=false;
- TxtArray=[];
- prev_btn.enabled=(listNum<=0)?false:true;
- next_btn.enabled=(listNum>=listMaxNum-1)?false:true;
- List_mp3.selectedIndex=Num;
- LoadTxt.load("/"+mylist[Num].name.slice(0,-4)+".lrc");//加载歌词文本
- Sou.loadSound("/"+mylist[Num].name, false);//加载外部MP3
- dir_lrc.text=mylist[Num].name;
- }
- //有关声音信息显示的函数,传入参数:当前声音位置
- function SouDir(t):Void{
- if(Sou.duration!=undefined){
- 时间.text=Math.floor(t/60000)+":"+Math.floor(t%60000/1000)+"/"+Math.floor(Sou.duration/60000)+":"+Math.floor(Sou.duration%60000/1000);//显示播放时间:当前位置/总时间
- }else{
- 时间.text="";
- }
- mcb._width=t/Sou.duration*_root.mca._width;//进度条
- }
- //更新
- function 更新():Void{
- SouPlay.enabled=false;
- Sou.start(SouT/1000);//从指定位置开始播放
- SouMc.onEnterFrame = function() {
- SouT=Sou.position;//更新播放头位置标记
- SouDir(SouT);
- //更新歌词显示
- for(var i=0;i<TxtArray.length;i++){
- if(Number(TxtArray[i][0])<=SouT && Number(TxtArray[i+1][0])>SouT && 歌词.ii!=i){
- 歌词.ii = i;
- _root.歌词.txt.text=TxtArray[i][1];
- }
- }
- _root.歌词.进度._width=(SouT-Number(TxtArray[歌词.ii][0]))/(Number(TxtArray[歌词.ii+1][0])-Number(TxtArray[歌词.ii][0]))*歌词.txt.textWidth;
- }
- }
- //歌词与歌曲匹配检查
- function lrc_Sou(){
- if(LoadLrcSouOk){
- if(Sou.duration<=TxtArray[TxtArray.length-1][0]||Sou.duration-60000>TxtArray[TxtArray.length-1][0]){
- _root.歌词.txt.text="歌词与歌曲不匹配!";
- _root.dir_lrc.text="歌词与歌曲不匹配!";
- TxtArray=[];
- }else{
- TxtArray.push([Sou.duration,"结束"]);
- }
- }else{
- LoadLrcSouOk=true;
- }
- }
- stop();
复制代码 |
|