チェンジセット 3059: as3/SiOPM/trunk/samples/SiONTenorion
- コミット日時:
- 2009/09/02 22:11:32 (2 年前)
- ファイル:
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/SiOPM/trunk/samples/SiONTenorion/Tenorion.as
r3015 r3059 6 6 import org.si.sion.*; 7 7 import org.si.sion.events.*; 8 import org.si.sion.sequencer.SiMMLTrack;9 8 import org.si.sion.utils.SiONPresetVoice; 10 9 … … 18 17 19 18 // voices, notes and tracks 20 public var tracks:Vector.<SiMMLTrack> = new Vector.<SiMMLTrack>(16);21 public var voices:Vector.<int>;22 public var notes:Vector.<int>;19 public var voices:Vector.<SiONVoice> = new Vector.<SiONVoice>(16); 20 public var notes :Vector.<int> = Vector.<int>([36,48,60,72, 43,48,55,60, 65,67,70,72, 77,79,82,84]); 21 public var length:Vector.<int> = Vector.<int>([ 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4]); 23 22 24 23 // beat counter … … 30 29 // constructor 31 30 function Tenorion() { 32 // set voices of "%6@0-4" from preset 31 var i:int; 32 33 // set voices from preset 33 34 var percusVoices:Array = presetVoice["valsound.percus"]; 34 driver.setVoice(0, percusVoices[0]); // bass drum35 driver.setVoice(1, percusVoices[27]); // snare drum36 driver.setVoice(2, percusVoices[16]); // close hihat37 driver.setVoice(3, percusVoices[21]); // open hihat38 driver.setVoice(4, presetVoice["valsound.bass18"]); // bass35 voices[0] = percusVoices[0]; // bass drum 36 voices[1] = percusVoices[27]; // snare drum 37 voices[2] = percusVoices[16]; // close hihat 38 voices[3] = percusVoices[22]; // open hihat 39 for (i=4; i<8; i++) voices[i] = presetVoice["valsound.bass18"]; // others 39 40 40 // notes and voices 41 notes = Vector.<int>([36,48,60,72, 43,48,55,60, 65,67,70,72, 77,79,82,84]); 42 voices = Vector.<int>([ 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]); 43 44 // listen click 45 driver.setTimerInterruption(1, _onTimerInterruption); 41 // listen 46 42 driver.setBeatCallbackInterval(1); 47 43 driver.addEventListener(SiONTrackEvent.BEAT, _onBeat); 48 driver. addEventListener(SiONEvent.STREAM_START, _onStreamStart);44 driver.setTimerInterruption(1, _onTimerInterruption); 49 45 50 46 // control pad … … 53 49 54 50 // start streaming 51 beatCounter = 0; 55 52 driver.play(); 56 }57 58 59 // _onStreamStart (SiONEvent.STREAM_START) is called back first of all after SiONDriver.play().60 private function _onStreamStart(e:SiONEvent) : void61 {62 // create new controlable tracks and set voice63 for (var i:int=0; i<16; i++) {64 tracks[i] = driver.sequencer.newControlableTrack();65 tracks[i].setChannelModuleType(6, 0, voices[i]);66 }67 beatCounter = 0;68 53 } 69 54 … … 81 66 var beatIndex:int = beatCounter & 15; 82 67 for (var i:int=0; i<16; i++) { 83 if (matrixPad.sequences[i] & (1<<beatIndex)) tracks[i].keyOn(notes[i]);68 if (matrixPad.sequences[i] & (1<<beatIndex)) driver.noteOn(notes[i], voices[i], length[i]); 84 69 } 85 70 beatCounter++; … … 106 91 function MatrixPad(stage:Stage) { 107 92 super(new BitmapData(320, 320, false, 0)); 108 for (var i:int=0; i<256; i++) { 93 var i:int; 94 for (i=0; i<256; i++) { 109 95 pt.x = (i&15)*20; 110 96 pt.y = (i&240)*1.25; 111 97 buffer.copyPixels(padOff, padOff.rect, pt); 112 98 bitmapData.copyPixels(padOff, padOff.rect, pt); 113 sequences[i] = 0;114 99 } 115 100 for (i=0; i<16; i++) sequences[i] = 0; 116 101 addEventListener("enterFrame", _onEnterFrame); 117 102 stage.addEventListener("click", _onClick); … … 138 123 private function _onClick(e:Event) : void { 139 124 if (mouseX>=0 && mouseX<320 && mouseY>=0 && mouseY<320) { 140 var track:int = 15-int(mouseY*0.05), 141 beat :int = int(mouseX*0.05); 125 var track:int = 15-int(mouseY*0.05), beat:int = int(mouseX*0.05); 142 126 sequences[track] ^= 1<<beat; 143 127 pt.x = beat*20;

