root/as3/beatEvent/trunk/BeatEventTest.as

リビジョン 780, 5.6 kB (コミッタ: idiotica, コミット時期: 4 年 前)

--

Line 
1 /**
2 * ...
3 * @author idiotica.net
4 */
5
6 package 
7 {
8         import flash.display.Sprite;
9         import flash.display.StageScaleMode;
10         import flash.events.Event;
11         import flash.media.Sound;
12         import flash.utils.ByteArray;
13         import flash.utils.Endian;
14         import flash.utils.getDefinitionByName;
15
16         import de.popforge.audio.output.Audio;
17         import de.popforge.audio.output.SoundFactory;
18         import net.idiotica.media.beatEvent.beatFrame.BeatFrameEvent;
19         import net.idiotica.media.beatEvent.beatFrame.BeatFrameEventDispatcher;
20         import net.idiotica.media.beatEvent.beatSync.BeatSyncEvent;
21         import net.idiotica.media.beatEvent.beatSync.BeatSyncEventDispatcher;
22        
23         public class BeatEventTest extends Sprite
24         {
25                
26                 [SWF(width = "320", height = "320", frameRate = "60", backgroundColor = "#000000")]
27                
28                 [Embed(source = "sounds/kick.wav", mimeType = "application/octet-stream")]
29                 private const SoundKick:Class;
30                
31                 [Embed(source = "sounds/snare.wav", mimeType = "application/octet-stream")]
32                 private const SoundSnare:Class;
33                
34                 [Embed(source = "sounds/c_hh.wav", mimeType = "application/octet-stream")]
35                 private const SoundCHH:Class;
36                
37                 [Embed(source = "sounds/o_hh.wav", mimeType = "application/octet-stream")]
38                 private const SoundOHH:Class;
39                
40                 private const WAV_HEADER_END:uint = 44;
41                 private const CLASSES:Array = ["SoundKick", "SoundSnare", "SoundCHH", "SoundOHH"];
42                 private const SEQUENCE:Array = [
43                         "1010",
44                         "1010",
45                         "0110",
46                         "0001",
47                        
48                         "1010",
49                         "1010",
50                         "0110",
51                         "0001",
52                        
53                         "1010",
54                         "1010",
55                         "0110",
56                         "1010",
57                        
58                         "0010",
59                         "1010",
60                         "0110",
61                         "0001",
62                        
63                         "1010",
64                         "1010",
65                         "0110",
66                         "0001",
67                        
68                         "1010",
69                         "1010",
70                         "0110",
71                         "0001",
72                        
73                         "1010",
74                         "1010",
75                         "0110",
76                         "1010",
77                        
78                         "0110",
79                         "1010",
80                         "0101",
81                         "1101"
82                 ]; //音を鳴らすシーケンス。 1000:Kick, 0100:Snare, 0010:Close high hat(C_HH), 0001:Open high hat(O_HH)
83                
84                 private const TECH_SEQUENCE:Array = [
85                         "1010",
86                         "0010",
87                         "0010",
88                         "0001",
89                        
90                         "1110",
91                         "0000",
92                         "0001",
93                         "0100",
94                        
95                         "1010",
96                         "0100",
97                         "0001",
98                         "0110",
99                        
100                         "1100",
101                         "0000",
102                         "0010",
103                         "0101",
104                        
105                        
106                         "1010",
107                         "0010",
108                         "0010",
109                         "0001",
110                        
111                         "1110",
112                         "0000",
113                         "0001",
114                         "0100",
115                        
116                         "1010",
117                         "0100",
118                         "0001",
119                         "0110",
120                        
121                         "1100",
122                         "0000",
123                         "0010",
124                         "0101",
125                        
126                        
127                         "1010",
128                         "0010",
129                         "0011",
130                         "0000",
131                        
132                         "1110",
133                         "0000",
134                         "0001",
135                         "0100",
136                        
137                         "1010",
138                         "0010",
139                         "0011",
140                         "0000",
141                        
142                         "1110",
143                         "0000",
144                         "0001",
145                         "0100",
146                        
147                        
148                         "1010",
149                         "0010",
150                         "0001",
151                         "0010",
152                        
153                         "1110",
154                         "0000",
155                         "0001",
156                         "0100",
157                        
158                         "1010",
159                         "0100",
160                         "1001",
161                         "0110",
162                        
163                         "1101",
164                         "1100",
165                         "0111",
166                         "1101"
167                 ];
168                
169                
170                 private var sounds:Array; //0:Kick, 1:Snare, 2:Close high hat, 3:Open high hat
171                 private static var convert_step:uint = 0;
172                
173                 public function BeatEventTest()
174                 {
175                         stage.scaleMode = StageScaleMode.NO_SCALE;
176                        
177                         sounds = [];
178                        
179                         //----- BeatFrame で動かす場合は下2行を。 BeatSyncの2行はコメントアウト
180                         //BeatFrameEventDispatcher.init();
181                         //BeatFrameEventDispatcher.addEventListener(BeatFrameEvent.ON_BEAT, onBeatFrame);
182                        
183                         //----- BeatSync で動かす場合は下2行を。 BeatFrameの2行はコメントアウト
184                         BeatSyncEventDispatcher.init();
185                         BeatSyncEventDispatcher.addEventListener(BeatSyncEvent.ON_BEAT16, onBeatSync);
186                        
187                         soundConvert();
188                 }
189                
190                 //埋め込みwavをSound形式に変換。(要popforge
191                 private function soundConvert():void
192                 {
193                         var _bytes:ByteArray = new ByteArray();
194                         _bytes.endian = Endian.LITTLE_ENDIAN;
195                         var _wav_data:ByteArray;
196                        
197                         switch(convert_step)
198                         {
199                                 case 0:
200                                         _wav_data = new SoundKick() as ByteArray;
201                                 break;
202                                
203                                 case 1:
204                                         _wav_data = new SoundSnare() as ByteArray;
205                                 break;
206                                
207                                 case 2:
208                                         _wav_data = new SoundCHH() as ByteArray;
209                                 break;
210                                
211                                 case 3:
212                                         _wav_data = new SoundOHH() as ByteArray;
213                                 break;
214                         }
215                        
216                         _bytes.writeBytes(_wav_data, WAV_HEADER_END);
217                         _bytes.position = 0;
218                        
219                         SoundFactory.fromByteArray(_bytes, Audio.MONO, Audio.BIT16, Audio.RATE44100, onConvertComplete);
220                 }
221                
222                 //4つの埋め込みwavをSoundに変換するまで回す。終わったら BeatFrameEventDispatcer.start(BPM:number) で開始。
223                 private function onConvertComplete(_sound:Sound):void
224                 {
225                         sounds[convert_step] = _sound;
226                         convert_step++;
227                        
228                         if (convert_step < 4) {
229                                 soundConvert();
230                         }
231                         else {
232                                 //-----BeatFrameの場合は下の行を。BeatSyncの方はコメントアウト。
233                                 //BeatFrameEventDispatcher.start(300);
234                                
235                                 //-----BeatSyncの場合は下の行を。BeatFrameの方はコメントアウト。
236                                 BeatSyncEventDispatcher.start(120);
237                         }
238                 }
239                
240                 private function onBeatFrame(e:Event):void
241                 {
242                         var seq:uint = parseInt(SEQUENCE[BeatFrameEventDispatcher.getCount() % 32], 2);
243                        
244                         if (seq & 8) {
245                                 sounds[0].play();
246                         }
247                        
248                         if (seq & 4) {
249                                 sounds[1].play();
250                         }
251                        
252                         if (seq & 2) {
253                                 sounds[2].play();
254                         }
255                        
256                         if (seq & 1) {
257                                 sounds[3].play();
258                         }
259                 }
260                
261                 private function onBeatSync(e:Event):void
262                 {
263                         var seq:uint = parseInt(TECH_SEQUENCE[BeatSyncEventDispatcher.getCount() % 64], 2);
264                        
265                         if (seq & 8) {
266                                 sounds[0].play();
267                         }
268                        
269                         if (seq & 4) {
270                                 sounds[1].play();
271                         }
272                        
273                         if (seq & 2) {
274                                 sounds[2].play();
275                         }
276                        
277                         if (seq & 1) {
278                                 sounds[3].play();
279                         }
280                 }
281                
282         }
283        
284 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。