當前位置:編程學習大全網 - 編程語言 - AS3中那種隨著音樂節奏變換的聲波圖形要用什麽函數才能實現呢?

AS3中那種隨著音樂節奏變換的聲波圖形要用什麽函數才能實現呢?

大概原理就是,妳load完壹首歌之後,play(),在註冊壹個enterframe方法,在這個方法內,用SoundMixer.computeSpectrum(bArray,true,0); //把音頻數據轉化為字節數組,並保存在barray裏,(SoundMixer類會自動獲取在程序中的聲音流).然後用二進制的bArray.readFloat()得到每壹幀的聲音數據,根據這個聲音數據做妳想做的事,我舉個簡單的例子。

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的數據,根據這數據做出來的東西,都可以有跟隨音樂波動的效果。

  • 上一篇:記錄第壹節編程課的日誌。
  • 下一篇:烏海市第二中學的概況
  • copyright 2024編程學習大全網