Krotos Modules 3
Loading...
Searching...
No Matches
GranularOscillator.h
Go to the documentation of this file.
1/*
2==============================================================================
3
4 GranularOscillator.h
5 Header for sample based oscillator / granular engine
6 Author: Sandy
7 Date: 19/08/2020
8
9==============================================================================
10*/
11
12#pragma once
13#include <mutex>
14
15namespace krotos
16{
21 {
22
23 public:
27
30 ~GranularOscillator() override {}
31
38 void setSampleRate(double sampleRate) override;
39
43 double getSampleRate() override;
44
48 void setFrequency(float frequency) override;
49
53 float getFrequency() override;
54
58 void setPhaseOffset(float /*offset*/) override {}
59 void reset() override {}
60 void setPhase(double /*phase*/) override {}
61 double getPhase() override { return 0.0; }
62
66 int getNumActiveGrains() override;
67
71 StereoSample getNextStereoSample(size_t sampleIndex) override;
72
76 // float getNextSample() override;
77
82 void setGranularParameter(size_t paramIndex, const float* newValue);
83
87 void setGranularParameters(std::vector<const float*>& newParams);
88
92 void setSampleData(SampleEngine* sampleEngine);
93
97 void startNote(int midiNote, float velocity, int voiceIndex);
98
101 const float getVelocity();
102
106 void stopNote();
107
110 void clearNote();
111
166
167 private:
168 // Methods
170
171 void flushGranular();
172 float cube(float val);
173 void setTaggingType(bool isOn);
174 void setTrackingEnable(bool isOn);
175
177 void setLoopEnableFlag();
178
179 void killNANs(StereoSample& sample);
180 Grain* launchGrain(float paramSize, float paramStart, float paramSpray, Grain::Flavour flavour,
181 float gain = -1.f);
182 double calculatePlayheadPosition(double startPosition, float halfSpray, float referenceGrainsize);
184
187
190
193 void generateGrainsGranular(StereoSample& sampleAccumulator);
194 void generateGrainsSampler(StereoSample& sampleAccumulator);
195
196 void setGrainData(Grain* playingGrain);
197
199
200 // Variables
201 juce::Random m_rand{1234};
204 float m_playbackHz{0.0f};
205 float m_playbackHzDetuned{0.0f}; // Desired frequency of note to be played back
206
207 double m_samplerate{48000.0};
208 float m_fluxFactor{0.0f};
209 float m_grainRate{0.0f};
210 float m_startIndex{0.0f};
214 std::vector<Grain*> m_activeGrains;
215 int m_length{0};
216 std::vector<const float*> m_parameters;
217 bool m_stopped{false};
218 bool m_keyDown{false};
219
221
222 volatile float m_directionGating{0.f};
225
227
228 bool m_taggingType{false};
229 bool m_trackingEnable{false};
230 bool m_loopingEnable{false};
232 size_t m_sampleIndex{0};
233 float m_velocity{1.0f};
235
236 // float value between 0.0-12.0f given by the ADSR applied on a Detune modSlider
237 float m_detuneModVal{0.0f};
238 const float AMPLITUDE_FIDDLE_FACTOR{0.6f};
239 const float FADE_POINT_MIN{0.000001f};
240 bool m_isDrone{false};
241 bool m_autoplayEnabled{false};
242 const float PARAMETER_TRUE_THRESHOLD{0.5f};
243
244 // Experimentally derived scaling values
245 const float FLUX_PARAM_SKEW{0.3f};
246 const float FLUX_SCALING_POSITIVE{6.0f};
247 const float FLUX_SCALING_NEGATIVE{1.5f};
248
249 // This is the length of the anti-click ramp applied to the start and end of the sample in loop mode
250 const float RAMP_LENGTH_SECONDS{0.004f};
251
252 // The number of samples in the anti-click ramp
254 // Added to the ramp value to create the ramp
255 float m_rampInc{1.f};
256 };
257} // namespace krotos
Definition OscillatorUtils.h:39
Flavour
Definition OscillatorUtils.h:49
Generates sounds by decimating and reconstructing audio samples.
Definition GranularOscillator.h:21
const float FADE_POINT_MIN
Definition GranularOscillator.h:239
float m_playbackHzDetuned
Definition GranularOscillator.h:205
volatile float m_directionGating
Definition GranularOscillator.h:222
float m_startIndexSearched
Definition GranularOscillator.h:211
bool m_loopingEnable
Definition GranularOscillator.h:230
void setTaggingType(bool isOn)
Definition GranularOscillator.cpp:116
StereoSample getNextStereoSampler()
Definition GranularOscillator.cpp:703
const float FLUX_SCALING_NEGATIVE
Definition GranularOscillator.h:247
const float AMPLITUDE_FIDDLE_FACTOR
Definition GranularOscillator.h:238
float m_grainRate
Definition GranularOscillator.h:209
float m_startIndex
Definition GranularOscillator.h:210
GranularPlaybackMode m_granularOscillatorType
Definition GranularOscillator.h:202
void startNote(int midiNote, float velocity, int voiceIndex)
Starts the oscillator playing, usually called by key down event.
Definition GranularOscillator.cpp:84
int m_voiceIndex
Definition GranularOscillator.h:220
std::vector< const float * > m_parameters
Definition GranularOscillator.h:216
float m_rampInc
Definition GranularOscillator.h:255
GranularParam
Definition GranularOscillator.h:115
@ DetuneMod
Definition GranularOscillator.h:128
@ Start
Definition GranularOscillator.h:117
@ Smoothing
Definition GranularOscillator.h:151
@ SizeDY
Definition GranularOscillator.h:158
@ Quench
Definition GranularOscillator.h:136
@ DetuneRand
Definition GranularOscillator.h:129
@ SizeST
Definition GranularOscillator.h:154
@ Detune
Definition GranularOscillator.h:127
@ Autoplay
Definition GranularOscillator.h:140
@ DivDY
Definition GranularOscillator.h:159
@ RateRand
Definition GranularOscillator.h:122
@ PhaseSync
Definition GranularOscillator.h:147
@ VehicleLevel
Definition GranularOscillator.h:133
@ Size
Definition GranularOscillator.h:119
@ SizeRand
Definition GranularOscillator.h:120
@ NUM_PARAMS
Definition GranularOscillator.h:164
@ GrainLim
Definition GranularOscillator.h:142
@ MovementSensitivity
Definition GranularOscillator.h:152
@ SprayDY
Definition GranularOscillator.h:160
@ Robin
Definition GranularOscillator.h:137
@ SALoop
Definition GranularOscillator.h:138
@ PanRand
Definition GranularOscillator.h:126
@ Solo
Definition GranularOscillator.h:163
@ SprayST
Definition GranularOscillator.h:156
@ DivST
Definition GranularOscillator.h:155
@ Mute
Definition GranularOscillator.h:162
@ MixDY
Definition GranularOscillator.h:161
@ LevelMod
Definition GranularOscillator.h:134
@ MuteUp
Definition GranularOscillator.h:149
@ PhaseLock
Definition GranularOscillator.h:146
@ Width
Definition GranularOscillator.h:123
@ MixST
Definition GranularOscillator.h:157
@ Shape
Definition GranularOscillator.h:141
@ Pan
Definition GranularOscillator.h:125
@ StartRand
Definition GranularOscillator.h:118
@ GranularLevel
Definition GranularOscillator.h:132
@ MuteDown
Definition GranularOscillator.h:150
@ Tracking
Definition GranularOscillator.h:144
@ Cycles
Definition GranularOscillator.h:145
@ Rate
Definition GranularOscillator.h:121
@ AutoRate
Definition GranularOscillator.h:139
@ WidthRand
Definition GranularOscillator.h:124
@ Normalise
Definition GranularOscillator.h:148
@ SamplerLevel
Definition GranularOscillator.h:131
@ Level
Definition GranularOscillator.h:130
@ LevelRand
Definition GranularOscillator.h:135
bool m_autoplayEnabled
Definition GranularOscillator.h:241
bool m_normalisationEnable
Definition GranularOscillator.h:231
void setGrainData(Grain *playingGrain)
Definition GranularOscillator.cpp:855
bool m_taggingType
Definition GranularOscillator.h:228
std::vector< Grain * > m_activeGrains
Definition GranularOscillator.h:214
void clearNote()
Signals the oscillator to stop immediately, and return any grains to pool.
Definition GranularOscillator.cpp:106
SlewLimiter m_channelCrossfade
Definition GranularOscillator.h:223
double m_samplerate
Definition GranularOscillator.h:207
float m_crossfadeValue
Definition GranularOscillator.h:226
const float RAMP_LENGTH_SECONDS
Definition GranularOscillator.h:250
const float FLUX_SCALING_POSITIVE
Definition GranularOscillator.h:246
bool m_isDrone
Definition GranularOscillator.h:240
size_t m_sampleIndex
Definition GranularOscillator.h:232
void setLoopEnableFlag()
Definition GranularOscillator.cpp:120
const float getVelocity()
Returns the value of the velocity as a float in [0...1].
Definition GranularOscillator.cpp:104
SampleEngine * m_sampleEngine
Definition GranularOscillator.h:213
void setTrackingEnable(bool isOn)
Definition GranularOscillator.cpp:118
float m_playbackHz
Definition GranularOscillator.h:204
bool m_trackingEnable
Definition GranularOscillator.h:229
StereoSample getNextStereoGranularSamplePhaseLocked()
Definition GranularOscillator.cpp:306
StereoSample getNextStereoGranular()
Definition GranularOscillator.cpp:503
double getPhase() override
Definition GranularOscillator.h:61
void setPhaseOffset(float) override
Definition GranularOscillator.h:58
bool m_stopped
Definition GranularOscillator.h:217
void generateGrainsGranular(StereoSample &sampleAccumulator)
Definition GranularOscillator.cpp:955
void setGranularOscillatorType(GranularPlaybackMode newType)
Definition GranularOscillator.cpp:18
int m_length
Definition GranularOscillator.h:215
void setFrequency(float frequency) override
Sets the target frequency which you want the oscillator to output.
Definition GranularOscillator.cpp:76
float m_detuneModVal
Definition GranularOscillator.h:237
float m_rampSamples
Definition GranularOscillator.h:253
void setPhase(double) override
Definition GranularOscillator.h:60
void setGranularParameter(size_t paramIndex, const float *newValue)
Updates the granular engine and returns the next audio value.
Definition GranularOscillator.cpp:24
void generateNewFluxFactor()
Definition GranularOscillator.cpp:159
float m_velocity
Definition GranularOscillator.h:233
void generateGrainsSampler(StereoSample &sampleAccumulator)
Definition GranularOscillator.cpp:871
GranularOscillator()
Definition GranularOscillator.cpp:16
bool m_allowAudiosegmentIncrement
Definition GranularOscillator.h:234
float cube(float val)
Definition GranularOscillator.cpp:82
bool m_keyDown
Definition GranularOscillator.h:218
const float FLUX_PARAM_SKEW
Definition GranularOscillator.h:245
void setSampleRate(double sampleRate) override
Sets the sample rate which the granular oscillator uses to calculate its output.
Definition GranularOscillator.cpp:36
Grain * launchGrain(float paramSize, float paramStart, float paramSpray, Grain::Flavour flavour, float gain=-1.f)
Definition GranularOscillator.cpp:196
AudioDescriptor m_closestDescriptor
Definition GranularOscillator.h:212
float m_fluxFactor
Definition GranularOscillator.h:208
void killNANs(StereoSample &sample)
Definition GranularOscillator.cpp:125
double calculatePlayheadPosition(double startPosition, float halfSpray, float referenceGrainsize)
Definition GranularOscillator.cpp:174
const float PARAMETER_TRUE_THRESHOLD
Definition GranularOscillator.h:242
double getSampleRate() override
Returns the sample rate which which you set with the setSampleRate method.
Definition GranularOscillator.cpp:1030
~GranularOscillator() override
Definition GranularOscillator.h:30
void flushGranular()
Definition GranularOscillator.cpp:52
SlewLimiter m_directionGatingSmoother
Definition GranularOscillator.h:224
PhaseGenerator m_grainTimer
Definition GranularOscillator.h:203
void setSampleData(SampleEngine *sampleEngine)
Sets the oscillator's internal reference to the SampleEngine structure it is to use.
Definition GranularOscillator.cpp:45
juce::Random m_rand
Definition GranularOscillator.h:201
void stopNote()
Signals the oscillator to begin key up behaviour, usually called by key up event The oscillator may c...
Definition GranularOscillator.cpp:102
void reset() override
Definition GranularOscillator.h:59
float getFrequency() override
Gets the target frequency which you set with the setFrequency method.
Definition GranularOscillator.cpp:1028
void setGranularParameters(std::vector< const float * > &newParams)
Sets multiple internal parameter to new values.
Definition GranularOscillator.cpp:30
int getNumActiveGrains() override
Returns the number of grains currently active for this instance of the oscillator.
Definition GranularOscillator.cpp:1032
StereoSample getNextStereoSample(size_t sampleIndex) override
Updates the granular engine and returns the next audio value.
Definition GranularOscillator.cpp:264
Definition Oscillator.h:7
Definition OscillatorUtils.h:89
Definition SampleEngine.h:84
Definition OscillatorUtils.h:198
Definition KrotosAudioBuffer.h:16
Definition AirAbsorptionFilter.cpp:2
GranularPlaybackMode
Definition SampleEngine.h:46
A class to contains any attributes we want to store for the described audio.
Definition KrotosAudioBufferDSP.h:177