之前突然想到有些flash会显示音乐频谱,于是找了一个相对简单的代码,收藏之
演示
代码
下为关键代码,直接粘贴进去flash第一帧也就OK了
import flash.display.Graphics; import flash.display.Sprite; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; const WAVE_HEIGHT:int = 100; //由于flash给你的音频数据每一个都是-1到1之间的浮点数(小数),因此只要乘上这个就可以搞出高度差 const WAVE_Y1:int = 100; const WAVE_Y2:int = 300; const CHANNEL_LENGTH:int = 256; //根据flash规定,给你的音频数据长度为512,其中前一半为左声道,另一半就是右声道了 var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("bigSound.mp3"); //从外获取音乐文件。 snd.load(req); var channel:SoundChannel; channel = snd.play(0,99); //从0ms开始播放,重复99次 snd.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); //设定检测,当播放完毕时候调用onPlaybackComplete var bytes:ByteArray = new ByteArray(); var display:Sprite = new Sprite(); //显示频谱用的精灵(个人认为在老版本里对应的是影片剪辑) this.addChild(display); //让前面的display精灵显示在Flash舞台上 this.addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event):void { SoundMixer.computeSpectrum(bytes, false, 0); //false处如果修改为true则为FFT模式 var g:Graphics = display.graphics; var n:Number = 0; g.clear(); //左声道 g.lineStyle(0, 0x00FF00); g.moveTo(0, WAVE_Y1); for (var i:int = 0; i<CHANNEL_LENGTH; i++) { g.lineTo(i*2, WAVE_Y1 – n); } //右声道 g.lineStyle(0, 0x00FF00); g.moveTo(0, WAVE_Y2); //将画笔移动到右声道的点上 for (i = 0; i<CHANNEL_LENGTH; i++) { g.lineTo(i*2, WAVE_Y2 – n); } } function onPlaybackComplete(event:Event) { removeEventListener(Event.ENTER_FRAME, onEnterFrame); //播放结束了,就不必继续进行频谱显示了 } //代码结束

我发现你弄的东西都是绿绿的~~
我比较喜欢绿色和蓝色,
还有就是我使用的音乐编辑软件界面是绿色的…
…习惯[被]养成了