sound gen 00

by yukifuruyoru
♥0 | Line 108 | Modified 2010-08-24 08:04:36 | MIT License
play

ActionScript3 source code

/**
 * Copyright yukifuruyoru ( http://wonderfl.net/user/yukifuruyoru )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/9FgD
 */

package {
    import flash.text.TextField;
    import flash.media.SoundChannel;
    import flash.media.Sound;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    
    public class FlashTest extends Sprite {
        public function FlashTest() {
            var mult:uint=4;
            var mySound:BS=new BS(1,0.15,110*mult);
            var chan:SoundChannel;
            
            var flag:Boolean=false;
            var mat:Sprite=new Sprite;
            var b1:Sprite=new Sprite;
            b1.graphics.beginFill(0);
            b1.graphics.lineTo(32,15);
            b1.graphics.lineTo(0,32);
            b1.graphics.lineTo(0,0);
            b1.graphics.endFill();
            var b2:Sprite=new Sprite;
            b2.graphics.beginFill(0);
            b2.graphics.drawRect(0,0,32,32);
            b2.graphics.endFill();
            mat.addChild(b1);
            mat.addChild(b2);
            mat.addEventListener(MouseEvent.MOUSE_DOWN,blink);
            mat.x=216;
            mat.y=216;
            addChild(mat);
            function blink():void {
                if(flag){chan.stop();b2.visible=true;flag=false;}
                else{
                    chan=mySound.play();b2.visible=false;flag=true;
                    tf.text=(mult*110).toString()+"Hz";
                }
            }
            
            var tog:Sprite=new Sprite;
            tog.graphics.beginFill(0);
            tog.graphics.drawRoundRect(0,0,20,64,10);
            tog.graphics.endFill();
            tog.addEventListener(MouseEvent.MOUSE_DOWN,onTog);
            addChild(tog);
            tog.x=225;
            
            var tf:TextField=new TextField;
            addChild(tf);
            function onTog(e:MouseEvent):void {
                if(tog.mouseY>tog.height/2){
                    if(mult){mult--;}
                }
                else{
                    mult++;
                }
                reSound();
            }
            function reSound():void {
                if(flag)blink();
                mySound=new BS(1,0.15,110*mult);
                blink();
            }

            
        }
    }
}
import flash.text.TextField;
import flash.media.Sound;
import flash.events.SampleDataEvent;
// class
class BS extends Sound{
    public var wg:WG;
    function BS(wavecode:uint,amp:Number=0.01,frec:Number=440):void {
        wg=new WG(amp,frec);
        switch(wavecode){
            case 0:{addEventListener(SampleDataEvent.SAMPLE_DATA,wg.noise);}break;
            case 1:{addEventListener(SampleDataEvent.SAMPLE_DATA,wg.sine);}break;
        }
    }
    public function set amp(n:Number):void {
        wg.amp=n;
    }
    public function set frec(n:Number):void {
        wg.frec=n;
    }
}
class WG extends Object{
    public var amp:Number;
    public var frec:Number;
    private var PI2:Number=Math.PI*2;
    private var SR:uint=44100;
    private var PI2over:Number=PI2/SR;
    function WG(a:Number,f:uint):void {
        amp=a;
        frec=f;
    }
    public function noise(e:SampleDataEvent):void {
        var sample:Number;
        for (var i:uint;i<8192;i++){
            sample=Math.random()-0.5;
            e.data.writeFloat(sample*amp);
            e.data.writeFloat(sample*amp);
        }
    }
    public function sine(e:SampleDataEvent):void {
        var sample:Number;
        for (var i:uint;i<8192;i++){
            sample=Math.sin(PI2over*frec*(i+e.position))
            e.data.writeFloat(sample*amp);
            e.data.writeFloat(sample*amp);
        }
    }

}