FastLED 3.10.6
Loading...
Searching...
No Matches
hydropack.ino File Reference

Detailed Description

HydroPack: stage-level musical bass animates an LED < | > layout.

Definition in file hydropack.ino.

#include <Arduino.h>
#include <FastLED.h>
#include "fl/math/math.h"
#include "fl/stl/static_assert.h"
#include "fl/ui/ui.h"
+ Include dependency graph for hydropack.ino:

Go to the source code of this file.

Macros

#define I2S_CLK   4
 
#define I2S_SD   8
 
#define I2S_WS   7
 
#define PIN_PREVIEW   3
 

Functions

void advanceDoubleEnvelope (float &trigger, float &stage, float &level, float attackSeconds, float decaySeconds, float deltaSeconds)
 
float advanceLinearFade (float value, float target, float durationSeconds, float deltaSeconds)
 
float applyAttackDecay (float value, float target, float attackSeconds, float decaySeconds, float deltaSeconds)
 
fl::UIDescription description ("The INMP441 sound-pressure gate warms up for two seconds of confident " "beats before arming music mode. Conversation and one-off noise stay " "dark; musical bass " "fires the center, with stronger hits launching to both triangles.")
 
void fireAnalyzer (float bass, float threshold, float minIntensity, float &trigger)
 
 FL_STATIC_ASSERT (sizeof(kHydroPackLedLayout)/sizeof(kHydroPackLedLayout[0])==kPreviewLedCount, "HydroPack screenmap must contain every preview LED")
 
float getVibeBeatConfidence (const fl::audio::detector::VibeLevels &levels)
 
bool isMusicModeActive ()
 
bool isMusicPresent ()
 
void loop ()
 
fl::ScreenMap makePreviewMap ()
 
void renderPreview ()
 
void setup ()
 
uint8_t toByte (float value)
 
void updateSoundLevel ()
 

Variables

fl::audio::Config audioConfig
 
fl::UIAudio audioUi ("Audio Input", audioConfig)
 
fl::shared_ptr< fl::audio::Processor > gAudio
 
float gBeatConfidence = 0.0f
 
float gCenterEnvelopeStage = 0.0f
 
float gCenterLevel = 0.0f
 
float gCenterTrigger = 0.0f
 
uint32_t gLastQualifyingBeatMs = 0
 
uint32_t gMusicActiveUntilMs = 0
 
float gMusicModeLevel = 0.0f
 
uint32_t gMusicWarmupStartedMs = 0
 
float gPendingTriangleLevel = 0.0f
 
fl::audio::SoundLevelMeter gSoundLevelMeter
 
float gSoundPressureDbSpl = 33.0f
 
float gTriangleEnvelopeStage = 0.0f
 
uint32_t gTriangleFireAtMs = 0
 
float gTriangleLevel = 0.0f
 
float gTriangleTrigger = 0.0f
 
constexpr float kCenterBassThreshold = 1.05f
 
constexpr float kCenterEnvelopeAttackSeconds = 0.015f
 
constexpr float kCenterEnvelopeFadeSeconds = 0.060f
 
constexpr uint8_t kCenterStart = 6
 
constexpr float kDefaultMinimumBeatConfidence = 0.05f
 
constexpr float kDefaultStageThresholdDbSpl = 72.0f
 
constexpr uint8_t kHydroPackLedCount = 18
 
const fl::vec2f kHydroPackLedLayout []
 
constexpr uint32_t kMaximumMusicBeatGapMs = 2000
 
constexpr float kMaximumMusicZcf = 0.40f
 
constexpr uint32_t kMusicHoldMs = 2000
 
constexpr float kMusicModeFadeSeconds = 0.5f
 
constexpr uint32_t kMusicWarmupMs = 2000
 
constexpr uint8_t kPreviewLedCount = kHydroPackLedCount
 
constexpr uint8_t kRightTriangleStart = 12
 
constexpr float kTriangleBassThreshold = 1.65f
 
constexpr float kTriangleEnvelopeAttackSeconds = 0.015f
 
constexpr float kTriangleEnvelopeFadeSeconds = 0.040f
 
constexpr uint32_t kTriangleLaunchDelayMs = 5
 
constexpr uint8_t kTriangleLedCount = 6
 
fl::UISlider minimumBeatConfidence ("Minimum Vibe Beat Confidence", kDefaultMinimumBeatConfidence, 0.0f, 1.0f, 0.05f)
 
CRGB previewLeds [kPreviewLedCount]
 
fl::ScreenMap previewMap = makePreviewMap()
 
fl::UISlider stageThresholdDbSpl ("Minimum Music Level (dB SPL)", kDefaultStageThresholdDbSpl, 60.0f, 105.0f, 1.0f)
 
fl::UITitle title ("HydroPack Stage Music Launch")