本文导入自一个特别古老的 WordPress 博客,内容可能会显得太年轻、太简单,不具有太大参考价值! 了解详情»
之前突然想到有些flash会显示音乐频谱,于是找了一个相对简单的代码,收藏之

演示



点击这里下载源文件(不含音乐文件)

点击这里直接打开swf

代码

下为关键代码,直接粘贴进去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
//右声道 g.lineStyle(0, 0x00FF00); g.moveTo(0, WAVE_Y2); //将画笔移动到右声道的点上 for (i = 0; i
function onPlaybackComplete(event:Event) { removeEventListener(Event.ENTER_FRAME, onEnterFrame); //播放结束了,就不必继续进行频谱显示了 }

//代码结束