Morph-SynRJ

view fxSync.cxx @ 0:22de913c2d84

morph-synrj intro
author "Cedric Pinson <cedric.pinson@alcove.fr> <mornifle@plopbyte.net>"
date Tue Nov 27 15:23:52 2007 +0100 (2007-11-27)
parents
children
line source
2 #include "fxSync.h"
3 #include <math.h>
4 extern cmnTimer_t* Timer;
5 // efx
6 extern efxScreen1_t * fxScreen1;
7 extern efxScreen2_t * fxScreen2;
9 fxSync :: fxSync()
10 {
11 // Nada !
12 }
15 fxSync :: ~fxSync()
16 {
17 // Nada !
18 }
20 void fxSync :: Init( void )
21 {
23 int i, j;
25 // Sound Detection ...
26 detection = new sndDetect();
28 // Average Filter ...
29 equaIncDecLevel = new float * [NB_INST];
30 for( i = 0; i < NB_INST; i++ )
31 {
32 equaIncDecLevel[i] = new float [3];
33 for( j = 0; j < 3; j++ )
34 equaIncDecLevel[i][j] = 0.0f;
35 }
36 this->InitEquaIncDecLevel();
38 // equa Depth & Def
39 equaNbElements = sqrt( fxScreen1->GetFxEqua()->NbElements() );
40 equaDef = new int * [equaNbElements];
41 equaDepth = new float * [equaNbElements];
42 for( i = 0; i < equaNbElements; i++ )
43 {
44 equaDef [i] = new int [equaNbElements];
45 equaDepth[i] = new float [equaNbElements];
46 for( j = 0; j < equaNbElements; j++ )
47 {
48 equaDef [i][j] = 0;
49 equaDepth[i][j] = 0.0f;
50 }
51 }
52 this->InitEquaDefDepth();
54 // Spherical
55 target = 0;
56 lastTarget = - 1;
57 morphFactor = 0.0f;
59 // Touff
60 stepDance = 0;
61 lastStepDance = - 1;
62 windTouf = 0;
63 lastWindTouf = - 1;
65 // greetz
66 greetz = 0;
67 lastGreetz = 0;
69 return;
71 }
73 void fxSync :: Kill( void )
74 {
76 int i;
78 // Sound Detection ...
79 delete detection;
81 // Average Filter ...
82 for( i = 0; i < NB_INST; i++ )
83 delete [] equaIncDecLevel[i];
84 delete [] equaIncDecLevel;
86 // equa Depth & Def
87 for( i = 0; i < equaNbElements; i++ )
88 {
89 delete [] equaDef [i];
90 delete [] equaDepth[i];
91 }
92 delete [] equaDef;
93 delete [] equaDepth;
95 return;
96 }
98 void fxSync :: InitEquaIncDecLevel( void )
99 {
100 // Bass ...
101 equaIncDecLevel[INST_BASS][SMPL_DEC] = 1.5f;
102 // HHat ...
103 equaIncDecLevel[INST_HHAT][SMPL_DEC] = 4.0f;
104 // BassDrum
105 equaIncDecLevel[INST_BDRUM][SMPL_DEC] = 4.0f;
106 // Snare Drum
107 equaIncDecLevel[INST_SNARE][SMPL_DEC] = 4.0f;
108 // Small BassDrum
109 equaIncDecLevel[INST_SBDRUM][SMPL_DEC] = 4.0f;
110 // Nap 1
111 equaIncDecLevel[INST_NAP1][SMPL_INC] = 0.2f;
112 equaIncDecLevel[INST_NAP1][SMPL_DEC] = 0.4f;
113 // Nap 2
114 equaIncDecLevel[INST_NAP2][SMPL_INC] = 0.2f;
115 equaIncDecLevel[INST_NAP2][SMPL_DEC] = 0.4f;
117 return;
119 }
120 extern void Write2Console( const char * data );
121 #include <string.h>
122 void fxSync :: InitEquaDefDepth( void )
123 {
125 #if 0
126 // Bass Def ...
127 equaDef [INST_BASS][0] = 4;
128 equaDef [INST_BASS][1] = 13;
129 equaDef [INST_BASS][2] = 15;
130 equaDef [INST_BASS][3] = 27;
131 equaDef [INST_BASS][4] = 28;
132 equaDef [INST_BASS][5] = 36;
133 equaDef [INST_BASS][6] = 45;
134 equaDepth[INST_BASS][0] = 1.0f;
135 equaDepth[INST_BASS][1] = 0.4f;
136 equaDepth[INST_BASS][2] = 0.8f;
137 equaDepth[INST_BASS][3] = 0.1f;
138 equaDepth[INST_BASS][4] = 0.3f;
139 equaDepth[INST_BASS][5] = 0.2f;
140 equaDepth[INST_BASS][6] = 0.6f;
141 // HHat Def ...
142 equaDef [INST_HHAT][0] = 3;
143 equaDef [INST_HHAT][1] = 10;
144 equaDef [INST_HHAT][2] = 20;
145 equaDef [INST_HHAT][3] = 21;
146 equaDef [INST_HHAT][4] = 32;
147 equaDef [INST_HHAT][5] = 38;
148 equaDef [INST_HHAT][6] = 42;
149 equaDepth[INST_HHAT][0] = 0.2f;
150 equaDepth[INST_HHAT][1] = 0.8f;
151 equaDepth[INST_HHAT][2] = 0.1f;
152 equaDepth[INST_HHAT][3] = 0.6f;
153 equaDepth[INST_HHAT][4] = 1.0f;
154 equaDepth[INST_HHAT][5] = 0.4f;
155 equaDepth[INST_HHAT][6] = 0.3f;
156 // Bass Drum
157 equaDef [INST_BDRUM][0] = 2;
158 equaDef [INST_BDRUM][1] = 9;
159 equaDef [INST_BDRUM][2] = 16;
160 equaDef [INST_BDRUM][3] = 26;
161 equaDef [INST_BDRUM][4] = 29;
162 equaDef [INST_BDRUM][5] = 35;
163 equaDef [INST_BDRUM][6] = 44;
164 equaDepth[INST_BDRUM][0] = 0.6f;
165 equaDepth[INST_BDRUM][1] = 0.2f;
166 equaDepth[INST_BDRUM][2] = 1.0f;
167 equaDepth[INST_BDRUM][3] = 0.4f;
168 equaDepth[INST_BDRUM][4] = 0.1f;
169 equaDepth[INST_BDRUM][5] = 0.8f;
170 equaDepth[INST_BDRUM][6] = 0.3f;
171 // Snare Drum
172 equaDef [INST_SNARE][0] = 5;
173 equaDef [INST_SNARE][1] = 8;
174 equaDef [INST_SNARE][2] = 14;
175 equaDef [INST_SNARE][3] = 24;
176 equaDef [INST_SNARE][4] = 33;
177 equaDef [INST_SNARE][5] = 40;
178 equaDef [INST_SNARE][6] = 46;
179 equaDepth[INST_SNARE][0] = 0.4f;
180 equaDepth[INST_SNARE][1] = 0.6f;
181 equaDepth[INST_SNARE][2] = 0.1f;
182 equaDepth[INST_SNARE][3] = 1.0f;
183 equaDepth[INST_SNARE][4] = 0.2f;
184 equaDepth[INST_SNARE][5] = 0.3f;
185 equaDepth[INST_SNARE][6] = 0.8f;
186 // Small BassDrum
187 equaDef [INST_SBDRUM][0] = 1;
188 equaDef [INST_SBDRUM][1] = 11;
189 equaDef [INST_SBDRUM][2] = 18;
190 equaDef [INST_SBDRUM][3] = 23;
191 equaDef [INST_SBDRUM][4] = 31;
192 equaDef [INST_SBDRUM][5] = 39;
193 equaDef [INST_SBDRUM][6] = 47;
194 equaDepth[INST_SBDRUM][0] = 0.4f;
195 equaDepth[INST_SBDRUM][1] = 1.0f;
196 equaDepth[INST_SBDRUM][2] = 0.3f;
197 equaDepth[INST_SBDRUM][3] = 0.8f;
198 equaDepth[INST_SBDRUM][4] = 0.2f;
199 equaDepth[INST_SBDRUM][5] = 0.1f;
200 equaDepth[INST_SBDRUM][6] = 0.6f;
201 // Nap 1
202 equaDef [INST_NAP1][0] = 0;
203 equaDef [INST_NAP1][1] = 12;
204 equaDef [INST_NAP1][2] = 17;
205 equaDef [INST_NAP1][3] = 25;
206 equaDef [INST_NAP1][4] = 30;
207 equaDef [INST_NAP1][5] = 41;
208 equaDef [INST_NAP1][6] = 43;
209 equaDepth[INST_NAP1][0] = 0.3f;
210 equaDepth[INST_NAP1][1] = 0.6f;
211 equaDepth[INST_NAP1][2] = 0.1f;
212 equaDepth[INST_NAP1][3] = 0.8f;
213 equaDepth[INST_NAP1][4] = 0.4f;
214 equaDepth[INST_NAP1][5] = 1.0f;
215 equaDepth[INST_NAP1][6] = 0.2f;
216 // Nap 2
217 equaDef [INST_NAP2][0] = 6;
218 equaDef [INST_NAP2][1] = 7;
219 equaDef [INST_NAP2][2] = 19;
220 equaDef [INST_NAP2][3] = 22;
221 equaDef [INST_NAP2][4] = 34;
222 equaDef [INST_NAP2][5] = 37;
223 equaDef [INST_NAP2][6] = 48;
224 equaDepth[INST_NAP2][0] = 0.8f;
225 equaDepth[INST_NAP2][1] = 0.2f;
226 equaDepth[INST_NAP2][2] = 0.6f;
227 equaDepth[INST_NAP2][3] = 1.0f;
228 equaDepth[INST_NAP2][4] = 0.2f;
229 equaDepth[INST_NAP2][5] = 0.3f;
230 equaDepth[INST_NAP2][6] = 0.4f;
232 #endif
233 char toto[1024];
235 for( int i = 0; i < equaNbElements; i++ )
236 {
237 for( int j = 0; j < equaNbElements; j++ )
238 {
239 equaDef [i%NB_INST][j] = ( i * equaNbElements + j + NB_INST ) % fxScreen1->GetFxEqua()->NbElements();
240 equaDepth[i%NB_INST][j] = ( ( i * equaNbElements + j * NB_INST ) ) % 10 / 10.0 + 0.1;
241 }
242 }
243 return;
245 }
247 void fxSync :: SetSmplLevel( enum SamplesDef i, float _level )
248 {
250 equaIncDecLevel[i][SMPL_LEVEL] = _level;
252 return;
253 }
255 float fxSync :: GetSmplLevel( enum SamplesDef i )
256 {
258 return ( equaIncDecLevel[i][SMPL_LEVEL] );
260 }
262 void fxSync :: SmplInc( enum SamplesDef i )
263 {
265 equaIncDecLevel[i][SMPL_LEVEL] += equaIncDecLevel[i][SMPL_INC] * Timer->GetFrameTime();
266 if( equaIncDecLevel[i][SMPL_LEVEL] > 1.0f )
267 equaIncDecLevel[i][SMPL_LEVEL] = 1.0f;
268 else
269 {
270 if( equaIncDecLevel[i][SMPL_LEVEL] < 0.0f )
271 equaIncDecLevel[i][SMPL_LEVEL] = 0.0f;
272 }
274 return;
276 }
278 void fxSync :: SmplDec( enum SamplesDef i )
279 {
281 equaIncDecLevel[i][SMPL_LEVEL] -= equaIncDecLevel[i][SMPL_DEC] * Timer->GetFrameTime();
282 if( equaIncDecLevel[i][SMPL_LEVEL] > 1.0f )
283 equaIncDecLevel[i][SMPL_LEVEL] = 1.0f;
284 else
285 {
286 if( equaIncDecLevel[i][SMPL_LEVEL] < 0.0f )
287 equaIncDecLevel[i][SMPL_LEVEL] = 0.0f;
288 }
290 return;
292 }
294 void fxSync :: SetEquaDefDepth ( enum SamplesDef i, float _factor )
295 {
296 int j;
297 for( j = 0; j < equaNbElements; j++ )
298 fxScreen1->GetFxEqua()->SetDepthLevel( equaDef[i][j], equaDepth[i][j] * _factor );
299 }
302 void fxSync :: SyncEqua( void )
303 {
304 // if( this->detection->InFxScreen1() )
305 // {
306 enum SamplesDef i;
307 SamplesData data;
309 for( i = INST_BASS; i <= INST_SBDRUM; i = ( (enum SamplesDef) ( (int)i + 1 ) ) )
310 {
311 data = this->detection->GetSampleData( i );
312 if( data.playing )
313 {
314 SetEquaDefDepth( i, data.volume );
315 SetSmplLevel( i, data.volume );
316 }
317 else
318 {
319 SmplDec( i );
320 SetEquaDefDepth( i, GetSmplLevel( i ) );
321 }
322 }
324 // Nap 1
325 data = this->detection->GetSampleData( INST_NAP1 );
326 if( data.playing )
327 {
328 SmplInc( INST_NAP1 );
329 SetEquaDefDepth( INST_NAP1, GetSmplLevel( INST_NAP1 ) );
330 }
331 else
332 {
333 SmplDec( INST_NAP1 );
334 SetEquaDefDepth( INST_NAP1, GetSmplLevel( INST_NAP1 ) );
335 }
337 // Nap 2
338 data = this->detection->GetSampleData( INST_NAP2 );
339 if( data.playing )
340 {
341 SmplInc( INST_NAP2 );
342 SetEquaDefDepth( INST_NAP2, GetSmplLevel( INST_NAP2 ) );
343 }
344 else
345 {
346 SmplDec( INST_NAP2 );
347 SetEquaDefDepth( INST_NAP2, GetSmplLevel( INST_NAP2 ) );
348 }
350 // }
351 return;
353 }
355 void fxSync :: SyncSpherical( void )
356 {
357 // if( this->detection->InFxScreen1() )
358 // {
359 SamplesData data;
361 data = this->detection->GetSampleData( INST_NAP2 );
362 if( data.playing )
363 {
364 lastTarget = target;
365 morphFactor += 1.0f / MORPH_RATE * Timer->GetFrameTime();
366 if( morphFactor > 1.0f )
367 morphFactor = 1.0f;
368 }
369 else
370 {
371 if( lastTarget == target )
372 target++;
373 morphFactor = 0.0f;
374 }
376 fxScreen1->GetFxSpherical()->MakeMorph( target % fxScreen1->GetFxSpherical()->NbShapes(),
377 ( target + 1 ) % fxScreen1->GetFxSpherical()->NbShapes(),
378 morphFactor );
379 // }
381 return;
383 }
385 #ifdef SOTA_DEBUG_MODE
386 extern void Write2Console( const char * data );
387 #endif
388 void fxSync :: SyncSnareTouf( void )
389 {
390 // if( this->detection->InFxScreen2() )
391 // {
392 SamplesData data;
393 data = this->detection->GetSampleData( INST_SNARE );
394 if( data.playing )
395 {
396 if( lastStepDance == stepDance )
397 {
398 stepDance++;
399 #ifdef SOTA_DEBUG_MODE
400 Write2Console( "fxScreen2->HandleSnareSound();" );
401 Write2Console( "ok" );
402 #endif
404 //fxScreen2->HandleSnareSound(); // to not compile code not used
405 }
406 }
407 else
408 lastStepDance = stepDance;
410 // }
412 return;
413 }
415 void fxSync :: SyncWindTouf( void )
416 {
417 // if( this->detection->InFxScreen2() )
418 // {
420 SamplesData data;
421 data = this->detection->GetSampleData( INST_GROOVE );
423 if( data.playing )
424 {
425 if( lastWindTouf == windTouf )
426 {
427 windTouf++;
428 fxScreen2->HandleWindSound();
429 }
430 }
431 else
432 lastWindTouf = windTouf;
435 // }
436 return;
438 }
440 bool fxSync :: GetGreetzSync( void )
441 {
443 if( this->detection->GetSampleData( INST_BDRUM ).playing )
444 {
445 if( greetz == lastGreetz )
446 {
447 greetz++;
448 return true;
449 }
450 }
451 else
452 {
453 lastGreetz = greetz;
454 return false;
455 }
457 return false;
459 }