VibroSonics  v1.0.2-mozzi-implementation-329-gbe4e638
Arduino Library for Translating Audio into Vibrations
Loading...
Searching...
No Matches
Grain.h
Go to the documentation of this file.
1
6#ifndef Grain_h
7#define Grain_h
8
9#include <AudioLab.h>
10
23
38struct FreqEnv {
39 float attackFrequency = 100.0;
40 float decayFrequency = 100.0;
41 float sustainFrequency = 100.0;
42 float releaseFrequency = 100.0;
43};
44
60struct AmpEnv {
61 float attackAmplitude = 0.5;
63 float decayAmplitude = 0.5;
65 float sustainAmplitude = 0.5;
67 float releaseAmplitude = 0.0;
69 float curve = 1.0f;
70};
71
88struct DurEnv {
93 float curve = 1.0f;
94};
95
96class GrainList;
97
112class Grain {
113private:
114 struct Phase {
116 int duration = 0;
118 float frequency = 0.0f;
120 float amplitude = 0.0f;
122 float curve = 1.0f; // Default: linear
123 };
124
126 Phase attack;
128 Phase decay;
130 Phase sustain;
132 Phase release;
133
135 int windowCounter;
136
138 float grainAmplitude;
140 float grainFrequency;
141
143 WaveType waveType;
144
146 uint8_t grainChannel;
147
149 grainState state;
150
152 void run();
153public:
158
160 Grain();
161
164 Grain(uint8_t channel, WaveType waveType);
165
167 void setAttack(float frequency, float amplitude, int duration);
168
170 void setDecay(float frequency, float amplitude, int duration);
171
173 void setSustain(float frequency, float amplitude, int duration);
174
176 void setRelease(float frequency, float amplitude, int duration);
177
179 void setChannel(uint8_t channel);
180
182 void setWaveType(WaveType waveType);
183
186
189 void transitionTo(grainState newState);
190
192 float getAmplitude();
193
195 float getFrequency();
196
198 int getAttackDuration();
199
201 int getDecayDuration();
202
204 int getSustainDuration();
205
207 int getReleaseDuration();
208
210 void setFreqEnv(FreqEnv freqEnv);
211
213 void setAmpEnv(AmpEnv ampEnv);
214
216 void setDurEnv(DurEnv durEnv);
217
220
223
226
228 void printGrain();
229
230 friend class GrainList;
231};
232
236struct GrainNode {
238 GrainNode(Grain *object) : reference(object), next(nullptr) {}
243};
244
249private:
251 GrainNode *head;
253 GrainNode *tail;
254public:
256 GrainList() : head(nullptr), tail(nullptr) {}
258 void pushGrain(Grain *grain);
260 void clearList();
264 void updateAndReap();
265};
266#endif
grainState
Definition Grain.h:16
@ READY
Definition Grain.h:17
@ ATTACK
Definition Grain.h:18
@ DECAY
Definition Grain.h:19
@ RELEASE
Definition Grain.h:21
@ SUSTAIN
Definition Grain.h:20
Definition Grain.h:112
FreqEnv getFreqEnv()
Returns the frequncy envelope struct containing state data.
void setDecay(float frequency, float amplitude, int duration)
Updates grain parameters in the decay state.
Definition Grain.cpp:63
DurEnv getDurEnv()
Returns the duration envelope struct containing duration data.
void setWaveType(WaveType waveType)
Sets grain wave type (SINE, COSINE, SQUARE, TRIANGLE, SAWTOOTH)
Definition Grain.cpp:115
float getFrequency()
Returns the current frequency of the grain.
Definition Grain.cpp:286
bool markedForDeletion
Flag to check if a dynamic grain has finished triggering.
Definition Grain.h:157
void setAttack(float frequency, float amplitude, int duration)
Updates grain parameters in the attack state.
Definition Grain.cpp:49
void setRelease(float frequency, float amplitude, int duration)
Updates grain parameters in the release state.
Definition Grain.cpp:93
int getDecayDuration()
Returns the decay duration.
Definition Grain.cpp:306
void setSustain(float frequency, float amplitude, int duration)
Updates grain parameters in the sustain state.
Definition Grain.cpp:78
void transitionTo(grainState newState)
Helper function to perform necessary operations on grain parameters when transitioning between run st...
Definition Grain.cpp:195
bool isDynamic
Flag to check if a grain is dynamic or static.
Definition Grain.h:155
int getAttackDuration()
Returns the attack duration.
Definition Grain.cpp:296
void printGrain()
For debugging: Prints a grain's state, frequency, and amplitude.
Definition Grain.cpp:376
void setFreqEnv(FreqEnv freqEnv)
Sets grain parameters for the frequency envelope.
Definition Grain.cpp:336
Grain()
Default constructor to allocate a new grain.
Definition Grain.cpp:14
AmpEnv getAmpEnv()
Returns the amplitude envelope struct containing state data.
void setChannel(uint8_t channel)
Sets the channel of this grain.
Definition Grain.cpp:105
grainState getGrainState()
Returns the state of a grain (READY, ATTACK, DECAY, SUSTAIN, RELEASE)
Definition Grain.cpp:266
int getReleaseDuration()
Returns the release duration.
Definition Grain.cpp:326
void setDurEnv(DurEnv durEnv)
Sets grain window duration for the duration envelope.
Definition Grain.cpp:362
void setAmpEnv(AmpEnv ampEnv)
Sets grain parameters for the amplitude envelope.
Definition Grain.cpp:349
int getSustainDuration()
Returns the sustain duration.
Definition Grain.cpp:316
float getAmplitude()
Returns the current amplitude of the grain.
Definition Grain.cpp:276
Definition Grain.h:248
void pushGrain(Grain *grain)
Pushes a grain to the tail of the list.
Definition Grain.cpp:386
void updateAndReap()
Updates grains and deletes finished dynamic grains.
Definition Grain.cpp:416
void clearList()
Deletes all grains in the list.
Definition Grain.cpp:400
GrainList()
Default constructor.
Definition Grain.h:256
GrainNode * getHead()
Returns the head of the list.
Definition Grain.cpp:450
Definition Grain.h:60
int sustainDuration
Definition Grain.h:66
float releaseAmplitude
Definition Grain.h:67
int attackDuration
Definition Grain.h:62
float curve
Definition Grain.h:69
int releaseDuration
Definition Grain.h:68
float sustainAmplitude
Definition Grain.h:65
float attackAmplitude
Definition Grain.h:61
int decayDuration
Definition Grain.h:64
float decayAmplitude
Definition Grain.h:63
Definition Grain.h:88
int releaseDuration
Definition Grain.h:92
int sustainDuration
Definition Grain.h:91
int decayDuration
Definition Grain.h:90
float curve
Definition Grain.h:93
int attackDuration
Definition Grain.h:89
Definition Grain.h:38
float releaseFrequency
Definition Grain.h:42
float decayFrequency
Definition Grain.h:40
float sustainFrequency
Definition Grain.h:41
float attackFrequency
Definition Grain.h:39
Definition Grain.h:236
GrainNode(Grain *object)
Default constructor.
Definition Grain.h:238
Grain * reference
Reference containing grain data.
Definition Grain.h:240
GrainNode * next
Pointer to the next grain in the list.
Definition Grain.h:242