17
May
Another variation of Sound Spectrum 1. Used bitmap data and applied some blur.
Here is the code
Actionscript:
-
package
-
{
-
import flash.display.Bitmap;
-
import flash.display.BitmapData;
-
import flash.display.Shape;
-
import flash.display.Sprite;
-
import flash.display.StageAlign;
-
import flash.display.StageScaleMode;
-
import flash.events.Event;
-
import flash.events.IOErrorEvent;
-
import flash.events.MouseEvent;
-
import flash.filters.BitmapFilterQuality;
-
import flash.filters.BlurFilter;
-
import flash.geom.ColorTransform;
-
import flash.geom.Point;
-
import flash.geom.Rectangle;
-
import flash.media.Sound;
-
import flash.media.SoundChannel;
-
import flash.media.SoundLoaderContext;
-
import flash.media.SoundMixer;
-
import flash.net.URLRequest;
-
import flash.text.TextField;
-
import flash.text.TextFormat;
-
import flash.utils.ByteArray;
-
/**
-
* ...
-
* @author Ajay Chhaya
-
*/
-
[SWF(width=512,height=200, backgroundColor="0x0", frameRate="32")]
-
public class SpectrumBar5 extends Sprite
-
{
-
private var txt:TextField = new TextField();
-
private var containerArray:Vector.<Bar> = new Vector.<Bar>;
-
private var snd:Sound;
-
private var bytes:ByteArray = new ByteArray();
-
-
private var spectrumSprite:Sprite;
-
private var bitmapSource:Bitmap;
-
//private var bitmapPolar:Bitmap;
-
private var spectrumBitmapData:BitmapData;
-
-
private var bars:int = 128;
-
private var strechFactor:int = 2;
-
-
public function SpectrumBar5()
-
{
-
if (stage) init();
-
else addEventListener(Event.ADDED_TO_STAGE, init);
-
-
}
-
private function init():void {
-
stage.scaleMode = StageScaleMode.NO_SCALE;
-
stage.align = "LT";
-
removeEventListener(Event.ADDED_TO_STAGE, init);
-
-
// add information text
-
var tf:TextFormat = new TextFormat();
-
tf.font = "Arial";
-
txt.textColor = 0x888888;
-
tf.color = 0x888888;
-
txt.text = "Click to Start";
-
txt.setTextFormat(tf);
-
txt.x = txt.y = 10;
-
txt.selectable = false;
-
txt.width = stage.stageWidth;
-
-
rectDraw();
-
addChild(txt);
-
//strechFactor = 256 / bars;
-
-
stage.addEventListener(MouseEvent.MOUSE_DOWN, prepareSound);
-
}
-
private function prepareSound(e:Event = null):void {
-
-
-
stage.removeEventListener(MouseEvent.MOUSE_DOWN, prepareSound);
-
//mp3 downloaded from incompetech.com
-
playSound('Pure Attitude.mp3');
-
-
}
-
-
private function playSound(url:String):void
-
{
-
snd = new Sound();
-
var context:SoundLoaderContext = new SoundLoaderContext(0, true);
-
var sndReq:URLRequest = new URLRequest(url);
-
-
snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
-
snd.addEventListener(Event.COMPLETE, completeHandler);
-
-
txt.text = "Please wait for the file to be loaded.";
-
-
snd.load(sndReq,context);
-
addEventListener(Event.ENTER_FRAME, onEnter);
-
var sndCh:SoundChannel = new SoundChannel();
-
sndCh = snd.play();
-
-
}
-
private function errorHandler(errorEvent:IOErrorEvent):void {
-
txt.text = "The sound could not be loaded: " + errorEvent.text;
-
}
-
private function completeHandler(event:Event):void {
-
txt.text = "File is ready.";
-
-
}
-
-
-
private function onEnter(event:Event):void
-
{
-
SoundMixer.computeSpectrum(bytes, true, strechFactor);
-
var sp:Bar;
-
var i:int;
-
for (i = 0; i <bars; i++) {
-
sp = containerArray[i];
-
var rl:Number = bytes.readFloat();
-
sp.setLevel(rl);
-
}
-
-
//var sine:Number=Math.sin(angle)*RANGE;
-
//var cosine:Number=Math.cos(angle)*RANGE;
-
var blurX:int=2;
-
var blurY:int=8;
-
var filter:BlurFilter=new BlurFilter(blurX,blurY,BitmapFilterQuality.LOW);
-
-
var rettangolo:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
-
var p:Point = new Point();
-
-
-
spectrumBitmapData.scroll(0, 12);
-
spectrumBitmapData.applyFilter(spectrumBitmapData, rettangolo, p, filter);
-
spectrumBitmapData.draw(spectrumSprite);
-
-
-
}
-
-
private function rectDraw():void
-
{
-
-
// create spectrumBitmapData
-
spectrumBitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x0);
-
-
bitmapSource = new Bitmap();
-
addChild(bitmapSource);
-
bitmapSource.bitmapData = spectrumBitmapData;
-
-
spectrumSprite = new Sprite();
-
//addChild(spectrumSprite);
-
var shape:Shape;
-
var nx:int, ny:int;
-
var startX:int = 0;
-
var startY:int = stage.stageHeight-80;
-
var w:int = 2;
-
for (var i:int = 0; i <bars; i++) {
-
nx = i * (w+2);
-
var b:Bar = new Bar();
-
b.drawBar();
-
b.x = nx + startX;
-
b.y = startY;
-
spectrumSprite.addChild(b);
-
containerArray.push(b);
-
}
-
graphics.lineStyle(1, 0x333333, 1);
-
graphics.moveTo(startX, startY + w);
-
graphics.lineTo(nx + startX, startY + w);
-
-
spectrumBitmapData.draw(spectrumSprite);
-
}
-
public function rgbToHex(r:int,g:int,b:int):uint
-
{
-
//trace(r, g, b);
-
var hex:uint = (r <<16 | g <<8 | b);
-
return hex;
-
}
-
-
}
-
-
}
-
-
import flash.display.Bitmap;
-
import flash.display.BitmapData;
-
import flash.display.Sprite;
-
import flash.display.Shape;
-
import com.ajaychhaya.utils.Util;
-
-
class Bar extends Sprite {
-
public static const NUM_RECT:uint = 20;
-
private var boxW:int = 2;
-
private var gap:int = 2;
-
private var _rects:Vector.<Box> = new Vector.<Box>;
-
private var currentLevel:int = 20;
-
-
public function drawBar():void
-
{
-
var b:Box;
-
var nx:int, ny:int;
-
var startY:int = 0;
-
-
var r:Number = Math.random() * 255;
-
var g:Number = Math.random() * 255;
-
var bb:Number = Math.random() * 255;
-
-
var clr:uint = Util.rgbToHex(r, g, bb);
-
-
for (var j:int = 0; j <NUM_RECT; j++) {
-
ny = j * (boxW + 2);
-
b = new Box(clr);
-
b.x = nx;
-
b.y = startY - ny;
-
b.cacheAsBitmap = true;
-
//b.visible = false;
-
addChild(b);
-
_rects.push(b);
-
}
-
-
}
-
public function setLevel(level:Number):void {
-
level = level * NUM_RECT;
-
currentLevel = (currentLevel <level) ? level : currentLevel - 1;
-
var i:int;
-
for (i = 0; i<NUM_RECT; i++) {
-
_rects[i].visible = i <currentLevel;
-
-
}
-
-
}
-
}
-
-
-
class Box extends Shape {
-
public var boxW:int = 2;
-
public var boxH:int = 2;
-
public function Box(clr:uint)
-
{
-
graphics.lineStyle(0, 0, 0);
-
graphics.beginFill(clr);
-
graphics.drawRect(0, 0, boxW, boxH);
-
graphics.endFill();
-
}
-
}