VibroSonics  v1.0.2-mozzi-implementation-309-gf5440e1
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
70struct AmpEnv {
71 float attackAmplitude = 0.5;
73 float decayAmplitude = 0.5;
75 float sustainAmplitude = 0.5;
77 float releaseAmplitude = 0.0;
79 float curve = 1.0f;
80};
81
82class GrainList;
83
98class Grain {
99private:
100 struct Phase {
102 int duration = 0;
104 float frequency = 0.0f;
106 float amplitude = 0.0f;
108 float curve = 1.0f; // Default: linear
109 };
110
112 Phase attack;
114 Phase decay;
116 Phase sustain;
118 Phase release;
119
121 int windowCounter;
122
124 float grainAmplitude;
126 float grainFrequency;
127
129 WaveType waveType;
130
132 uint8_t grainChannel;
133
135 grainState state;
136
138 void run();
139public:
144
146 Grain();
147
150 Grain(uint8_t channel, WaveType waveType);
151
153 void setAttack(float frequency, float amplitude, int duration);
154
156 void setDecay(float frequency, float amplitude, int duration);
157
159 void setSustain(float frequency, float amplitude, int duration);
160
162 void setRelease(float frequency, float amplitude, int duration);
163
165 void setChannel(uint8_t channel);
166
168 void setWaveType(WaveType waveType);
169
172
175 void transitionTo(grainState newState);
176
178 float getAmplitude();
179
181 float getFrequency();
182
184 int getAttackDuration();
185
187 int getDecayDuration();
188
190 int getSustainDuration();
191
193 int getReleaseDuration();
194
196 void setFreqEnv(FreqEnv freqEnv);
197
199 void setAmpEnv(AmpEnv ampEnv);
200
203
206
208 void printGrain();
209
210 friend class GrainList;
211};
212
216struct GrainNode {
218 GrainNode(Grain *object) : reference(object), next(nullptr) {}
223};
224
229private:
231 GrainNode *head;
233 GrainNode *tail;
234public:
236 GrainList() : head(nullptr), tail(nullptr) {}
238 void pushGrain(Grain *grain);
240 void clearList();
244 void updateAndReap();
245};
246#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:98
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
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:285
bool markedForDeletion
Flag to check if a dynamic grain has finished triggering.
Definition Grain.h:143
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:305
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:141
int getAttackDuration()
Returns the attack duration.
Definition Grain.cpp:295
void printGrain()
For debugging: Prints a grain's state, frequency, and amplitude.
Definition Grain.cpp:366
void setFreqEnv(FreqEnv freqEnv)
Sets grain parameters for the frequency envelope.
Definition Grain.cpp:335
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:265
int getReleaseDuration()
Returns the release duration.
Definition Grain.cpp:325
void setAmpEnv(AmpEnv ampEnv)
Sets grain parameters for the amplitude envelope.
Definition Grain.cpp:348
int getSustainDuration()
Returns the sustain duration.
Definition Grain.cpp:315
float getAmplitude()
Returns the current amplitude of the grain.
Definition Grain.cpp:275
Definition Grain.h:228
void pushGrain(Grain *grain)
Pushes a grain to the tail of the list.
Definition Grain.cpp:376
void updateAndReap()
Updates grains and deletes finished dynamic grains.
Definition Grain.cpp:406
void clearList()
Deletes all grains in the list.
Definition Grain.cpp:390
GrainList()
Default constructor.
Definition Grain.h:236
GrainNode * getHead()
Returns the head of the list.
Definition Grain.cpp:443
Definition Grain.h:70
int sustainDuration
Definition Grain.h:76
float releaseAmplitude
Definition Grain.h:77
int attackDuration
Definition Grain.h:72
float curve
Definition Grain.h:79
int releaseDuration
Definition Grain.h:78
float sustainAmplitude
Definition Grain.h:75
float attackAmplitude
Definition Grain.h:71
int decayDuration
Definition Grain.h:74
float decayAmplitude
Definition Grain.h:73
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:216
GrainNode(Grain *object)
Default constructor.
Definition Grain.h:218
Grain * reference
Reference containing grain data.
Definition Grain.h:220
GrainNode * next
Pointer to the next grain in the list.
Definition Grain.h:222