★说明:FLASH+SwiftMP3波形同步的原理其实很简单,SwiftMP3把MP3转换成SWF的时候,把mp3中的音频数据等,并以变量s0、s1、s2、s3、……、s17共18个变量储存,然后我们再在主SWF中通过下面的代码读取这些变量,根据变量的值即时设置波谱柱的高度就可以了。比如下面的代码中,chengzai_mc就是用来载入外部音乐SWF的影片剪辑,chengzai_mc["s"+i]就得到那18个变量的值,然后就可以根据这些值设置波谱柱的高度了。 //波谱显示代码示例: function bopuxianshi() { boxingzhu0_mc.onEnterFrame = function() { for (var i = 0; i<18; i++) { //获得频谱信息 var pinpu = chengzai_mc["s"+i]; //显示频谱数字 _root["shuzi"+i+"_var"] = pinpu; //设置波形柱子 boxingzhu_array[i]._height = 5+pinpu*10; } }; }
★演示:http://www.huoshan.org/shiyan/flash_boxing/flash_boxing.htm
源文件:http://www.huoshan.org/shiyan/flash_boxing/flash_boxing.rar
效果显示:http://www.5uflash.com/Files/BeyondPic/2006-10/11/music_jump_line.swf
打开flash,并保存名为music_jump_cell.fla,在此music_jump_cell.fla里新建一个名叫music_cell的电影元件(说明:建一个元件的目的是为了需要时调出它的方便),在它的第一帧设置一个变量:var g = 1;//外部swf包含音乐的文件名序号,下面会看到它变化的情况:即1、2、....、n、 见图:1.jpg 第2帧的代码我先帖出来(见图:2.jpg),我再一一解释在其第2帧的代码含义: var line_cell_color = 0xE90CDE; //跳动块色 var ps_txt_col = 0xFFFFFF; //进度显示字体颜色 var center_line_color = 0xFFFFFF; //音乐条基底线条色 //........以上是初始颜色值........ this.createEmptyMovieClip("line_cell", 1); with (line_cell) { moveTo(0, 0); beginFill(line_cell_color); lineTo(4, 0); lineTo(4, 2); lineTo(0, 2); endFill(); _visible = 0; } //......1........音乐跳动小块,就是那个跳在最上方的小长方形,它的长与宽分别是:4*2 //................2................... for (var i = 0; i<18; i++) { line_cell.duplicateMovieClip("line_cell"+i, i+20, {_x:5*i, _y:-1});//复制18个上述的那个小长方形,名称分别是line_cell0、line_cell1、....line_cell17 //并设置它们的初始坐标 line_cell.duplicateMovieClip("m"+i, 40+i, {_x:5*i});//复制18个上述的那个小长方形,名称分别是m0、m1、...、m17,并设置它们的初始坐标 } //......2.....以上为最上层跳动块以及跳动竖条(就是那个关键的带缓动效果的) this.createEmptyMovieClip("mm", 0);//再创建一个mc,名称为mm mm.loadMovie("./music_lib/"+g+".swf");//导入外部1.mp3、2.mp3、...、n.mp3音乐文件经过转换的1.swf、2.swf、....、n.swf onEnterFrame = function () { //检测装载进度情况 var mmload = mm.getBytesLoaded(); |