@@ -73,6 +73,15 @@ int8_t tristate_square8(uint8_t x, uint8_t pulsewidth, uint8_t attdec) {
7373 return 0 ;
7474}
7575
76+ static um_data_t * getAudioData () {
77+ um_data_t *um_data;
78+ if (!usermods.getUMData (&um_data, USERMOD_ID_AUDIOREACTIVE)) {
79+ // add support for no audio
80+ um_data = simulateSound (SEGMENT.soundSim );
81+ }
82+ return um_data;
83+ }
84+
7685// effect functions
7786
7887/*
@@ -6325,7 +6334,7 @@ uint16_t mode_ripplepeak(void) { // * Ripple peak. By Andrew Tuli
63256334 if (!SEGENV.allocateData (dataSize)) return mode_static (); // allocation failed
63266335 Ripple* ripples = reinterpret_cast <Ripple*>(SEGENV.data );
63276336
6328- um_data_t *um_data = usermods. getAudioData ();
6337+ um_data_t *um_data = getAudioData ();
63296338 uint8_t samplePeak = *(uint8_t *)um_data->u_data [3 ];
63306339 #ifdef ESP32
63316340 float FFT_MajorPeak = *(float *) um_data->u_data [4 ];
@@ -6412,7 +6421,7 @@ uint16_t mode_2DSwirl(void) {
64126421 int ni = (cols - 1 ) - i;
64136422 int nj = (cols - 1 ) - j;
64146423
6415- um_data_t *um_data = usermods. getAudioData ();
6424+ um_data_t *um_data = getAudioData ();
64166425 float volumeSmth = *(float *) um_data->u_data [0 ]; // ewowi: use instead of sampleAvg???
64176426 int volumeRaw = *(int16_t *) um_data->u_data [1 ];
64186427
@@ -6438,7 +6447,7 @@ uint16_t mode_2DWaverly(void) {
64386447 const int cols = SEGMENT.virtualWidth ();
64396448 const int rows = SEGMENT.virtualHeight ();
64406449
6441- um_data_t *um_data = usermods. getAudioData ();
6450+ um_data_t *um_data = getAudioData ();
64426451 float volumeSmth = *(float *) um_data->u_data [0 ];
64436452
64446453 SEGMENT.fadeToBlackBy (SEGMENT.speed );
@@ -6487,7 +6496,7 @@ uint16_t mode_gravcenter(void) { // Gravcenter. By Andrew Tuline.
64876496 if (!SEGENV.allocateData (dataSize)) return mode_static (); // allocation failed
64886497 Gravity* gravcen = reinterpret_cast <Gravity*>(SEGENV.data );
64896498
6490- um_data_t *um_data = usermods. getAudioData ();
6499+ um_data_t *um_data = getAudioData ();
64916500 float volumeSmth = *(float *) um_data->u_data [0 ];
64926501
64936502 // SEGMENT.fade_out(240);
@@ -6532,7 +6541,7 @@ uint16_t mode_gravcentric(void) { // Gravcentric. By Andrew
65326541 if (!SEGENV.allocateData (dataSize)) return mode_static (); // allocation failed
65336542 Gravity* gravcen = reinterpret_cast <Gravity*>(SEGENV.data );
65346543
6535- um_data_t *um_data = usermods. getAudioData ();
6544+ um_data_t *um_data = getAudioData ();
65366545 float volumeSmth = *(float *) um_data->u_data [0 ];
65376546
65386547 // printUmData();
@@ -6580,7 +6589,7 @@ uint16_t mode_gravimeter(void) { // Gravmeter. By Andrew Tuline.
65806589 if (!SEGENV.allocateData (dataSize)) return mode_static (); // allocation failed
65816590 Gravity* gravcen = reinterpret_cast <Gravity*>(SEGENV.data );
65826591
6583- um_data_t *um_data = usermods. getAudioData ();
6592+ um_data_t *um_data = getAudioData ();
65846593 float volumeSmth = *(float *) um_data->u_data [0 ];
65856594
65866595 // SEGMENT.fade_out(240);
@@ -6617,7 +6626,7 @@ static const char _data_FX_MODE_GRAVIMETER[] PROGMEM = "Gravimeter@Rate of fall,
66176626// * JUGGLES //
66186627// ////////////////////
66196628uint16_t mode_juggles (void ) { // Juggles. By Andrew Tuline.
6620- um_data_t *um_data = usermods. getAudioData ();
6629+ um_data_t *um_data = getAudioData ();
66216630 float volumeSmth = *(float *) um_data->u_data [0 ];
66226631
66236632 SEGMENT.fade_out (224 ); // 6.25%
@@ -6640,7 +6649,7 @@ uint16_t mode_matripix(void) { // Matripix. By Andrew Tuline.
66406649 if (SEGLEN == 1 ) return mode_static ();
66416650 // even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
66426651
6643- um_data_t *um_data = usermods. getAudioData ();
6652+ um_data_t *um_data = getAudioData ();
66446653 int volumeRaw = *(int16_t *)um_data->u_data [1 ];
66456654
66466655 if (SEGENV.call == 0 ) {
@@ -6668,7 +6677,7 @@ uint16_t mode_midnoise(void) { // Midnoise. By Andrew Tuline.
66686677 if (SEGLEN == 1 ) return mode_static ();
66696678// Changing xdist to SEGENV.aux0 and ydist to SEGENV.aux1.
66706679
6671- um_data_t *um_data = usermods. getAudioData ();
6680+ um_data_t *um_data = getAudioData ();
66726681 float volumeSmth = *(float *) um_data->u_data [0 ];
66736682
66746683 SEGMENT.fade_out (SEGMENT.speed );
@@ -6703,7 +6712,7 @@ uint16_t mode_noisefire(void) { // Noisefire. By Andrew Tuline.
67036712 CRGB::DarkOrange, CRGB::DarkOrange, CRGB::Orange, CRGB::Orange,
67046713 CRGB::Yellow, CRGB::Orange, CRGB::Yellow, CRGB::Yellow);
67056714
6706- um_data_t *um_data = usermods. getAudioData ();
6715+ um_data_t *um_data = getAudioData ();
67076716 float volumeSmth = *(float *) um_data->u_data [0 ];
67086717
67096718 if (SEGENV.call == 0 ) SEGMENT.fill (BLACK);
@@ -6727,7 +6736,7 @@ static const char _data_FX_MODE_NOISEFIRE[] PROGMEM = "Noisefire@!,!;;;01v;m12=2
67276736// /////////////////////
67286737uint16_t mode_noisemeter (void ) { // Noisemeter. By Andrew Tuline.
67296738
6730- um_data_t *um_data = usermods. getAudioData ();
6739+ um_data_t *um_data = getAudioData ();
67316740 float volumeSmth = *(float *) um_data->u_data [0 ];
67326741 int volumeRaw = *(int16_t *)um_data->u_data [1 ];
67336742
@@ -6764,7 +6773,7 @@ uint16_t mode_pixelwave(void) { // Pixelwave. By Andrew Tuline.
67646773 SEGMENT.fill (BLACK);
67656774 }
67666775
6767- um_data_t *um_data = usermods. getAudioData ();
6776+ um_data_t *um_data = getAudioData ();
67686777 int volumeRaw = *(int16_t *)um_data->u_data [1 ];
67696778
67706779 uint8_t secondHand = micros ()/(256 -SEGMENT.speed )/500 +1 % 16 ;
@@ -6796,7 +6805,7 @@ uint16_t mode_plasmoid(void) { // Plasmoid. By Andrew Tuline.
67966805 if (!SEGENV.allocateData (sizeof (plasphase))) return mode_static (); // allocation failed
67976806 Plasphase* plasmoip = reinterpret_cast <Plasphase*>(SEGENV.data );
67986807
6799- um_data_t *um_data = usermods. getAudioData ();
6808+ um_data_t *um_data = getAudioData ();
68006809 float volumeSmth = *(float *) um_data->u_data [0 ];
68016810
68026811 SEGMENT.fadeToBlackBy (32 );
@@ -6831,7 +6840,7 @@ uint16_t mode_puddlepeak(void) { // Puddlepeak. By Andrew Tuline.
68316840 uint8_t fadeVal = map (SEGMENT.speed ,0 ,255 , 224 , 254 );
68326841 unsigned pos = random16 (SEGLEN); // Set a random starting position.
68336842
6834- um_data_t *um_data = usermods. getAudioData ();
6843+ um_data_t *um_data = getAudioData ();
68356844 uint8_t samplePeak = *(uint8_t *)um_data->u_data [3 ];
68366845 uint8_t *maxVol = (uint8_t *)um_data->u_data [6 ];
68376846 uint8_t *binNum = (uint8_t *)um_data->u_data [7 ];
@@ -6872,7 +6881,7 @@ uint16_t mode_puddles(void) { // Puddles. By Andrew Tuline.
68726881
68736882 SEGMENT.fade_out (fadeVal);
68746883
6875- um_data_t *um_data = usermods. getAudioData ();
6884+ um_data_t *um_data = getAudioData ();
68766885 int volumeRaw = *(int16_t *)um_data->u_data [1 ];
68776886
68786887 if (volumeRaw > 1 ) {
@@ -6930,7 +6939,7 @@ uint16_t mode_blurz(void) { // Blurz. By Andrew Tuline.
69306939 if (SEGLEN == 1 ) return mode_static ();
69316940 // even with 1D effect we have to take logic for 2D segments for allocation as fill_solid() fills whole segment
69326941
6933- um_data_t *um_data = usermods. getAudioData ();
6942+ um_data_t *um_data = getAudioData ();
69346943 uint8_t *fftResult = (uint8_t *)um_data->u_data [2 ];
69356944
69366945 if (SEGENV.call == 0 ) {
@@ -6963,7 +6972,7 @@ uint16_t mode_DJLight(void) { // Written by ??? Adapted by Wil
69636972 // No need to prevent from executing on single led strips, only mid will be set (mid = 0)
69646973 const int mid = SEGLEN / 2 ;
69656974
6966- um_data_t *um_data = usermods. getAudioData ();
6975+ um_data_t *um_data = getAudioData ();
69676976 uint8_t *fftResult = (uint8_t *)um_data->u_data [2 ];
69686977
69696978 if (SEGENV.call == 0 ) {
@@ -6995,7 +7004,7 @@ uint16_t mode_freqmap(void) { // Map FFT_MajorPeak to SEGLEN.
69957004 // Start frequency = 60 Hz and log10(60) = 1.78
69967005 // End frequency = MAX_FREQUENCY in Hz and lo10(MAX_FREQUENCY) = MAX_FREQ_LOG10
69977006
6998- um_data_t *um_data = usermods. getAudioData ();
7007+ um_data_t *um_data = getAudioData ();
69997008 float FFT_MajorPeak = *(float *)um_data->u_data [4 ];
70007009 float my_magnitude = *(float *)um_data->u_data [5 ] / 4 .0f ;
70017010 if (FFT_MajorPeak < 1 ) FFT_MajorPeak = 1 ; // log10(0) is "forbidden" (throws exception)
@@ -7025,7 +7034,7 @@ static const char _data_FX_MODE_FREQMAP[] PROGMEM = "Freqmap@Fade rate,Starting
70257034// /////////////////////
70267035uint16_t mode_freqmatrix (void ) { // Freqmatrix. By Andreas Pleschung.
70277036 // No need to prevent from executing on single led strips, we simply change pixel 0 each time and avoid the shift
7028- um_data_t *um_data = usermods. getAudioData ();
7037+ um_data_t *um_data = getAudioData ();
70297038 float FFT_MajorPeak = *(float *)um_data->u_data [4 ];
70307039 float volumeSmth = *(float *)um_data->u_data [0 ];
70317040
@@ -7080,7 +7089,7 @@ static const char _data_FX_MODE_FREQMATRIX[] PROGMEM = "Freqmatrix@Speed,Sound e
70807089// SEGMENT.speed select faderate
70817090// SEGMENT.intensity select colour index
70827091uint16_t mode_freqpixels (void ) { // Freqpixel. By Andrew Tuline.
7083- um_data_t *um_data = usermods. getAudioData ();
7092+ um_data_t *um_data = getAudioData ();
70847093 float FFT_MajorPeak = *(float *)um_data->u_data [4 ];
70857094 float my_magnitude = *(float *)um_data->u_data [5 ] / 16 .0f ;
70867095 if (FFT_MajorPeak < 1 ) FFT_MajorPeak = 1 .0f ; // log10(0) is "forbidden" (throws exception)
@@ -7123,7 +7132,7 @@ static const char _data_FX_MODE_FREQPIXELS[] PROGMEM = "Freqpixels@Fade rate,Sta
71237132// Depending on the music stream you have you might find it useful to change the frequency mapping.
71247133uint16_t mode_freqwave (void ) { // Freqwave. By Andreas Pleschung.
71257134 // As before, this effect can also work on single pixels, we just lose the shifting effect
7126- um_data_t *um_data = usermods. getAudioData ();
7135+ um_data_t *um_data = getAudioData ();
71277136 float FFT_MajorPeak = *(float *)um_data->u_data [4 ];
71287137 float volumeSmth = *(float *)um_data->u_data [0 ];
71297138
@@ -7178,7 +7187,7 @@ uint16_t mode_gravfreq(void) { // Gravfreq. By Andrew Tuline.
71787187 if (!SEGENV.allocateData (dataSize)) return mode_static (); // allocation failed
71797188 Gravity* gravcen = reinterpret_cast <Gravity*>(SEGENV.data );
71807189
7181- um_data_t *um_data = usermods. getAudioData ();
7190+ um_data_t *um_data = getAudioData ();
71827191 float FFT_MajorPeak = *(float *)um_data->u_data [4 ];
71837192 float volumeSmth = *(float *)um_data->u_data [0 ];
71847193 if (FFT_MajorPeak < 1 ) FFT_MajorPeak = 1 ; // log10(0) is "forbidden" (throws exception)
@@ -7221,7 +7230,7 @@ static const char _data_FX_MODE_GRAVFREQ[] PROGMEM = "Gravfreq@Rate of fall,Sens
72217230// ** Noisemove //
72227231// ////////////////////
72237232uint16_t mode_noisemove (void ) { // Noisemove. By: Andrew Tuline
7224- um_data_t *um_data = usermods. getAudioData ();
7233+ um_data_t *um_data = getAudioData ();
72257234 uint8_t *fftResult = (uint8_t *)um_data->u_data [2 ];
72267235
72277236 int fadeoutDelay = (256 - SEGMENT.speed ) / 96 ;
@@ -7244,7 +7253,7 @@ static const char _data_FX_MODE_NOISEMOVE[] PROGMEM = "Noisemove@Speed of perlin
72447253// ** Rocktaves //
72457254// ////////////////////
72467255uint16_t mode_rocktaves (void ) { // Rocktaves. Same note from each octave is same colour. By: Andrew Tuline
7247- um_data_t *um_data = usermods. getAudioData ();
7256+ um_data_t *um_data = getAudioData ();
72487257 float FFT_MajorPeak = *(float *) um_data->u_data [4 ];
72497258 float my_magnitude = *(float *) um_data->u_data [5 ] / 16 .0f ;
72507259
@@ -7282,7 +7291,7 @@ static const char _data_FX_MODE_ROCKTAVES[] PROGMEM = "Rocktaves@;!,!;!;01f;m12=
72827291uint16_t mode_waterfall (void ) { // Waterfall. By: Andrew Tuline
72837292 // effect can work on single pixels, we just lose the shifting effect
72847293
7285- um_data_t *um_data = usermods. getAudioData ();
7294+ um_data_t *um_data = getAudioData ();
72867295 uint8_t samplePeak = *(uint8_t *)um_data->u_data [3 ];
72877296 float FFT_MajorPeak = *(float *) um_data->u_data [4 ];
72887297 uint8_t *maxVol = (uint8_t *)um_data->u_data [6 ];
@@ -7337,7 +7346,7 @@ uint16_t mode_2DGEQ(void) { // By Will Tatam. Code reduction by Ewoud Wijma.
73377346 if (!SEGENV.allocateData (cols*sizeof (uint16_t ))) return mode_static (); // allocation failed
73387347 uint16_t *previousBarHeight = reinterpret_cast <uint16_t *>(SEGENV.data ); // array of previous bar heights per frequency band
73397348
7340- um_data_t *um_data = usermods. getAudioData ();
7349+ um_data_t *um_data = getAudioData ();
73417350 uint8_t *fftResult = (uint8_t *)um_data->u_data [2 ];
73427351
73437352 if (SEGENV.call == 0 ) for (int i=0 ; i<cols; i++) previousBarHeight[i] = 0 ;
@@ -7396,7 +7405,7 @@ uint16_t mode_2DFunkyPlank(void) { // Written by ??? Adapted by Wil
73967405 bandInc = (NUMB_BANDS / cols);
73977406 }
73987407
7399- um_data_t *um_data = usermods. getAudioData ();
7408+ um_data_t *um_data = getAudioData ();
74007409 uint8_t *fftResult = (uint8_t *)um_data->u_data [2 ];
74017410
74027411 if (SEGENV.call == 0 ) {
0 commit comments