From c839d4988c01da253a2ea561ecbae73fa95650ea Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 14:19:31 +0100 Subject: [PATCH 01/13] Start initial code on trying to wrap AudioLux into WLED --- .../usermod_v2_audiolux/usermod_v2_audiolux.h | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 usermods/usermod_v2_audiolux/usermod_v2_audiolux.h diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h new file mode 100644 index 0000000000..a540d2fe77 --- /dev/null +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -0,0 +1,103 @@ +#pragma once + +#include "wled.h" + +#include "pixl.h" +#include "Logging.h" + +#define LOGLEVEL LOG_LEVEL_INFOS + +using namespace pixl; + +//======================================================================================================================== + +class AudioLux { + + int NUM_LEDS; + LEDStrip ledstrip = LEDStrip(NUM_LEDS); + // LEDs alleds; + Input* input; + Visualization* viz; + TriangleAnimation* anim; + + public: + + AudioLux() {} + + void initEffect() { + + NUM_LEDS = SEGMENT.virtualWidth() * SEGMENT.virtualHeight(); + + ledstrip = LEDStrip(NUM_LEDS); + // alleds = LEDs(&ledstrip, 0, NUM_LEDS); + + input = new RandomInput(); + + // Add all the components to the looper so they update every frame + Looper* looper = Looper::instance(); + looper->clearAll(); + looper->addInput(input); + looper->addVisualization(viz); + looper->addAnimation(anim); + // looper->setUpdatesPerSecond(30); + } + + void setVizTwinkleVisualization() { + viz = new TwinkleVisualization(input, NUM_LEDS); + } + + void loop() { + Looper::instance()->loop(); + } +}; + +//======================================================================================================================== + +AudioLux audioLux; + +static const char _data_FX_mode_TwinkleVisualization[] PROGMEM = "AudioLux - TwinkleVisualization"; + + +uint16_t mode_TwinkleVisualization() { + if (SEGENV.call == 0) { + audioLux.initEffect(); + audioLux.setVizTwinkleVisualization(); + } + audioLux.loop(); + return FRAMETIME; +} + + +class AudioLuxUsermod : public Usermod { + + public: + + AudioLuxUsermod(const char *name, bool enabled):Usermod(name, enabled) {} //WLEDMM + + void setup() { + + if(!enabled) return; + + strip.addEffect(255, &mode_TwinkleVisualization, _data_FX_mode_TwinkleVisualization); + + initDone = true; + } + + void loop() { + if (!enabled || strip.isUpdating()) return; + + // do your magic here + if (millis() - lastTime > 1000) { + //USER_PRINTLN("I'm alive!"); + lastTime = millis(); + } + + + } + + uint16_t getId() + { + return USERMOD_ID_AUDIOLUX; + } + +}; \ No newline at end of file From cd58dd1d28cbf70bbcaed5fc6d6a428fe9afc4ad Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 14:23:26 +0100 Subject: [PATCH 02/13] Start initial code on trying to wrap AudioLux into WLED --- wled00/const.h | 1 + wled00/usermods_list.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/wled00/const.h b/wled00/const.h index f78f19c62e..ee7da6560e 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -139,6 +139,7 @@ #define USERMOD_ID_WEATHER 91 //Usermod "usermod_v2_weather.h" #define USERMOD_ID_GAMES 92 //Usermod "usermod_v2_games.h" #define USERMOD_ID_ANIMARTRIX 93 //Usermod "usermod_v2_animartrix.h" +#define USERMOD_ID_AUDIOLUX 94 //Usermod "usermod_v2_audiolux.h" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 1ccf1d0301..728fa37619 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -212,6 +212,9 @@ #ifdef USERMOD_ANIMARTRIX #include "../usermods/usermod_v2_animartrix/usermod_v2_animartrix.h" #endif +#ifdef USERMOD_AUDIOLUX +#include "../usermods/usermod_v2_audiolux/usermod_v2_audiolux.h" +#endif void registerUsermods() { @@ -405,4 +408,8 @@ void registerUsermods() #ifdef USERMOD_ANIMARTRIX usermods.add(new AnimartrixUsermod("Animartrix", false)); #endif +#ifdef USERMOD_AUDIOLUX + usermods.add(new AudioLuxUsermod("AudioLux", true)); +#endif + } From bc07d7a8fbe36305d80e211bb9ad005325f52760 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 14:27:44 +0100 Subject: [PATCH 03/13] Start initial code on trying to wrap AudioLux into WLED --- platformio.ini | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/platformio.ini b/platformio.ini index a9ab79f302..d8eecb349c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -933,6 +933,10 @@ lib_deps_S = animartrix_build_flags = -D USERMOD_ANIMARTRIX ;; WLEDMM usermod: CC BY-NC 3.0 licensed effects by Stefan Petrick animartrix_lib_deps = https://github.com/netmindz/animartrix.git#f070fefc42febe2de3a2ab5d6d39e78bbc539702 +audiolux_lib_deps = + https://github.com/netmindz/Audiolux.git#WLED-build-errors + https://github.com/netmindz/Arduino-logging-library.git#9d739e98159677fb8a4d1e03087c29ce7b2efd60 + build_flags_M = -D USERMOD_ARTIFX ; WLEDMM usermod - temporarily moved into "_M", due to problems in "_S" when compiling with -O2 -D WLED_MAX_USERMODS=25 ; default only 4-6, also for _XL configs takes 25 pointers in memory @@ -944,6 +948,7 @@ build_flags_M = -D USERMOD_ROTARY_ENCODER_UI -D USERMOD_AUTO_SAVE ${common_mm.animartrix_build_flags} + -D USERMOD_AUDIOLUX ;WLEDMM: only setting WLED_DEBUG_HOST is enough, ip and port can be defined in sync settings as well -D WLED_DEBUG_HOST='"192.168.x.x"' ;; to send debug messages over network to host 192.168.x.y - FQDN is also possible -D WLED_DEBUG_PORT=1768 ;; port for network debugging. default = 7868 @@ -953,12 +958,14 @@ lib_deps_M = OneWire@~2.3.5 ; used for USERMOD_FOUR_LINE_DISPLAY and USERMOD_DALLASTEMPERATURE olikraus/U8g2 @ ^2.28.8 ; used for USERMOD_FOUR_LINE_DISPLAY ${common_mm.animartrix_lib_deps} + ${common_mm.audiolux_lib_deps} lib_deps_V4_M = ;https://github.com/blazoncek/OneWire.git ; includes bugfixes for inconsistent readings paulstoffregen/OneWire@ ^2.3.7 ; used for USERMOD_DALLASTEMPERATURE -> need newer release with bugfixes for -S3; still requires TEMPERATURE_PIN < 46 olikraus/U8g2@ ^2.34.5 ; used for USERMOD_FOUR_LINE_DISPLAY -> need newer version with bugfixes for arduino-esp32 v2.0.4 (Wire inititialization) ${common_mm.animartrix_lib_deps} + ${common_mm.audiolux_lib_deps} build_flags_XL = -D USERMOD_WEATHER ; WLEDMM usermod From f27a319eaf02237ca9baa960ad54fac466ccce75 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 14:42:10 +0100 Subject: [PATCH 04/13] Updated AudioLux dep --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index d8eecb349c..4a019a6619 100644 --- a/platformio.ini +++ b/platformio.ini @@ -934,7 +934,7 @@ animartrix_build_flags = -D USERMOD_ANIMARTRIX ;; WLEDMM usermod: CC BY-NC 3.0 l animartrix_lib_deps = https://github.com/netmindz/animartrix.git#f070fefc42febe2de3a2ab5d6d39e78bbc539702 audiolux_lib_deps = - https://github.com/netmindz/Audiolux.git#WLED-build-errors + https://github.com/netmindz/Audiolux.git#8a54bbec5e1dbed77beb9c136c8f6723454fca0d ;; WLED-build-errors https://github.com/netmindz/Arduino-logging-library.git#9d739e98159677fb8a4d1e03087c29ce7b2efd60 build_flags_M = From 557e17b3be0d2d3ac3740eff0760dbd5a88e8a7c Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 19:39:27 +0100 Subject: [PATCH 05/13] Updated AudioLux dep --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 4a019a6619..8024d17996 100644 --- a/platformio.ini +++ b/platformio.ini @@ -934,7 +934,7 @@ animartrix_build_flags = -D USERMOD_ANIMARTRIX ;; WLEDMM usermod: CC BY-NC 3.0 l animartrix_lib_deps = https://github.com/netmindz/animartrix.git#f070fefc42febe2de3a2ab5d6d39e78bbc539702 audiolux_lib_deps = - https://github.com/netmindz/Audiolux.git#8a54bbec5e1dbed77beb9c136c8f6723454fca0d ;; WLED-build-errors + https://github.com/netmindz/Audiolux.git#5de778a1011d5458d644e7590a28674b77240b8e ;; WLED-build-errors https://github.com/netmindz/Arduino-logging-library.git#9d739e98159677fb8a4d1e03087c29ce7b2efd60 build_flags_M = From 27b90992cf92a004e2de583a1facf113d7b332fd Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 19:52:23 +0100 Subject: [PATCH 06/13] Try and exclude AudioLux from XL due to size issue --- platformio.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/platformio.ini b/platformio.ini index 8024d17996..507c391caf 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1030,6 +1030,7 @@ lib_deps = ${esp32_4MB_S_base.lib_deps} ${common_mm.lib_deps_M} [esp32_4MB_XL_base] extends = esp32_4MB_M_base build_flags = ${esp32_4MB_M_base.build_flags} ${common_mm.build_flags_XL} +build_unflags = -D USERMOD_AUDIOLUX ; Tips us over the edge lib_deps = ${esp32_4MB_M_base.lib_deps} ${common_mm.lib_deps_XL} ; board_build.partitions = tools/WLED_ESP32-wrover_4MB.csv From 2b2f9293be07d96d7b93b041b549c08222c474ae Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 20:31:25 +0100 Subject: [PATCH 07/13] Add Hue --- usermods/usermod_v2_audiolux/usermod_v2_audiolux.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h index a540d2fe77..a23b56c1ce 100644 --- a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -55,18 +55,26 @@ class AudioLux { AudioLux audioLux; -static const char _data_FX_mode_TwinkleVisualization[] PROGMEM = "AudioLux - TwinkleVisualization"; +static const char _data_FX_mode_TwinkleVisualization[] PROGMEM = "AudioLux - Twinkle"; +static const char _data_FX_mode_HueVisualization[] PROGMEM = "AudioLux - Hue"; uint16_t mode_TwinkleVisualization() { if (SEGENV.call == 0) { - audioLux.initEffect(); audioLux.setVizTwinkleVisualization(); } audioLux.loop(); return FRAMETIME; } +uint16_t mode_HueVisualization() { + if (SEGENV.call == 0) { + audioLux.setVizHueVisualization(); + } + audioLux.loop(); + return FRAMETIME; +} + class AudioLuxUsermod : public Usermod { @@ -79,6 +87,7 @@ class AudioLuxUsermod : public Usermod { if(!enabled) return; strip.addEffect(255, &mode_TwinkleVisualization, _data_FX_mode_TwinkleVisualization); + strip.addEffect(255, &mode_HueVisualization, _data_FX_mode_HueVisualization); initDone = true; } From 36c7ae231b48e204cc8dba8e6c25b324006688bc Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 20:56:21 +0100 Subject: [PATCH 08/13] Add Hue --- .../usermod_v2_audiolux/usermod_v2_audiolux.h | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h index a23b56c1ce..42274a8c87 100644 --- a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -15,10 +15,10 @@ class AudioLux { int NUM_LEDS; LEDStrip ledstrip = LEDStrip(NUM_LEDS); - // LEDs alleds; Input* input; Visualization* viz; - TriangleAnimation* anim; + // TriangleAnimation* anim; + Looper* looper = Looper::instance(); public: @@ -29,25 +29,34 @@ class AudioLux { NUM_LEDS = SEGMENT.virtualWidth() * SEGMENT.virtualHeight(); ledstrip = LEDStrip(NUM_LEDS); - // alleds = LEDs(&ledstrip, 0, NUM_LEDS); input = new RandomInput(); // Add all the components to the looper so they update every frame - Looper* looper = Looper::instance(); + looper->clearAll(); looper->addInput(input); - looper->addVisualization(viz); - looper->addAnimation(anim); + // looper->addAnimation(anim); // looper->setUpdatesPerSecond(30); } void setVizTwinkleVisualization() { + initEffect(); viz = new TwinkleVisualization(input, NUM_LEDS); + looper->addVisualization(viz); + } + + void setVizHueVisualization() { + initEffect(); + viz = new HueVisualization(input, NUM_LEDS); + looper->addVisualization(viz); } void loop() { Looper::instance()->loop(); + for(int i = 0; i < NUM_LEDS; i++) { + SEGMENT.setPixelColor(i, ledstrip.leds[i]); // TODO: UGLY copy for now + } } }; From a7c5165670da68e410bd05e23a6935871b13b31b Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 21:39:04 +0100 Subject: [PATCH 09/13] Add Fire --- .../usermod_v2_audiolux/usermod_v2_audiolux.h | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h index 42274a8c87..f2c64c9002 100644 --- a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -17,7 +17,7 @@ class AudioLux { LEDStrip ledstrip = LEDStrip(NUM_LEDS); Input* input; Visualization* viz; - // TriangleAnimation* anim; + Animation* anim; Looper* looper = Looper::instance(); public: @@ -35,8 +35,9 @@ class AudioLux { // Add all the components to the looper so they update every frame looper->clearAll(); + delete viz; + delete anim; looper->addInput(input); - // looper->addAnimation(anim); // looper->setUpdatesPerSecond(30); } @@ -49,6 +50,13 @@ class AudioLux { void setVizHueVisualization() { initEffect(); viz = new HueVisualization(input, NUM_LEDS); + // aim = new CircleAnimation(viz, ledstrip.leds, NUM_LEDS); + looper->addVisualization(viz); + } + + void setFireVisualization() { + initEffect(); + viz = new FireVisualization(input, NUM_LEDS); looper->addVisualization(viz); } @@ -66,6 +74,7 @@ AudioLux audioLux; static const char _data_FX_mode_TwinkleVisualization[] PROGMEM = "AudioLux - Twinkle"; static const char _data_FX_mode_HueVisualization[] PROGMEM = "AudioLux - Hue"; +static const char _data_FX_mode_FireVisualization[] PROGMEM = "AudioLux - Fire"; uint16_t mode_TwinkleVisualization() { @@ -84,6 +93,14 @@ uint16_t mode_HueVisualization() { return FRAMETIME; } +uint16_t mode_FireVisualization() { + if (SEGENV.call == 0) { + audioLux.setFireVisualization(); + } + audioLux.loop(); + return FRAMETIME; +} + class AudioLuxUsermod : public Usermod { @@ -97,6 +114,7 @@ class AudioLuxUsermod : public Usermod { strip.addEffect(255, &mode_TwinkleVisualization, _data_FX_mode_TwinkleVisualization); strip.addEffect(255, &mode_HueVisualization, _data_FX_mode_HueVisualization); + strip.addEffect(255, &mode_FireVisualization, _data_FX_mode_FireVisualization); initDone = true; } From f90b04de100d3fb44d71cf4d0a80f5af82c80dcd Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Thu, 12 Oct 2023 22:06:13 +0100 Subject: [PATCH 10/13] Trying to use a Visualization --- usermods/usermod_v2_audiolux/usermod_v2_audiolux.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h index f2c64c9002..a486905033 100644 --- a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -15,6 +15,7 @@ class AudioLux { int NUM_LEDS; LEDStrip ledstrip = LEDStrip(NUM_LEDS); + LEDs leds = LEDs(&ledstrip, 0, 0, false); Input* input; Visualization* viz; Animation* anim; @@ -29,6 +30,7 @@ class AudioLux { NUM_LEDS = SEGMENT.virtualWidth() * SEGMENT.virtualHeight(); ledstrip = LEDStrip(NUM_LEDS); + leds = LEDs(&ledstrip, 0, NUM_LEDS, false); input = new RandomInput(); @@ -50,8 +52,9 @@ class AudioLux { void setVizHueVisualization() { initEffect(); viz = new HueVisualization(input, NUM_LEDS); - // aim = new CircleAnimation(viz, ledstrip.leds, NUM_LEDS); + anim = new PassThroughAnimation(viz, leds); looper->addVisualization(viz); + looper->addAnimation(anim); } void setFireVisualization() { From 30b8bf5dd70e10635cf6fb3a24a7301bb0a1f729 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Fri, 13 Oct 2023 18:36:44 +0100 Subject: [PATCH 11/13] Start adding example of connecting to WLED audio data --- .../usermod_v2_audiolux/usermod_v2_audiolux.h | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h index a486905033..72ebfeb2cc 100644 --- a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -11,6 +11,30 @@ using namespace pixl; //======================================================================================================================== +class WLEDAudioInput : public Input { + public: + WLEDAudioInput(); + void update() { + if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { + // add support for no audio + um_data = simulateSound(SEGMENT.soundSim); + } + } + float getInput(int index = 0) { + if (index == 0) { + uint8_t samplePeak = *(uint8_t*)um_data->u_data[3]; + return 0.0; // TODO map 0-255 to expected range + } else if (index == 1) { + uint8_t *fftResult = (uint8_t*) um_data->u_data[2]; + return 0.0; // TODO map 0-255 to expected range + } else { + return 0.0; + } + } + private: + um_data_t *um_data; +}; + class AudioLux { int NUM_LEDS; From e5435b6fe2f27900a001e4e3ccfb23019883b721 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Fri, 13 Oct 2023 18:43:32 +0100 Subject: [PATCH 12/13] Start adding example of connecting to WLED audio data --- usermods/usermod_v2_audiolux/usermod_v2_audiolux.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h index 72ebfeb2cc..0610a44000 100644 --- a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -23,10 +23,10 @@ class WLEDAudioInput : public Input { float getInput(int index = 0) { if (index == 0) { uint8_t samplePeak = *(uint8_t*)um_data->u_data[3]; - return 0.0; // TODO map 0-255 to expected range + return map((samplePeak * 4), 0 1020, 0, 1000) / 1000; } else if (index == 1) { uint8_t *fftResult = (uint8_t*) um_data->u_data[2]; - return 0.0; // TODO map 0-255 to expected range + return 0.0; // TODO map 0-255 to expected range - https://github.com/netmindz/Audiolux/blob/81056ab8f59cb4a801b541ba57a62786b4b93a73/msgeq7.cpp#L39 } else { return 0.0; } From bd9205d0ceb9a3aee8032587be16c62d12788995 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Fri, 13 Oct 2023 19:43:02 +0100 Subject: [PATCH 13/13] AudioFire example --- .../usermod_v2_audiolux/usermod_v2_audiolux.h | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h index 0610a44000..4a490ee00f 100644 --- a/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h +++ b/usermods/usermod_v2_audiolux/usermod_v2_audiolux.h @@ -13,7 +13,7 @@ using namespace pixl; class WLEDAudioInput : public Input { public: - WLEDAudioInput(); + WLEDAudioInput(){} void update() { if (!usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { // add support for no audio @@ -22,8 +22,10 @@ class WLEDAudioInput : public Input { } float getInput(int index = 0) { if (index == 0) { - uint8_t samplePeak = *(uint8_t*)um_data->u_data[3]; - return map((samplePeak * 4), 0 1020, 0, 1000) / 1000; + float volume = *(float*)um_data->u_data[0]; + float value = (float) map((volume * 4), 0, 1020, 0, 1000) / 1000.0f; + if(value > 0) Serial.println(value); + return value; } else if (index == 1) { uint8_t *fftResult = (uint8_t*) um_data->u_data[2]; return 0.0; // TODO map 0-255 to expected range - https://github.com/netmindz/Audiolux/blob/81056ab8f59cb4a801b541ba57a62786b4b93a73/msgeq7.cpp#L39 @@ -56,25 +58,31 @@ class AudioLux { ledstrip = LEDStrip(NUM_LEDS); leds = LEDs(&ledstrip, 0, NUM_LEDS, false); - input = new RandomInput(); - // Add all the components to the looper so they update every frame looper->clearAll(); delete viz; delete anim; - looper->addInput(input); - // looper->setUpdatesPerSecond(30); + delete input; + looper->setUpdatesPerSecond(40); } void setVizTwinkleVisualization() { initEffect(); + + input = new NullInput(); + looper->addInput(input); + viz = new TwinkleVisualization(input, NUM_LEDS); looper->addVisualization(viz); } void setVizHueVisualization() { initEffect(); + + input = new RandomInput(); + looper->addInput(input); + viz = new HueVisualization(input, NUM_LEDS); anim = new PassThroughAnimation(viz, leds); looper->addVisualization(viz); @@ -83,6 +91,20 @@ class AudioLux { void setFireVisualization() { initEffect(); + + input = new RandomInput(); + looper->addInput(input); + + viz = new FireVisualization(input, NUM_LEDS); + looper->addVisualization(viz); + } + + void setAudioFireVisualization() { + initEffect(); + + input = new WLEDAudioInput(); + looper->addInput(input); + viz = new FireVisualization(input, NUM_LEDS); looper->addVisualization(viz); } @@ -102,6 +124,7 @@ AudioLux audioLux; static const char _data_FX_mode_TwinkleVisualization[] PROGMEM = "AudioLux - Twinkle"; static const char _data_FX_mode_HueVisualization[] PROGMEM = "AudioLux - Hue"; static const char _data_FX_mode_FireVisualization[] PROGMEM = "AudioLux - Fire"; +static const char _data_FX_mode_AudioFireVisualization[] PROGMEM = "AudioLux - AudioFire"; uint16_t mode_TwinkleVisualization() { @@ -128,6 +151,14 @@ uint16_t mode_FireVisualization() { return FRAMETIME; } +uint16_t mode_AudioFireVisualization() { + if (SEGENV.call == 0) { + audioLux.setAudioFireVisualization(); + } + audioLux.loop(); + return FRAMETIME; +} + class AudioLuxUsermod : public Usermod { @@ -142,6 +173,7 @@ class AudioLuxUsermod : public Usermod { strip.addEffect(255, &mode_TwinkleVisualization, _data_FX_mode_TwinkleVisualization); strip.addEffect(255, &mode_HueVisualization, _data_FX_mode_HueVisualization); strip.addEffect(255, &mode_FireVisualization, _data_FX_mode_FireVisualization); + strip.addEffect(255, &mode_AudioFireVisualization, _data_FX_mode_AudioFireVisualization); initDone = true; }