Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 1st, 2012  |  syntax: None  |  size: 5.76 KB  |  hits: 8  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  package com.everydayflash.equalizer {
  2.  
  3.     import com.everydayflash.equalizer.util.SpectrumReader;
  4.  
  5.     import flash.display.*;
  6.     import flash.display.BitmapData;
  7.     import flash.events.Event;
  8.     import flash.text.TextField;
  9.     import flash.text.TextFieldAutoSize;
  10.     import flash.text.TextFormat;
  11.  
  12.     public class Equalizer extends Sprite {
  13.  
  14.         public var canvas:BitmapData;
  15.         private var canvasHolder:Bitmap;
  16.  
  17.         private var settings:EqualizerSettings;
  18.         private var bars:Array;
  19.         private var reader:SpectrumReader;
  20.         private var effects:EqualizerEffects;
  21.  
  22.         private var hashTagWidth:uint = 250;
  23.  
  24.         protected var values:Array = [];
  25.         private var colors:Array = [ 0xff2bb9d1, 0xff36a9c6, 0xff4294b9, 0xff4d82ae, 0xff5278a7,
  26.                                      0xff5d649a, 0xff635892, 0xff6c4a87, 0xff704384, 0xff76347b]
  27.  
  28.         public function Equalizer(settings:EqualizerSettings = null) {
  29.             if (settings == null) settings = new EqualizerSettings();
  30.             effects = new EqualizerEffects(this);
  31.             update(settings);
  32.         }
  33.  
  34.         public function update(s:EqualizerSettings, b:Array=null):void {
  35.             settings = s;
  36.             bars = b;
  37.             if (canvas != null && contains(canvasHolder)) {
  38.                 removeChild(canvasHolder);
  39.                 canvas.dispose();
  40.             }
  41.  
  42.             reader = new SpectrumReader(settings.numOfBars);
  43.  
  44.             settings.colorManager.setSettings(settings);
  45.  
  46.             canvas = new BitmapData(1500, settings.height, true, 0x00000000);
  47.             canvasHolder = new Bitmap(canvas);
  48.             addChild(canvasHolder);
  49.  
  50.             effects.update(settings);
  51.         }
  52.  
  53.         public function getSettings():EqualizerSettings {
  54.             return settings;
  55.         }
  56.  
  57.         public function render(renderSpectrum:Boolean):void {
  58.             canvas.lock();
  59.             var spectrum:Array = reader.getSpectrum();
  60.  
  61.             var m:int = reader.getSize() / 2;
  62.             var bp:int = settings.barSize; // bar width
  63.             var gs:int = (settings.vgrid && settings.barSize > 1) ? 1 : 0; // grid space
  64.             var i:int; // current bar
  65.             var j:int; // yPositionInBar ---> this whole thing is rotated 90deg
  66.             var b:int; // xPositionInRow ---> this whole thing is rotated 90deg
  67.             var xPos:uint = 0;
  68.  
  69.             // for each bar we need to create
  70.             for(i = 0; i < reader.getSize(); i++) {
  71.  
  72.                 var weight:uint;
  73.                 if(bars)
  74.                     weight = bars[i].weight;
  75.                 else
  76.                     weight = 1;
  77.  
  78.                 var value:Number;
  79.  
  80.                 if(renderSpectrum)
  81.                     value = Math.min(settings.height, Math.round(spectrum[i] * settings.height));
  82.                 else
  83.                     value = 0;
  84.  
  85.                 var pixel:uint;
  86.                 var nbf:Number;
  87.                 // j == the max height of the spectrum canvas
  88.                 for (j = 0; j < settings.height + hashTagWidth; j++) {
  89.                     pixel = canvas.getPixel32(xPos, j);
  90.                     if (pixel != 0x00000000) {
  91.                         // var myAlpha:uint = pixel >> 24;
  92.                         // var maskedColor:uint = (pixel & 0x00FFFFFF);
  93.                         // var maskedAlpha:uint = (myAlpha & 0xFF000000);
  94.  
  95.                         // trace("alpha: " + myAlpha.toString(16));
  96.                         // trace("maskedAlpha: " + maskedAlpha.toString(16));
  97.                         // trace("maskedColor: " + maskedColor.toString(16));
  98.  
  99.                         // loop through each pixel in the row
  100.                         // bar < barWidth - gridSpace
  101.  
  102.                         // b ==  the width of the bar
  103.                         for (b = 0; b < (bp * weight) - gs; b++) {
  104.                             canvas.setPixel32(xPos + b, j, 0x00000000);
  105.                         }
  106.  
  107.                         if (settings.hgrid == 0)
  108.                             nbf++;
  109.                         else if (settings.hgrid != 0 && j % settings.hgrid == 0)
  110.                             nbf++;
  111.                     }
  112.  
  113.                     if (nbf > settings.height / (32 * (settings.hgrid + 1)))
  114.                         break;
  115.                 }
  116.  
  117.                 // Rendering new bars
  118.                 // j ==  the bar height && value is the height to draw
  119.                 //
  120.  
  121.                 if(!values[i]) {
  122.                     values.push([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
  123.                 }
  124.                 else {
  125.                     updateValues(values[i], value);
  126.                     var smoothedNumber:Number = smoothe(values[i]);
  127.                 }
  128.  
  129.  
  130.                 for (j = 0; j < smoothedNumber + hashTagWidth; j++) {
  131.                     if (settings.hgrid != 0 && j % settings.hgrid == 1)
  132.                         continue;
  133.                     if (settings.hgrid != 0 && value / settings.hgrid < 1)
  134.                         break;
  135.  
  136.                     // b ==  the width of the bar
  137.                     for (b = 0; b < (bp * weight) - gs; b++) {
  138.                         canvas.setPixel32(xPos + b, settings.height - j, colors[weight - 1]);
  139.                     }
  140.                 }
  141.  
  142.                 // increment the xPos - since bar widths are varied
  143.                 xPos += bp * weight;
  144.             }
  145.  
  146.             canvas.unlock();
  147.             settings.colorManager.onRendered();
  148.             effects.onRendered();
  149.         }
  150.  
  151.         protected function smoothe(group:Array):Number {
  152.             var length:uint = group.length;
  153.             var total:uint;
  154.             for(var i:uint=0; i < length; i++) {
  155.                 total = total + group[i];
  156.             }
  157.  
  158.             return total / length as Number;
  159.         }
  160.  
  161.         protected function updateValues(group:Array, value:Number):void {
  162.             group.shift();
  163.             group.push(value);
  164.         }
  165.     }
  166. }