AS3ではサウンドの波形が簡単にとれるということなのでちょっと作ってみました
色はランダムなので色々試してみるといいかも
※クリックでstart
Flash Player 10 にしてください
SoundComputeSpectrum.as
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.utils.ByteArray;
[SWF(width=512, height=200,backgroundColor=0xffffff)]
public class SoundComputeSpectrum extends Sprite {
[Embed(source="sound.mp3")]
private var mySound:Class;
private var lineArray:Array = new Array();
private const HEIGHT:int = 100;
private const LENGTH:int = 512;
private const VC:int = 20;
public function SoundComputeSpectrum() {
stage.addEventListener(MouseEvent.CLICK, init);
}
private function init(event:MouseEvent):void{
stage.removeEventListener(MouseEvent.CLICK, init);
var color:uint = Math.random()*0xffffff;
for(var i:int = 0; i < LENGTH; i++){
var sp:Sprite = new Sprite();
sp.x = i;
sp.y = HEIGHT;
sp.graphics.lineStyle(0,color);
sp.graphics.lineTo(0,1);
addChild(sp);
lineArray.push(sp);
}
var channel:SoundChannel = new mySound().play();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
channel.addEventListener(Event.SOUND_COMPLETE, completeHandler);
}
private function onEnterFrame(event:Event):void {
var bytes:ByteArray = new ByteArray();
SoundMixer.computeSpectrum(bytes, false, 0);
var rf:Number;
for (var i:int = 0; i < LENGTH; i++) {
rf = bytes.readFloat();
lineArray[i].alpha = Math.abs(rf);
lineArray[i].scaleY = -rf*HEIGHT;
}
var ro:Number = stage.transform.colorTransform.redOffset + Math.random()*VC - VC/2;
var go:Number = stage.transform.colorTransform.greenOffset + Math.random()*VC - VC/2;
var bo:Number = stage.transform.colorTransform.blueOffset + Math.random()*VC - VC/2;
stage.transform.colorTransform = new ColorTransform(1,1,1,1,ro,go,bo,0);
}
private function completeHandler(event:Event):void {
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
}
自分のやりかたが悪いのでちょっと重いですが、がんばればかなり軽くなるはず!
それにしても簡単に波形がとれていいですねー
あとByteArray便利
こいつがあればなんでも出来そうな気がする! おおげさですかw
今度ByteArrayを使ってごにょごにょやってみようかな
