用SoundMixer.ComputeSpectrum可以很简单的制作音乐波形图,当然你得用ActionScript 3.
第一个例子是使用256个矩形组成,每次改变其scaleY.
第二个例子是使用BimtapData类(根据Andre Michelle的例子改写的)。
第一个例子可能要好理解一些。
这里下载:ComputeSpectrumExample

//ComputeSpectrumeExample.as
package {
import flash.display.Sprite;
import flash.events.*;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.media.Sound;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
[SWF( backgroundColor='0', frameRate='30', height='300', width='300')]
public class ComputeSpectrumExample extends Sprite {
private var sound: Sound;
private var bytes: ByteArray;
private var rect:Array;
public function ComputeSpectrumExample(){
sound = new Sound();
sound.load( new URLRequest( 'song.mp3' ) );
sound.play(0,100000000);
stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );
bytes = new ByteArray();
rect=new Array();
createRect();
}
private function createRect():void{
for(var i:int=0;i<256;i++){
var r:Rect=new Rect(1,1,Math.random()*0xffffff);
r.x=i+20;
r.y=300;
addChild(r);
rect.push(r);
}
}
private function onEnterFrame( event: Event ): void
{
SoundMixer.computeSpectrum( bytes, true, 0 );
var value: Number;
var smooth: Number;
for( var i: int = 0 ; i < 256 ; i++ )
{
var rectangle:Rect=rect[i];
value = bytes.readFloat();
if( i == 0 ) smooth = value;
else smooth += ( value - smooth ) ;
rectangle.scaleY=smooth*200;
}
}
}
}
//Rect.as
package {
import flash.display.Shape;
public class Rect extends Shape {
public function Rect(width:Number,height:Number,color:uint){
graphics.beginFill(color);
graphics.moveTo(0,0);
graphics.lineTo(width,0);
graphics.lineTo(width,-height);
graphics.lineTo(0,-height);
graphics.lineTo(0,0);
graphics.endFill();
}
}
}