18Apr

Sound Spectrum Analyzer - Part II

No comments

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;
			}
		}
	}
}

Share/Save/Bookmark

Categories: Actionscript 3, Audio

Friday, April 18th, 2008 at 10:08 am and is filed under Actionscript 3, Audio. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a reply