-
Notifications
You must be signed in to change notification settings - Fork 195
Expand file tree
/
Copy pathdiffuser.cpp
More file actions
64 lines (57 loc) · 1.54 KB
/
Copy pathdiffuser.cpp
File metadata and controls
64 lines (57 loc) · 1.54 KB
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
#include "dsp.h"
#include "diffuser.h"
#include <math.h>
using namespace daisysp;
void Diffuser::Init()
{
engine_.Init(buffer_);
engine_.SetLFOFrequency(LFO_1, 0.3f / 48000.0f);
lp_decay_ = 0.0f;
SetAmount(1.f);
SetTime(.5f);
}
float Diffuser::Process(float in)
{
typedef E::Reserve<
126,
E::Reserve<
180,
E::Reserve<
269,
E::Reserve<
444,
E::Reserve<1653, E::Reserve<2010, E::Reserve<3411>>>>>>>
Memory;
E::DelayLine<Memory, 0> ap1;
E::DelayLine<Memory, 1> ap2;
E::DelayLine<Memory, 2> ap3;
E::DelayLine<Memory, 3> ap4;
E::DelayLine<Memory, 4> dapa;
E::DelayLine<Memory, 5> dapb;
E::DelayLine<Memory, 6> del;
E::Context c;
const float kap = 0.625f;
const float klp = 0.75f;
float lp = lp_decay_;
float wet;
engine_.Start(&c);
c.Read(in);
c.Read(ap1 TAIL, kap);
c.WriteAllPass(ap1, -kap);
c.Read(ap2 TAIL, kap);
c.WriteAllPass(ap2, -kap);
c.Read(ap3 TAIL, kap);
c.WriteAllPass(ap3, -kap);
c.Interpolate(ap4, 400.0f, LFO_1, 43.0f, kap);
c.WriteAllPass(ap4, -kap);
c.Interpolate(del, 3070.0f, LFO_1, 340.0f, rt_);
c.Lp(lp, klp);
c.Read(dapa TAIL, -kap);
c.WriteAllPass(dapa, kap);
c.Read(dapb TAIL, kap);
c.WriteAllPass(dapb, -kap);
c.Write(del, 2.0f);
c.Write(wet, 0.0f);
lp_decay_ = lp;
return .1f * amount_ * (wet - in);
}