品牌创意企业推荐 推荐: 网站建设 北京网站建设 
 
搜索 竞赛 产业 文案 论吧 论坛 酷站 矢量库 图片库 设计网址 作品集> 注册 - 登陆
首 页设计资讯大赛征集平面设计UI设计CG/动画工业设计建筑环境数码影像教程区设计访谈 精品欣赏会员作品集
>> 论坛发布优秀教程申请个人教程专区
推荐:经典素材资源
滚动新闻:[6-10]融于意,形于展!---52design作品集、设计师网上联展!
当前位置: 首页 >> 教程 >> Flash教程 >>正文
用flash9制作的播放音乐时频谱真实显示
资讯/教程/作品在线投稿  - 进入素材基地 - 论坛讨论 - 查看更多相关内容
时 间:2007-8-29 16:51:51   作者:   来 源:52design.com   浏览:
(需要首先将mp3转换为swf,再对转换后的swf进行处理,才能正确显示声音频谱),可以说Flash8及以下的版本对声音的支持是有限的,而Flash9在此方面进行了升级,对声音的处理能力大为提升,下面发一个用flash9制作的播放音乐时频谱真实显示的小实例(参考了他人心得),界面如下图1:

1.打开Flash9,在主场景第一帖上(仅此一帧):

import flash.display.Sprite;  
import flash.display.BlendMode;  //混合模式类 
import flash.events.*;   //事件类
import flash.media.Sound;    //声音类
import flash.media.SoundMixer;  //混音器类 
import flash.media.SoundChannel; //声道类  
import flash.net.URLRequest;    //URLRequest类
import flash.utils.ByteArray;   //ByteArray类
import flash.display.Bitmap; //位图类
import flash.display.BitmapData;
import flash.filters.BlurFilter; //滤镜类
import flash.filters.ColorMatrixFilter; 
import flash.filters.BitmapFilterQuality;  //滤镜品质类
import flash.geom.Rectangle;    //矩形类
import flash.geom.Point;  //Point类(点)
Stage.showDefaultContextMenu = false;
        //声明用来包含line和bg的Sprite
var Main:Sprite=new Sprite();
        //声明用来画线的Sprite
var line:Sprite=new Sprite();
        //声明用来放位图数据的BitmapData
var bmpData:BitmapData=new BitmapData(350,200,true,0xFF0000);
        //声明用来显示效果的Bitmap
var bmp:Bitmap=new Bitmap(bmpData);
        //声明一个ByteArray对象
var bArray:ByteArray = new ByteArray();
        //声明一个数组对象
var Ary:Array;
        //声明两个数字对象
var n:Number = 0;
var c:Number = 0;
        //声明一个ColorMatrix滤镜
var colorM:ColorMatrixFilter=new ColorMatrixFilter([0.98,0,0,0,0,0,0.98,0,0,0,0,0,0.98,0,0,0,0,0,0.90,0,]);
        //声明一个BlurFilter滤镜
var blur:BlurFilter = new BlurFilter(7,7,BitmapFilterQuality.LOW);
        //声明一个矩形
var r:Rectangle=new Rectangle(0,0,350,200);
        //声明一个点
