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

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

サウンドライブラリ SiON ver0.5.6 更新 物理音源追加,サンプル追加,waveColor追加,アルペジェータ追加,その他色々

Line 
1 // Control software synth by primitive operations
2 package {
3     import flash.display.Sprite;
4     import flash.events.*;
5     import org.si.sion.*;
6     import org.si.sion.events.*;
7     import org.si.sion.sequencer.SiMMLTrack;
8    
9    
10     public class TimerInteruption extends Sprite {
11         // driver
12         public var driver:SiONDriver = new SiONDriver();
13        
14         // voice
15         public var voice:SiONVoice = new SiONVoice(5, 0, 40, 24);
16        
17         // tracks
18         public var tracks:Vector.<SiMMLTrack> = new Vector.<SiMMLTrack>(2);
19        
20         // sequence
21         public var sequences:Array = [Vector.<int>([60,60,67,67,69,69,67,0,65,65,64,64,62,62,60,0]),
22                                       Vector.<int>([48,55,52,55,48,55,52,55,47,55,50,55,47,55,50,55])];
23         // sequence pointer
24         public var sequencePointer:int;
25        
26        
27         // constructor
28         function TimerInteruption() {
29             // listen STREAM_START event to initialize tracks
30             driver.addEventListener(SiONEvent.STREAM_START, _onStreamStart)
31             // set timer interuption for each 16th beat on bpm=120.
32             driver.bpm = 120;
33             driver.setTimerInteruption(1, _onTimerInteruption);
34             // start streaming
35             driver.play();
36         }
37        
38        
39         // initialize tracks in STREAM_START event handler.
40         private function _onStreamStart(event:SiONEvent) : void {
41             // initialize pointer
42             sequencePointer = 0;
43             // SiMMLSequencer.newControlableTrack allocates new tracks in the sound module.
44             tracks[0] = driver.sequencer.newControlableTrack(0);
45             tracks[1] = driver.sequencer.newControlableTrack(0);
46             // SiONVoice.setTrackVoice sets tracks voice
47             voice.setTrackVoice(tracks[0]);
48             voice.setTrackVoice(tracks[1]);
49         }
50        
51        
52         // timer interuption
53         private function _onTimerInteruption() : void {
54             if (sequencePointer & 1) {
55                 var index:int = (sequencePointer >> 1) & 15;
56                 for (var trackNumber:int=0; trackNumber<2; trackNumber++) {
57                     var key:int = sequences[trackNumber][index];
58                     // SiMMLTrack.keyOn sets track key on. the 2nd argument sets key on length by sampling count (4410=100ms).
59                     if (key > 0) tracks[trackNumber].keyOn(key, 4410);
60                 }
61             }
62             ++sequencePointer;
63         }
64     }
65 }
66
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。