flash on 2010-1-9
♥0 |
Line 144 |
Modified 2010-01-09 17:34:13 |
MIT License
archived:2017-03-20 03:27:25
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>