var point=new Point(0,0);      
function showBar1(event:Event):void{
        n = 0;
        //这里是为了每2次才执行一次滤镜而做的if,如果需要让原来的波形图消失的更慢就把2改成更大的数字
        if(c%2==0){
        //将Main的内容绘制到bmpData
        bmpData.draw(Main);
        //应用滤镜
        bmpData.applyFilter(bmpData,r,p,colorM);
        bmpData.applyFilter(bmpData,r,p,blur);
        }
        c++;
        //清除绘图
        line.graphics.clear();
        //设置线条样式,颜色green,宽度1,透明度100
        line.graphics.lineStyle(1,0x00CC00,100);
        //将当前声音输出为ByteArray,注意哦,这次用的是false,上次是true
        SoundMixer.computeSpectrum(bArray,false,0);
        for(var i=0; i<256; i+=2){
                //在ByteArray中读取一个32位的单精度浮点数
                n = bArray.readFloat();
                //这个实际作用是把n扩大一下
                n = n*360;
                //如果i不为0
                if(i!=0){
                //画波形图
                line.graphics.lineTo(50+i,100-n/5);
                }else{
                //移动   
                line.graphics.moveTo(50,100-n/5);
    }
  }
}
//
play_btn.addEventListener(MouseEvent.MOUSE_DOWN,playSounds);
stop_btn.addEventListener(MouseEvent.MOUSE_DOWN,stopSounds);
pause_btn.addEventListener(MouseEvent.MOUSE_DOWN,pauseSounds);
var kaiguan:Boolean =false;
function playSounds(event:MouseEvent):void {
   if(kaiguan){
    _channel = _sound.play(_position);
kaiguan=false;
}
}
function stopSounds(event:MouseEvent):void {
    //....设置为0位置才能使进度条归零.....
_channel = _sound.play(0);
//......停止声音的方法........
SoundMixer.stopAll( );
kaiguan=true;
}
function pauseSounds(event:MouseEvent):void {
    if(!kaiguan) {
      _position = _channel.position;
      _channel.stop( );
   kaiguan = !kaiguan;
  }          
}
//
var _position:int =0;
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(event:Event):void{
     //..........进度条初始值.........................
    var barWidth:int = 271;
    var barHeight:int = 5;
    var loaded:int = _sound.bytesLoaded;
    var total:int = _sound.bytesTotal;           
    var length:int = _sound.length;
    _position = _channel.position;
    //................ 画进度条背景....................................
    graphics.clear(  );
    graphics.beginFill(0x333333);
    graphics.drawRect(40, 187, barWidth, barHeight);
    graphics.endFill(  );
//..................................................................
    //.............时间显示设置区................................................
var miao:int=Math.round(length/1000)-Math.round(length/60000)*60;
var fen:int=Math.round(length/60000);
if(fen<10){
  if(Math.abs(miao)<10){
   musicTimer.text="0"+fen+":0"+ Math.abs(miao);
  }else{
  musicTimer.text="0"+fen+":"+ Math.abs(miao);}
  }else{
   if(Math.abs(miao)<10){
    musicTimer.text=fen+":0"+ Math.abs(miao);
    }else{
     musicTimer.text=fen+":"+ Math.abs(miao);
  }
}
var playmiao:int=_position/1000;
if(playmiao<60){
  if(playmiao<10){
     musicPlayingTimer.text="00:0"+playmiao;
  }else{
   musicPlayingTimer.text="00:"+playmiao;
   }
     }
if(playmiao>=60&&playmiao<120){
  if(Number(playmiao-60)<10){
  musicPlayingTimer.text="01:0"+Number(playmiao-60);
  }else{
   musicPlayingTimer.text="01:"+Number(playmiao-60);
  }
  }
if(playmiao>=120&&playmiao<180){
  if(Number(playmiao-120)<10){
  musicPlayingTimer.text="02:0"+Number(playmiao-120);
  }else{
  musicPlayingTimer.text="02:"+Number(playmiao-120);
  }
  }
if(playmiao>=180&&playmiao<240){
  if(Number(playmiao-180)<10){
  musicPlayingTimer.text="03:0"+Number(playmiao-180);
  }else{
  musicPlayingTimer.text="03:"+Number(playmiao-180);
  }
  }
if(playmiao>=240&&playmiao<300){
  if(Number(playmiao-240)<10){
  musicPlayingTimer.text="04:0"+Number(playmiao-240);
  }else{
  musicPlayingTimer.text="04:"+Number(playmiao-240);
  }
  }
if(playmiao>=300&&playmiao<360){
  if(Number(playmiao-300)<10){
  musicPlayingTimer.text="05:0"+Number(playmiao-300);
  }else{
  musicPlayingTimer.text="05:"+Number(playmiao-300);
  }
  }
if(playmiao>=360&&playmiao<420){
  if(Number(playmiao-360)<10){
  musicPlayingTimer.text="06:0"+Number(playmiao-360);
  }else{
  musicPlayingTimer.text="06:"+Number(playmiao-360);
  }
  }
  //...........................................................................
    if(total > 0) {
           // 已经播放声音百分比
  var percentBuffered:Number = loaded / total;
                // 画已经播放声音进度条
      graphics.beginFill(0x666666);
      graphics.drawRect(40, 187, barWidth*percentBuffered,barHeight);
      graphics.endFill(  );               
                // 改变长度
       length /= percentBuffered;
    var percentPlayed:Number = _position / length;
    graphics.beginFill(0xFFFFFF);
       graphics.drawRect(40, 187,barWidth*percentPlayed,barHeight);
       graphics.endFill(  );
      }
   var volume:Number = (音量控制.vl_mc.x /50);
      setVolume(volume);

function setVolume(volume:Number):void {
     var transform:SoundTransform = _channel.soundTransform;
     transform.volume = volume;
     _channel.soundTransform = transform;
}
var _playList:Array;
var _songNameList:Array;// 歌曲列表
var _index:int = 0;       // 当前歌曲
PlayList();
function PlayList( ) {
//Main的混合模式为"添加"
Main.blendMode=BlendMode.ADD;
    //在舞台上显示各个部分
    Main.addChild(bmp);
    Main.addChild(line);
    addChild(Main);
this.addEventListener(Event.ENTER_FRAME,showBar1);
    //播放列表
    _playList = ["求佛.mp3","听妈妈的话.mp3","从开始到现在.mp3"];
_songNameList=["求佛","听 妈 妈 的 话","从开始到现在"];
playNextSong( );
}
var _channel:SoundChannel;
function playNextSong( ):void{
     if(_index < _playList.length) {
  _sound = new Sound( );
     _sound.load(new URLRequest(_playList[_index]));
  songName_txt.text=_songNameList[_index];
     _channel = _sound.play( ); 
  _channel.addEventListener(Event.SOUND_COMPLETE,onComplete);
  _index++;//侦听声音是否播完
  }
if(_index>=_playList.length){
      _index=0;
   }//循环播放
}
function onComplete(event:Event):void{
     playNextSong( );
}

2.上述代码中的stop_btn、play_btn、pause_btn分别是停止、播放、暂停按钮名称,其它的就不浪费篇幅了,另外请在当前目录下放置三首上述音乐(当然你也可以放你喜欢的,只需要更改上述代码中的音乐列表数组就成了),


本文链接:


52design素材资源库52design图片库52design酷站营

我爱设计网www.52design.com
(在线编辑:morion) 】【打印】【关闭】【设计论坛】【设计师作品集
免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有异议,请联络本站!
转载要求:文章作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站地址,且不准打上各自站点的水印。

经典设计欣赏 设计关键字:VI 新锐 包装 装帧 海报 地产广告 画册 名片 标志 软件界面 ICO 网页
hasexx摄影作品:光与影的美妙融合
hasexx摄影
ana maria 摄影作品欣赏
ana mari
时尚影像:蝶恋花
时尚影像:蝶恋花
sweetsecret的人像摄影--双人组合
sweetsec
纯净的秀美人体 摄影师眼中的非洲本色
纯净的秀美人体
水中挑战广角摄影
水中挑战广角摄影
韩国站点 素材资源 艺术摄影 游戏娱乐 影视网站 建筑家居 FLASH站 旅游购物 明星网站
设计门户 优秀企业 时尚品牌 象素站点 数码通信 设计公司 汽车网站 国外优秀 儿童网站
个性展示 网站教学 工 作 室 学校教育 卡通漫画 文化艺术 体育运动 美容健身 食品饮料
当日文章推荐 查看更多相关内容
综合艺术| 女装三项“十佳”大赛报名近尾声 设计 [8-29]工业资讯| 梦幻时尚的法式气息 标致308 RC [8-28]
工业资讯| 宁波市工业设计联合会成立大会成功举行 [8-28]大赛揭晓| 中国“西部之星”艺术设计大奖评选结果 [8-28]
建筑/环境资讯| 第四届中国威海国际建筑设计大奖赛评审 [8-28]软件资讯| WPS Office 2007 评测 [8-28]
互联网动态| 网民抢注企业域名仲裁获胜 [8-28]互联网动态| 百度缓存网页留大量黄色图片 用户质疑 [8-28]
平面资讯| 北京奥运门票设计精美极具收藏价值 [8-28]平面资讯| 海报采用两联拼贴式设计 [8-28]
会展| 平面设计在中国07展于12月在深圳揭 [8-28]网页设计| IE中伪类:hover的使用及BUG [8-27]
会员作品集推荐 查看更多推荐会员作品
平面作品 | 插画作品 | 网页作品 | 包装作品 | 软件UI | 室内设计 | 数码摄影作品 | 建筑环境 | 工业设计 | 其他
地产项目-他作欣赏3jobWEB界面与聊天界面设计MMOSITE-kart专区MMOSITE-sof专区:《QQ魔域》2.0公测专题页面首页
个人网站GUDONG`ROOM3D展示排行榜碎布娃娃—10

数据载入中...
视觉焦点
优秀作品在线投稿
·
Nigel Evan Dennis平面作品欣赏
Nigel
封面、宣传海报设计
封面、宣传海
Marsans Viagens 平面广告设计
Marsan
CelisBernardo 平面设计
CelisB

站点新入
虚拟警察巡控13门户网
虚拟警察巡控
hasexx摄影作品:光与影的美妙融合
hasexx
展区
·翰海博网诚聘资深网页设计师 (2-29止)
·招聘全职美工 (8-30止)
·儒林设计工作室_招聘 (6-30止)
·WEB/GUI界面设计师 (1-10止)
·高薪诚聘网页美工 (1-28止)
·招聘资深平面设计师 (1-31止)
韩国站点 素材资源 艺术摄影 游戏娱乐 影视网站 建筑家居 FLASH站 旅游购物 明星网站 个性展示 网站教学 工 作 室 学校教育
设计门户 优秀企业 时尚品牌 象素站点 数码通信 设计公司 汽车网站 国外优秀 儿童网站 文化艺术 体育运动 美容健身 食品饮料
网站名称:hpfmall
网站地址:http://www.hpfmall.com/
加入时间:2008-9-5 11:23:47
网站名称:themeforest
网站地址:http://themeforest.net/
加入时间:2008-9-5 11:12:59
网站名称:captiva.chevrolet
网站地址:http://captiva.chevrolet.com.cn/freedom/
加入时间:2008-9-5 11:12:28
网站名称:albumcreative
网站地址:http://www.albumcreative.com/
加入时间:2008-9-5 11:12:00
网站名称:p1w1max
网站地址:http://www.p1w1max.com/
加入时间:2008-9-5 11:07:04
网站名称:pixel-mix
网站地址:http://pixel-mix.sinacool.com/
加入时间:2008-9-5 11:06:04
关于本站 | 联系方式 | 商业服务 | 合作伙伴 | 站点地图 | 免责声明 | 版权声明 | 在线投稿