Etterna 0.74.4
Loading...
Searching...
No Matches
Chaos.h
1#pragma once
2#include "../IntervalHandInfo.h"
3
7struct ChaosMod
8{
9 const CalcPatternMod _pmod = Chaos;
10 const std::string name = "ChaosMod";
11
12#pragma region params
13
14 float min_mod = 0.88F;
15 float max_mod = 1.07F;
16 float base = -0.088F;
17
18 const std::vector<std::pair<std::string, float*>> _params{
19 { "min_mod", &min_mod },
20 { "max_mod", &max_mod },
21 { "base", &base },
22 };
23#pragma endregion params and param map
24
25 // don't allow this to be a modifiable param
26 const int window = 6;
27
30
31 float pmod = neutral;
32
33#pragma region generic functions
34
35 void full_reset()
36 {
37 _u.zero();
38 _wot.zero();
39 pmod = neutral;
40 }
41
42#pragma endregion
43
44 void advance_sequencing(const CalcMovingWindow<float>& ms_any)
45 {
46 // most recent value
47 const float a = ms_any.get_now();
48
49 // previous value
50 const float b = ms_any.get_last();
51
52 if (any_ms_is_zero(a) || any_ms_is_zero(b) || any_ms_is_close(a, b)) {
53 _u(1.F);
54 _wot(_u.get_mean_of_window(window));
55 return;
56 }
57
58 const float prop = div_high_by_low(a, b);
59 const int mop = static_cast<int>(prop);
60 float flop = prop - static_cast<float>(mop);
61
62 if (flop == 0.F) {
63 flop = 1.F;
64 } else if (flop >= 0.5F) {
65 flop = abs(flop - 1.F) + 1.F;
66
67 } else if (flop < 0.5F) {
68 flop += 1.F;
69 }
70
71 _u(flop);
72 _wot(_u.get_mean_of_window(window));
73 }
74
75 auto operator()(const int& total_taps) -> float
76 {
77
78 if (total_taps == 0) {
79 return neutral;
80 }
81
82 pmod = base + _wot.get_mean_of_window(max_moving_window_size);
83 pmod = std::clamp(pmod, min_mod, max_mod);
84 return pmod;
85 }
86};
Definition CalcWindow.h:15
void zero()
set everything to zero
Definition CalcWindow.h:210
auto get_mean_of_window(const int &window) const -> float
get the mean for the moving window up to a given size
Definition CalcWindow.h:85
auto get_now() const -> T
get most recent value in moving window
Definition CalcWindow.h:38
auto get_last() const -> T
get oldest value in moving window
Definition CalcWindow.h:40
Definition Chaos.h:8