root/as3/SiOPM/trunk/samples/Tutorials/EventTrigger2.as

リビジョン 2697, 2.8 kB (コミッタ: keim, コミット時期: 3 年 前)

サウンドライブラリ SiON ver0.5.3 更新 tutrial 追加など

Line 
1 // Sample for event trigger
2 package {
3     import flash.display.*;
4     import flash.events.*;
5     import org.si.sion.*;
6     import org.si.sion.events.*;
7    
8    
9     public class EventTrigger2 extends Sprite {
10         // driver
11         public var driver:SiONDriver = new SiONDriver();
12        
13         // MML data
14         public var mainMelody:SiONData;
15
16         // shape displays key of tracks
17         public var keyShapes:Array;
18        
19         // constructor
20         function main() {
21             // compile with event trigger command (%t)
22             var mml:String = "t100;";
23             mml += "%3@8 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2;";
24             mml += "%3@8 l4 [o4ccfc >g<c>g<c | cccc ccc>g< ];"
25             mml += "%3@8 l4 r8 [o4 ggag dgdg | gggg gggd ];"
26             mainMelody = driver.compile(mml);
27            
28             // listen triggers
29             driver.addEventListener(SiONEvent.STREAM_START, _onStreamStart);
30             driver.addEventListener(SiONTrackEvent.NOTE_ON_FRAME,  _onNoteOn);
31             driver.addEventListener(SiONTrackEvent.NOTE_OFF_FRAME, _onNoteOff);
32            
33             keyShapes = [_keyShape(0), _keyShape(1), _keyShape(2)];
34            
35             // play main melody
36             driver.play(mainMelody);
37         }
38        
39        
40         // This event dispatched when ther streming starts.
41         private function _onStreamStart(e:SiONEvent) : void {
42             var i:int;
43             var imax:int = driver.sequencer.tracks.length;  // <= same as driver.trackCount
44            
45             // set event trigger on all tracks. you can access them by driver.sequencer.tracks[].
46             // but the driver.sequencer.tracks[] is available only after driver.play().
47             for (i=0; i<imax; i++) {
48                 // The eventTriggerID (The 1st argument) is track number.
49                 driver.sequencer.tracks[i].setEventTrigger(i, 1, 1);
50             }
51         }
52        
53        
54         // This event dispatched when note on
55         private function _onNoteOn(e:SiONTrackEvent) : void {
56             var keyShape:Shape = keyShapes[e.eventTriggerID];
57             keyShape.x = (e.note - 40) * 16;
58             keyShape.visible = true;
59         }
60        
61        
62         // This event dispatched when note off
63         private function _onNoteOff(e:SiONTrackEvent) : void {
64             keyShapes[e.eventTriggerID].visible = false;
65         }
66        
67        
68         // create shape
69         private function _keyShape(id:int) : Shape {
70             var shape:Shape = new Shape();
71             shape.graphics.beginFill([0xff8080, 0x80ff80, 0x8080ff][id]);
72             shape.graphics.drawCircle(0, 0, 20);
73             shape.graphics.endFill();
74             shape.visible = false;
75             shape.y = id * 60 + 30;
76             addChild(shape);
77             return shape;
78         }
79     }
80 }
81
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。