The SIGMAFW 1.0, is an open source custom firmware that manages the hardware on the SIGMA. The main concept of the software created for the GM01 is a dinamic and easy to use light instrument able of playing pre-recorded animations or generate new ones in real time, modifing them according to multiple hardware inputs:
- Motion (accelerometer)
- Music or sound (mic/line input)
- MIDI (USB or wireless)
- WIFI (smartphone or laptop)
The SigmaFW is a creative and artistic tool that makes easier to custom animate led setups without programming knowledge. Using our custom MIDI library, the user can plug the unit via USB to the computer and live compose new LED animations in any music/midi production software or workstation. This MIDI library gives the user absolute control of the color, brightness, saturation and timming without codding, making possible to create LED animations in a more expressive and artistic way. Also, is intended to auto-generate real time animations based on customizable parameters and responding to multiple hardware/user inputs.
The 1.0 version, features a built from scratch Beat Detection algorythm that determinates the tempo or BPM of incoming music from the mic/line input and modifies the BPM of the MIDI animation being played, to match the tempo and rythm of the external music. Also the BPM of the MIDI animation can be set by motion, following the rythm with the head just like a TAP Tempo.
The user can control the status of the system with the Menu displayed on the inner 2" LCD of the unit and navigate through the options with the control knob, or can remotelly control the system menu with a smartphone via Wifi or RC.
The system is based on a C++ block that runs in Teensy32 over the TeensyDuion Core of Stoffregen and another block of Lua code running independiently over NodeMCU in WS8212. The whole firmware is under premature developing but there's few functional blocks that allow a basic functioning (still Beta).
The system is composed, by now, by 25 classes containing 12.000 code lines. It is a modular system arranged in the following libraries:
LovSystem
This is the main core of the firmware, running the main cycle. the main cycle is executed once every frame and has every step needed for building a new frame. The system recives the sensors values, such as position and movement, MIDI wire messages, RF or File, the different user inputs and captures an audio sample group related to the duration of the frame.
With this values, the system extracts de tempo and the beat of the audio, each active MIDI instrument module, and the light/color library calculates in RAM the content to be displayed on the LED Panels in the next frame.
LovAudio
This library contains 3 different principal objects (classes): LovADC, LovAudio and LovMachine:
- LovADC manages, in background, the low level task of acquiring the audio samples and managing an autogain control system.
- LovAudio processes the audio samples and calculates few filters and statistic values as energy explosion in diverse frequencies.
- LovMachine is a "tesis machine" that executes a darwinist type tempo/beat detection algorythm that manages in real time a collection hypothesis and selects the most plausible one.
LovCroma
It is a two leveled graphic library: LovCroma and LovSpark:
- LovCroma it's a static 2D graphic library that draws the color confiurations and manages the communication to the LED drivers.
- LovSparks it's a dynamic 2D graphic library that works with LovCroma and manages the time extended processes like decays, hue, pulsars,..etc
LovMidi
It's a library composed by an "instrument preset bank", real time MIDI CC events via Wire or RC, a 0 format MIDI files driver and the internal rooting setup. The "instruments preset bank" admits code settings of lux MIDI instruments composed by LovSpark modules, and the system alows them to execute every predefined instrument. By now, theres only one defined instrument: Honey
LovWiFi
This library manages de Radio communications interactuing with the NodeMCu lua code. It gives real time MIDI messages, as interaction with the user/PC applicatios too.
LovMotion
This library it's still being developed, will give the system information about movement or spacial orientation of the unit.
LuaFrim
It's the firmware that executes independently WS8212. It includes a Web micro-server and a MIDI relay.