So, with some base code from gotoandlearn.com I wanted to play around a little more with the sound spectrum.
Here is the main document class:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.filters.BitmapFilter;
import flash.filters.BitmapFilterQuality;
import flash.filters.GlowFilter;
import flash.filters.BlurFilter;
import flash.geom.Point;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.utils.ByteArray;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import fl.controls.Button;
public class Main extends Sprite
{
private var sp:Sprite = new Sprite();
private var ba:ByteArray = new ByteArray();
private var bmd:BitmapData = new BitmapData(700, 700, true, 0x000000);
private var blur:BlurFilter = new BlurFilter(2,10,3);
public var s:Sound = new Sound();
private var channel:SoundChannel;
private var isPlaying:Boolean;
public function Main()
{
var isPlaying:Boolean = false;
var ba:ByteArray = new ByteArray();
addEventListener(Event.ENTER_FRAME, loop);
var bm:Bitmap = new Bitmap(bmd);
addChild(bm);
var sp:Sprite = new Sprite();
addChild(sp);
// add the button
var btn = new Button();
btn.width = 300;
btn.height = 30;
btn.move ( 370, 650 );
btn.label = "Play / Stop Toggle";
addChild(btn);
btn.addEventListener(MouseEvent.CLICK, playSong);
}
private function loop(e:Event):void
{
sp.graphics.clear();
sp.graphics.lineStyle(3, Math.random() * 0xFFFFFF);
sp.graphics.moveTo(-1, 300);
SoundMixer.computeSpectrum(ba);
for(var i:uint=0; i<256; i++)
{
var num:Number = -ba.readFloat()*200 + 400;
sp.graphics.lineTo(i*2, num);
}
bmd.draw(sp);
bmd.applyFilter(bmd,bmd.rect,new Point(),blur);
bmd.scroll(3,-10);
}
public function playSong(m:Event):void
{
if (!isPlaying)
{
// create a new sound
var s:Sound = new Sound();
s.load(new URLRequest("http://manewc.com/projects/flash/mp3/MagicCarpetRide.mp3"));
// play the music
channel = s.play();
isPlaying = true;
}
else
{
// stop the music
channel.stop();
isPlaying = false;
}
}
}
}
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.