forked from: SiON FM Synthesizer WF-1

by h_sakurai forked from SiON FM Synthesizer WF-1 (diff: 378)
SiON Keyborad WF1 ver0.58
♥0 | Line 78 | Modified 2014-03-14 08:50:46 | MIT License
play

ActionScript3 source code

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

// forked from keim_at_Si's SiON FM Synthesizer WF-1
// SiON Keyborad WF1 ver0.58
package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.system.System;
    import com.bit101.components.*;
    
    public class main extends Sprite {
        function main() {
            Style.fontName = "Monaco";
            Style.embedFonts = false;
            stage.addEventListener("keyDown", _onKeyDown);
            stage.addEventListener("keyUp", _onKeyUp);

            
            clipboard = new Text(this, 16, 16, "zxcvbnmq");
            clipboard.setSize(433, 433);

            driver.play(null, false);
            
            addEventListener(Event.ENTER_FRAME, enterFrame);

        }
        private var step:int = 0;
        private var loop:Boolean = false;
        private function enterFrame(eventObj:Event):void {
            if(!loop)return;
            step++
            var n:int = 11;
            if (step % n == 0) {
                var i:int
                if((i=keystrs.indexOf(clipboard.text.charAt(int(step / n)-1 ))) >= 0) keyOff(i);
                if(int(step / n) >= clipboard.text.length) {step = 0;allNoteOff()}
                if((i=keystrs.indexOf(clipboard.text.charAt(int(step / n) ))) >= 0) keyOn(i);
            }

        }
        
        private function _onKeyDown(e:KeyboardEvent) : void {
            var i:int, c:String, mml:String;
            switch (e.keyCode) {
            default:
                switch (c = String.fromCharCode(e.charCode)) {
                case "1": loop = !loop; allNoteOff(); step = 0; break;
                case "]": oct--; break;
                case "[": oct++; break;
                case " ": allNoteOff(); break;
                default:  if ((i=keystrs.indexOf(c)) >= 0) keyOn(i); break;
                }
            }
        }
        private var keystrs:String = ",l.;/:-zsxdcvgbhnjmq2w3er5t6y7ui9o0p"
        private function _onKeyUp(e:KeyboardEvent) : void {
            var i:int, c:String = String.fromCharCode(e.charCode);
            if ((i=keystrs.indexOf(c)) >= 0) keyOff(i);
        }
    }
}



import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.text.*;
import flash.geom.*;
import com.bit101.components.*;
import org.si.sion.*;
import org.si.sion.effector.*;
import org.si.sion.sequencer.SiMMLTrack;
import org.si.sion.utils.SiONPresetVoice;

// SiON variables
var driver:SiONDriver = new SiONDriver();
var presetVoice:SiONPresetVoice = new SiONPresetVoice();
var oct:int = 5;
var octm:int = 7;
// UIs
var keyFlag:Object = {};
var clipboard:Text;

function keyOn(index:int) : void {
    if (!keyFlag[index]) {
        keyFlag[index] = true
        var trk:SiMMLTrack = driver.noteOn(index + oct*12-octm, presetVoice.categolies[0][0], 0);
    }
}

function keyOff(index:int) : void {
    keyFlag[index] = false;
    driver.noteOff(index + oct*12-octm);
}

function allNoteOff() : void {
    for each (var trk:SiMMLTrack in driver.sequencer.tracks) trk.keyOff();
}