<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
/**
* 5 band EQ
* Original @author leo@blixtsystems.com
* http://www.blixtsystems.com/2008/05/simple-3-band-eq-with-flash-player-10/
*
* Adapted by kevin@ciboloweb.com
* http://ciboloweb.com/flex-sound-equalizer
*/
import mx.controls.VSlider;
import __AS3__.vec.Vector;
public static const BUFFER_SIZE:int = 4096;
public static const SAMPLE_RATE:int = 44100;
private const _soundURI:String = "loop.mp3";
private const _out_snd:Sound = new Sound();
private const _eqL:EQ = new EQ();
private const _eqR:EQ = new EQ();
private const _loop_snd:Sound = new Sound();
private const _sliders_vect:Vector.<VSlider> = new Vector.<VSlider>();
private var _samples:ByteArray;
public function init():void
{
setupEQ();
loadSound();
}
private function loadSound():void
{
_loop_snd.addEventListener(Event.COMPLETE, loadSoundComplete);
_loop_snd.addEventListener(IOErrorEvent.IO_ERROR, loadSoundError);
_loop_snd.load(new URLRequest(_soundURI));
}
private function loadSoundComplete(event:Event):void
{
startPlay();
}
private function startPlay():void
{
_out_snd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
_out_snd.play();
}
private function loadSoundError(event:Event):void
{
trace("loadError");
}
private function setupEQ():void
{
var slider:VSlider;
for (var i:int = 0; i < _eqL.gains.length; i++) {
slider = new VSlider();
slider.x = (i * 35);
slider.y = 20;
slider.value = .5;
slider.maximum = 1;
slider.minimum = 0;
slider.addEventListener("change", changeEQHandler);
addChild(slider);
_sliders_vect[i] = slider;
}
var event:Event = new Event("change");
changeEQHandler(event);
}
private function processSound(event:SampleDataEvent):void {
_samples = new ByteArray();
var len:Number = _loop_snd.extract(_samples, BUFFER_SIZE);
var i:int=0;
var l:Number;
var r:Number;
if ( len < BUFFER_SIZE ) { len += _loop_snd.extract(_samples,BUFFER_SIZE-len,0);
}
_samples.position = 0;
while (i < BUFFER_SIZE) {
event.data.writeFloat(_eqL.compute(_samples.readFloat()));
event.data.writeFloat(_eqR.compute(_samples.readFloat()));
i++;
}
}
private function changeEQHandler(event:Event):void
{
var i:int = 0;
for(i = 0; i < _eqL.gains.length; i++){
_eqL.gains[i] = _sliders_vect[i].value * 2;
}
for(i = 0; i < _eqR.gains.length; i++){
_eqR.gains[i] = _sliders_vect[i].value * 2;
}
}
]]>
</mx:Script>
</mx:Application>