Pretty Music

13/04/2008

Just an experiment using the SoundMixer and BitmapData class.

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Source code:

Actionscript:
  1. package {
  2.  
  3.     import flash.display.MovieClip;
  4.     import flash.media.Sound;
  5.     import flash.media.SoundChannel;
  6.     import flash.media.SoundMixer;
  7.     import flash.net.URLRequest;
  8.     import flash.events.Event;
  9.     import flash.events.ProgressEvent;
  10.     import flash.display.Bitmap;
  11.     import flash.display.BitmapData;
  12.     import flash.utils.ByteArray;
  13.     import flash.geom.Rectangle;
  14.     import flash.geom.Point;
  15.     import flash.filters.BlurFilter;
  16.     import flash.text.TextField;
  17.     import flash.text.TextFormat;
  18.  
  19.     public class Main extends MovieClip {
  20.  
  21.         public var sound:Sound;
  22.         public var soundChannel:SoundChannel;
  23.         public var byteArray:ByteArray;
  24.         public var bmp:Bitmap;
  25.         public var bmpData:BitmapData;
  26.         public var rect:Rectangle;
  27.         public var pt:Point;
  28.         public var blur:BlurFilter;
  29.         public var loadDisplay:TextField;
  30.  
  31.         public function Main() {
  32.             sound = new Sound(new URLRequest("sound.mp3"));
  33.             sound.addEventListener(ProgressEvent.PROGRESS,soundLoading);
  34.             sound.addEventListener(Event.COMPLETE,soundLoaded);
  35.            
  36.             byteArray = new ByteArray();
  37.            
  38.             bmpData = new BitmapData(550,400,false,0xFF000000);
  39.             bmp = new Bitmap(bmpData);
  40.             addChild(bmp);
  41.            
  42.             rect = new Rectangle(0,0,550,200);
  43.             pt = new Point(0,0);
  44.             blur = new BlurFilter(10,10,1);
  45.            
  46.             loadDisplay = new TextField();
  47.             loadDisplay.x = 215;
  48.             loadDisplay.y = 190;
  49.             loadDisplay.selectable = false;
  50.             addChild(loadDisplay);
  51.            
  52.            
  53.         }
  54.         public function soundLoaded(e:Event){
  55.             soundChannel = sound.play(0,1000);
  56.             addEventListener(Event.ENTER_FRAME,enterFrame);
  57.             removeChild(loadDisplay);
  58.         }
  59.         public function soundLoading(e:ProgressEvent){
  60.             bmpData.fillRect(new Rectangle(0,0,550,400),0xFFFF0000);
  61.             loadDisplay.text = "Loading ("+Math.round((e.bytesLoaded/e.bytesTotal)*100)+"%)";
  62.         }
  63.            
  64.         public function enterFrame(e:Event) {
  65.             SoundMixer.computeSpectrum(byteArray,true,0);
  66.             bmpData.scroll(0,10);
  67.             for (var i=0; i <256; i+=2) {
  68.                 var a:Number = byteArray.readFloat();
  69.                 var num:Number = a*500;
  70.                 var r:Rectangle = new Rectangle(i*2.2,1,a*40,a*40);
  71.                 bmpData.fillRect(r,0xFF0000|num <<8);
  72.             }
  73.             bmpData.applyFilter(bmpData,rect,pt,blur);
  74.         }
  75.  
  76.     }
  77. }

There are 3 comments in this article:

  1. 13/04/2008Adam say:

    Nice work mate :p

    Pretty music indeed.

  2. 5/06/2008Daniel say:

    Looks kool man... i see you used music from Zelda:Ocarina of time

  3. 22/06/2008Andrew say:

    I sure did :)

Write a comment: