In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: mousine

Get Adobe Flash player
by hacker_3l0jolwn 04 Feb 2009
// forked from hysysk's mousine
package {
    import flash.display.Sprite;  
    import flash.text.TextField;  
    import flash.events.SampleDataEvent;
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundMixer;
    import flash.utils.ByteArray;
    import flash.display.Graphics;
	
    public class Mousine extends Sprite {
	private static const SAMPLE_RATE:int = 44100;
	private static const TWO_PI:Number = 2 * Math.PI;
	private static const PLOT_HEIGHT:int = 200;
	private static const CHANNEL_LENGTH:int = 256;

	private var phase:Number;
	private var freq:Number;
	private var amp:Number;
	private var snd:Sound;
		
        public function Mousine() {
            init();
        }
		
	private function init():void {
	    phase = 0;
	    freq = 440;
	    amp = 0.5;
	    snd = new Sound();
	    snd.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleData);
	    snd.play();
		
	    addEventListener(Event.ENTER_FRAME, onEnterFrame);
	}
		
	private function sampleData(event:SampleDataEvent):void {
	    var sample:Number;
	    for(var i:int = 0; i < 2048; i++) {
                phase += freq / SAMPLE_RATE;
		if(phase > 1.0) {
		    phase--;
		}
				
		sample = sineWave(phase) * amp;
				
		event.data.writeFloat(sample);
		event.data.writeFloat(sample);
	    }
	}
		
	private function sineWave(phase:Number):Number {
	    return Math.sin(phase * TWO_PI);
	}
		
	private function onEnterFrame(event:Event):void {
	    freq += (mouseX*2 - freq) * 0.02;
	    amp += (1.0-mouseY/stage.stageHeight - amp) * 0.1;	
	    visualize();
        }
		
	private function visualize():void {
            var bytes:ByteArray = new ByteArray();
			
	    SoundMixer.computeSpectrum(bytes, false, 0);
	    var g:Graphics = this.graphics;
	    g.clear();
	    g.lineStyle(0, 0xCCCCCC);
	    g.moveTo(0, PLOT_HEIGHT);
			
            var n:Number = 0;
            
            for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }
			
            g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
			
            g.lineStyle(0, 0x333333);
            g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
            
            for (i = CHANNEL_LENGTH; i > 0; i--) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }
			
            g.lineTo(0, PLOT_HEIGHT);
	}
    }
}