forked from: forked from: random sin wave

by ohisama
♥0 | Line 53 | Modified 2013-02-02 21:00:44 | MIT License
play

ActionScript3 source code

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

// forked from watanabe's forked from: random sin wave
// forked from watanabe's random sin wave
package 
{
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Sound;
    import flash.utils.ByteArray;
    import flash.display.Sprite;
    public class FlashTest extends Sprite 
    {
        private static const SAMPLING : int = 8192 / 2;
        private static const FREQUENCY : int = 440; 
        private static const SAMPLING_RATE : int = 44100;      
        private static const PI : Number = Math.PI * 2;   
        private static const VOLUME : Number = 0.1;               
        private var _sounds : Array = [];
        private var _count : int = 0;
        public function FlashTest()
        {
            for (var i : int = 0; i < 3; i++)
            {
                 var sound : Sound = new Sound;
                 _sounds.push(sound)
                 sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
                 sound.play(0, 1);
            }
            addEventListener(Event.ENTER_FRAME, onFrame);
        }
        private function onFrame(e : Event) : void
        {
            if (_count++ > 100)
            {
                for each(var ss in _sounds)
                {
                    ss.stop();
                }
            }
        }
        private function onSampleData(e : SampleDataEvent) : void
        {
            var data : ByteArray = e.data;
            var pos : Number = e.position;
            var w : Number = (PI / (SAMPLING_RATE / FREQUENCY * (Math.random() * 0.15)));
            var phase : Number = (pos * w) % PI;
            for (var i : int = 0 ; i < SAMPLING ; i++)
            {
                var d : Number = VOLUME * Math.sin(phase);
                phase = (phase + w) % PI;  
                data.writeFloat(d);
                data.writeFloat(d);
            }
        }        
    }
}