summaryrefslogtreecommitdiff
path: root/libs/dolphin/src/axart/axartlfo.c
blob: 58c9f45abdf106186b6551a59c9d691bca0d84d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <dolphin/axart.h>
#include <dolphin/os.h>
#include <dolphin/mix.h>

f32 AXARTSine[64] = {
   0.0f, 0.09802f, 0.19509f, 0.29028f, 0.38268f, 0.4714f, 0.55557f, 0.63439f,
   0.70711f, 0.77301f, 0.83147f, 0.88192f, 0.92388f, 0.95694f, 0.98079f, 0.99518f,
   1.0f, 0.99518f, 0.98079f, 0.95694f, 0.92388f, 0.88192f, 0.83147f, 0.77301f,
   0.70711f, 0.63439f, 0.55557f, 0.4714f, 0.38268f, 0.29028f, 0.19509f, 0.09802f,
   0.0f, -0.09802f, -0.19509f, -0.29028f, -0.38268f, -0.4714f, -0.55557f, -0.63439f,
   -0.70711f, -0.77301f, -0.83147f, -0.88192f, -0.92388f, -0.95694f, -0.98079f, -0.99518f,
   -1.0f, -0.99518f, -0.98079f, -0.95694f, -0.92388f, -0.88192f, -0.83147f, -0.77301f,
   -0.70711f, -0.63439f, -0.55557f, -0.4714f, -0.38268f, -0.29028f, -0.19509f, -0.09802f,
};

static f32 AXARTSquare[64] = {
   1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
   1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
   1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
   1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
   -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f,
   -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f,
   -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f,
   -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f,
};

static f32 AXARTSaw[64] = {
   -1.0f, -0.96875f, -0.9375f, -0.90625f, -0.875f, -0.84375f, -0.8125f, -0.78125f,
   -0.75f, -0.71875f, -0.6875f, -0.65625f, -0.625f, -0.59375f, -0.5625f, -0.53125f,
   -0.5f, -0.46875f, -0.4375f, -0.40625f, -0.375f, -0.34375f, -0.3125f, -0.28125f,
   -0.25f, -0.21875f, -0.1875f, -0.15625f, -0.125f, -0.09375f, -0.0625f, -0.03125f,
   0.0f, 0.03125f, 0.0625f, 0.09375f, 0.125f, 0.15625f, 0.1875f, 0.21875f,
   0.25f, 0.28125f, 0.3125f, 0.34375f, 0.375f, 0.40625f, 0.4375f, 0.46875f,
   0.5f, 0.53125f, 0.5625f, 0.59375f, 0.625f, 0.65625f, 0.6875f, 0.71875f,
   0.75f, 0.78125f, 0.8125f, 0.84375f, 0.875f, 0.90625f, 0.9375f, 0.96875f,
};

static f32 AXARTReverseSaw[64] = {
   1.0f, 0.96875f, 0.9375f, 0.90625f, 0.875f, 0.84375f, 0.8125f, 0.78125f,
   0.75f, 0.71875f, 0.6875f, 0.65625f, 0.625f, 0.59375f, 0.5625f, 0.53125f,
   0.5f, 0.46875f, 0.4375f, 0.40625f, 0.375f, 0.34375f, 0.3125f, 0.28125f,
   0.25f, 0.21875f, 0.1875f, 0.15625f, 0.125f, 0.09375f, 0.0625f, 0.03125f,
   0.0f, -0.03125f, -0.0625f, -0.09375f, -0.125f, -0.15625f, -0.1875f, -0.21875f,
   -0.25f, -0.28125f, -0.3125f, -0.34375f, -0.375f, -0.40625f, -0.4375f, -0.46875f,
   -0.5f, -0.53125f, -0.5625f, -0.59375f, -0.625f, -0.65625f, -0.6875f, -0.71875f,
   -0.75f, -0.78125f, -0.8125f, -0.84375f, -0.875f, -0.90625f, -0.9375f, -0.96875f,
};

static f32 AXARTTriangle[64] = {
   0.0f, 0.0625f, 0.125f, 0.1875f, 0.25f, 0.3125f, 0.375f, 0.4375f,
   0.5f, 0.5625f, 0.625f, 0.6875f, 0.75f, 0.8125f, 0.875f, 0.9375f,
   1.0f, 0.9375f, 0.875f, 0.8125f, 0.75f, 0.6875f, 0.625f, 0.5625f,
   0.5f, 0.4375f, 0.375f, 0.3125f, 0.25f, 0.1875f, 0.125f, 0.0625f,
   0.0f, -0.0625f, -0.125f, -0.1875f, -0.25f, -0.3125f, -0.375f, -0.4375f,
   -0.5f, -0.5625f, -0.625f, -0.6875f, -0.75f, -0.8125f, -0.875f, -0.9375f,
   -1.0f, -0.9375f, -0.875f, -0.8125f, -0.75f, -0.6875f, -0.625f, -0.5625f,
   -0.5f, -0.4375f, -0.375f, -0.3125f, -0.25f, -0.1875f, -0.125f, -0.0625f,
};

static f32 AXARTNoise[64] = {
   -0.759363f, -0.805919f, -0.62015f, -0.78302f, 0.263439f, 0.467792f, -0.102506f, 0.700646f,
   0.852924f, 0.586413f, 0.32763f, 0.313143f, 0.66009f, 0.778686f, -0.698379f, -0.635841f,
   -0.087795f, 0.577847f, 0.887183f, -0.325427f, -0.890347f, 0.111084f, -0.325035f, 0.43995f,
   -0.62506f, -0.515152f, -0.299054f, -0.353217f, 0.512053f, 0.03931f, 0.869222f, -0.626512f,
   0.017653f, 0.891789f, -0.191419f, 0.411077f, 0.965653f, 0.134522f, -0.761372f, 0.543137f,
   -0.887949f, 0.454729f, 0.860104f, -0.005229f, 0.28682f, -0.036344f, -0.976264f, -0.400756f,
   0.662483f, -0.44099f, -0.02479f, 0.066671f, -0.045242f, 0.150543f, 0.810762f, -0.35605f,
   0.364502f, 0.63764f, -0.212945f, 0.394563f, 0.496392f, 0.727584f, -0.564585f, 0.040292f,
};

void AXARTLfo(AXART_LFO* lfo) {
    lfo->counter += lfo->delta;

    if (lfo->counter >= 1.0f) {
        f32 lfoSamples = lfo->counter;

        lfo->counter -= lfoSamples;
        lfo->sampleIndex += (u32)lfoSamples;
        lfo->sampleIndex %= lfo->length;
        lfo->sample1 = lfo->sample;
        lfo->sample = lfo->lfo[lfo->sampleIndex];
    }

    lfo->output = lfo->sample1 - lfo->counter * (lfo->sample1 - lfo->sample);
}