ちょっとしたイコライザ

090620_one

先日の音楽とswfを同期させる処理を調べていたら、「TheFlashBlog」さんを見つけた。

音楽に合わせて円を描くちょっとしたイコライザ的なもの(参照)。

とりあえず、わけのわからぬままコピペしてちょいと修正してみた。

[as3]
//変数類の宣言
var s:Sound = new Sound();
var sc:SoundChannel;
var ba:ByteArray = new ByteArray();
var array:Array;
//URLをセット
s.load(new URLRequest("http://domain.domain/path.mp3"));

//読み込み時のイベント登録
this.addEventListener(Event.ENTER_FRAME, spectrum);
var a:Number = 0;

//波形を表示する
function spectrum(event:Event){
a = 0;
graphics.clear();
SoundMixer.computeSpectrum(ba,true,0);
for(var i=0; i < 256; i=i+8){
a = ba.readFloat();
var num:Number = a*360;
graphics.lineStyle( num/15 , 0x0066FF | (num<< 8));
graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,i);
}
}

// 再生ボタンを押したとき
play_b.buttonMode=true;
play_b.addEventListener(MouseEvent.CLICK,function(event){
//現在再生中の音楽を停止
if(sc){
sc.stop();
}
if(s){
//9999回リピートさせ再生
sc = s.play(0, 99999);
}
});
// 停止ボタン
stop_b.buttonMode=true;
stop_b.addEventListener(MouseEvent.CLICK,function(event){
//再生停止
if(sc){
sc.stop();
}
});
[/as3]

で、出来上がったのがこれ↓。

[swf w=400 h=400]http://oneday.ter.jp/swf_data/090620/test.swf[/swf]

こんなに簡単にできるんだ。

やっぱas3はおもろいなぁ。