Etterna 0.74.4
Loading...
Searching...
No Matches
FlamJam.h
1#pragma once
2#include "../../PatternModHelpers.h"
3#include "../HA_Sequencers/FlamSequencing.h"
4
15{
16 const CalcPatternMod _pmod = FlamJam;
17 const std::string name = "FlamJamMod";
18
19#pragma region params
20 float min_mod = 0.3F;
21 float max_mod = 1.F;
22 float scaler = 0.001F;
23 float base = 0.5F;
24
25 float group_tol = 35.F;
26 float step_tol = 17.5F;
27
28 const std::vector<std::pair<std::string, float*>> _params{
29 { "min_mod", &min_mod },
30 { "max_mod", &max_mod },
31 { "scaler", &scaler },
32 { "base", &base },
33
34 // params for fj_sequencing
35 { "group_tol", &group_tol },
36 { "step_tol", &step_tol },
37 };
38#pragma endregion params and param map
39
40 // sequencer
41 FJ_Sequencer fj;
42 float pmod = neutral;
43
44 void setup() { fj.set_params(group_tol, step_tol, scaler); }
45
46 void advance_sequencing(const float& ms_now, const unsigned& notes)
47 {
48 fj(ms_now, notes);
49 }
50
51 auto operator()() -> float
52 {
53 // no flams
54 if (fj.mod_parts[0] == 1.F) {
55 return neutral;
56 }
57
58 // if (fj.the_fifth_flammament) {
59 // return min_mod;
60 //}
61
62 // water down single flams
63 pmod = 1.F;
64 for (auto& mp : fj.mod_parts) {
65 pmod += mp;
66 }
67 pmod /= 5.F;
68 pmod = std::clamp(base + pmod, min_mod, max_mod);
69
70 // reset flags n stuff
71 fj.handle_interval_end();
72
73 return pmod;
74 }
75};
Definition FlamSequencing.h:94
std::array< float, 4 > mod_parts
Definition FlamSequencing.h:113
Definition FlamJam.h:15