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

リビジョン 3030, 3.0 kB (コミッタ: keim, コミット時期: 2 年 前)

サンプルのミスの修正

Line 
1 // Sample for rendering wave data and loading as a sampler's data.
2 package {
3     import flash.display.Sprite;
4     import flash.events.*;
5     import org.si.sion.*;
6     import org.si.sion.utils.SiONPresetVoice;
7    
8    
9     public class RenderWave extends Sprite {
10         // driver
11         public var driver:SiONDriver = new SiONDriver();
12        
13         // preset voice
14         public var presetVoice:SiONPresetVoice = new SiONPresetVoice();
15        
16         // voice for sampler "%10"
17         public var samplerVoice:SiONVoice = new SiONVoice(10);
18        
19         // MML data
20         public var drumLoop:SiONData;
21         public var hiQue:SiONData;
22         public var mainMelody:SiONData;
23        
24         // wave data
25         public var drumLoopWave:Vector.<Number>;
26         public var hiQueWave:Vector.<Number>;
27        
28         // constructor
29         function RenderWave() {
30             // compile mml.
31             // [CAUTION!!] The rendering takes very long time. So the rendering MML must be short and NEVER loop infinitly.
32             drumLoop = driver.compile("#EFFECT0{ws95lf4000}; %6@0o3l8c2cc.c.; %6@1o3rcrc; %6@2v8l16[crccrrcc]; %6@3v8o3[rc8r8]")
33             hiQue = driver.compile("#EFFECT0{ws90};%5v24@0s63o6g16*o3c192");
34            
35             // set voices of "%6@0-3" from preset
36             var percusVoices:Array = presetVoice["valsound.percus"];
37             drumLoop.setVoice(0, percusVoices[0]);  // bass drum
38             drumLoop.setVoice(1, percusVoices[27]); // snare drum
39             drumLoop.setVoice(2, percusVoices[16]); // close hihat
40             drumLoop.setVoice(3, percusVoices[21]); // open hihat
41
42             // Render the data to wave. The rendered data is Vector.<Number> ranged between -1 and 1.
43             drumLoopWave = driver.render(drumLoop);
44             hiQueWave = driver.render(hiQue);
45            
46            
47             // compile data that plays drum loop by sampler module ("%10o5c").
48             mainMelody = driver.compile("%6@0l16o3$aa<c8>a<d8>a<d+8d+edc>ag; %10q8o5$c1");
49            
50             // set voice of "%6@0" bass line
51             mainMelody.setVoice(0, presetVoice["valsound.bass8"]);
52            
53             // load wave samples for "%10". The note number of "o5c" is 60.
54             mainMelody.setSamplerData(60, drumLoopWave);    // #60 = "%10o5c"
55             mainMelody.setSamplerData(62, hiQueWave);       // #62 = "%10o5d"
56            
57             // listen click
58             stage.addEventListener("click", _onClick);
59            
60             // note on exception mode set to "reject".
61             // in this mode, reject new note when the track with same ID already exists at the same timing.
62             driver.noteOnExceptionMode = SiONDriver.NEM_REJECT;
63            
64             // ...and play it
65             driver.play(mainMelody);
66         }
67        
68        
69         private function _onClick(e:Event) : void
70         {
71             // note on sampler's note. note number #62 = hiQueWave
72             driver.noteOn(62, samplerVoice, 0, 0, 1);
73         }
74     }
75 }
76
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。