flash on 2010-1-9

by atsushieno
♥0 | Line 144 | Modified 2010-01-09 17:34:13 | MIT License
play

ActionScript3 source code

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

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="_onCreate();">
    <mx:Script><![CDATA[

// original at http://www.libspark.org/browser/as3/SiOPM/trunk/samples/SiOPMJavaScriptBridge/SiOPMJavaScriptBridge.as

    import flash.display.Sprite;
    import flash.external.ExternalInterface;
    import flash.system.Security;
    import flash.events.*;
    
            import org.si.sion.*;
            import org.si.sion.effector.*;
            import org.si.sion.events.*;
            import org.si.sion.sequencer.SiMMLTrack;
            import org.si.sion.utils.SiONPresetVoice;
    import org.si.sion.utils.Translator;
    
    
    
    //public class SiOPMJavaScriptBridge extends Sprite
    //{


    // variables
    //--------------------------------------------------
        public var driver:SiONDriver;
        public var mmldata:SiONData;
        private var presetVoice:SiONPresetVoice;
        private var currentVoice:SiONVoice;
        
            private var delaySendLevel:Number;
            private var chorusSendLevel:Number;
        
        
    // constructor
    //--------------------------------------------------
        private function _onCreate() : void
        {
            Security.allowDomain('*');
            driver = new SiONDriver();
            mmldata = new SiONData();
            driver.autoStop = true;
            
            //new pcmExample(driver);

            // register javascript interfaces
            ExternalInterface.addCallback("_compile", _compile);
            ExternalInterface.addCallback("_play",    _play);
            ExternalInterface.addCallback("_stop",    driver.stop);
            ExternalInterface.addCallback("_pause",   driver.pause);
            ExternalInterface.addCallback("_volume",  _volume);
            ExternalInterface.addCallback("_pan",     _pan);
            ExternalInterface.addCallback("_position",_position);
            ExternalInterface.addCallback("_noteOn",_noteOn);
            ExternalInterface.addCallback("_noteOff",_noteOff);
            
            // register handlers
            driver.addEventListener(SiONEvent.QUEUE_PROGRESS, _onCompileProgress);
            driver.addEventListener(SiONEvent.QUEUE_COMPLETE, _onCompileComplete);
            driver.addEventListener(ErrorEvent.ERROR,         _onError);
            driver.addEventListener(SiONEvent.STREAM,         _onStream);
            driver.addEventListener(SiONEvent.STREAM_START,   _onStreamStart);
            driver.addEventListener(SiONEvent.STREAM_STOP,    _onStreamStop);
            driver.addEventListener(SiONEvent.FADE_IN_COMPLETE,  _onFadeInComplete);
            driver.addEventListener(SiONEvent.FADE_OUT_COMPLETE, _onFadeOutComplete);
            

_onCreateCore();

            // callback onLoad
            ExternalInterface.call('SIOPM._internal_onLoad', SiONDriver.VERSION);
        }
        
        

	private function _onCreateCore() : void 
	{
		presetVoice = new SiONPresetVoice();
		currentVoice = presetVoice["midi.piano1"];

                delaySendLevel = 0.25;
                chorusSendLevel = 0;

                // effector setting
                var dly:SiEffectStereoDelay  = new SiEffectStereoDelay();
                dly.initialize();
                dly.setParameters(200,0.2,false);
                var cho:SiEffectStereoChorus = new SiEffectStereoChorus();
                cho.initialize();
                cho.setParameters(20,0.2,4,20);
                driver.effector.initialize();
                driver.effector.connect(1, dly);
                driver.effector.connect(2, cho);
                
                // start stream without initializing effector
                driver.play(null, false);
        }
        
    // event handlers
    //--------------------------------------------------
        private function _onCompileProgress(e:SiONEvent) : void { ExternalInterface.call('SIOPM._internal_onCompileProgress', driver.jobProgress); }
        private function _onError(e:ErrorEvent)          : void { ExternalInterface.call('SIOPM._internal_onError', e.text); }
        private function _onStream(e:SiONEvent)          : void { ExternalInterface.call('SIOPM._internal_onStream'); }
        private function _onStreamStart(e:SiONEvent)     : void { ExternalInterface.call('SIOPM._internal_onStreamStart'); }
        private function _onStreamStop(e:SiONEvent)      : void { ExternalInterface.call('SIOPM._internal_onStreamStop'); }
        private function _onCompileComplete(e:SiONEvent) : void { ExternalInterface.call('SIOPM._internal_onCompileComplete', mmldata.title); }
        private function _onFadeInComplete(e:SiONEvent)  : void { ExternalInterface.call('SIOPM._internal_onFadeInComplete'); }
        private function _onFadeOutComplete(e:SiONEvent) : void { ExternalInterface.call('SIOPM._internal_onFadeOutComplete'); }
        
        
        
        
    // callback function
    //--------------------------------------------------
        private function _compile(mml:*) : Boolean
        {
            if (mml) {
                driver.compileQueue(mml, mmldata);
                driver.startQueue(200);
                return true;
            }
            return false;
        }
        
        
        private function _play() : void
        {
            driver.play(mmldata);
        }
        
        
        private function _volume(v:*) : Number
        {
            var vol:Number = Number(v);
            if (!isNaN(vol)) {
                driver.volume = (vol<0) ? 0 : (vol>1) ? 1 : vol;
            }
            return driver.volume;
        }

    
        private function _pan(p:*) : Number
        {
            var pan:Number = Number(p);
            if (!isNaN(pan)) {
                driver.pan = (pan<-1) ? -1 : (pan>1) ? 1 : pan;
            }
            return driver.pan;
        }
        
        
        private function _position(p:*) : Number
        {
            var pos:Number = Number(p);
            if (!isNaN(pos)) {
                driver.position = pos;
            }
            return driver.position;
        }
        
        
        private function _fadeIn(t:*) : void
        {
            var time:Number = Number(t);
            if (!isNaN(time)) {
                driver.fadeIn(time);
            } else {
                driver.fadeIn(3);
            }
        }
        
        
        private function _fadeOut(t:*) : void
        {
            var time:Number = Number(t);
            if (!isNaN(time)) {
                driver.fadeOut(time);
            } else {
                driver.fadeOut(3);
            }
        }

        private function _noteOn(n:*) : *
        {
try {
                            var note:Number = Number(n);
                            var trk:SiMMLTrack = driver.noteOn(note, currentVoice, 0, 0, 0, 0, 0, 1, 1);
                            trk.channel.setStreamSend(1, delaySendLevel);
                            trk.channel.setStreamSend(2, chorusSendLevel);
			    return trk;
} catch (ex:*) {
return ex.toString();
}
        }

        private function _noteOff(n:*) : void
        {
          var note:Number = Number(n);
          driver.noteOff(note);
        }
    //}

    ]]></mx:Script>
    
</mx:Application>