public class SoundDrawBar extends Sprite
{
private var url:String = "a.mp3";
private var sound:Sound = new Sound(); //創建聲音
private var schannel:SoundChannel; //創建聲音通道
private var barray:ByteArray = new ByteArray(); //創建字節數組
private var ary:Array;
private var n:Number = 0; //記錄數量
private var lines:Sprite = new Sprite ;//線條的容器
public function SoundDrawBar():void
{
// var soundTest:SoundTest = new SoundTest(stage);
// addChild(soundTest);
init();
}
private function init():void
{
//將mp3文件載入到聲音並播放
var req:URLRequest = new URLRequest(url);
sound.load(req);
sound.play();
this.addChild(lines);
//從載入第壹幀開始,就不斷循環觸發的事件
this.addEventListener(Event.ENTER_FRAME, show);
}
//開始繪圖
private function show(evt:Event):void
{
if(Math.random() > 0.5){
var r:int =-Math.random()*20
}else{
r = Math.random()*20
}
n = 0; //先清零
lines.graphics.clear(); //清除所有圖形
//把音頻數據轉化為字節數組,並保存在barray裏,之後將會用這些數據生成動態變化的小豎線
SoundMixer.computeSpectrum(barray,true,0);
var tempx:int = 0;
var tempy:int = 100;
//繪制動態的小豎線動畫,讓每條線都隔壹點距離,所以用i+=16
for(var i:uint = 0; i < 400; i += 10)
{
n = barray.readFloat();
var num:Number = n * 100;
lines.graphics.lineStyle(4, 0x00ff00);
lines.graphics.moveTo(tempx, tempy); //繪制線條起始點
lines.graphics.moveTo(i, 100);
lines.graphics.lineTo(i, 100 - num); //繪制線條終點
lines.graphics.endFill();
tempx = i;
tempy = 100 - num;
}
}
}
其實主要妳拿到了barray的數據,根據這數據做出來的東西,都可以有跟隨音樂波動的效果。