Krotos Modules 3
Loading...
Searching...
No Matches
ReformerOscillator.h
Go to the documentation of this file.
1/*
2==============================================================================
3
4 ReformerOscillator.cpp
5 Sample based oscillator / reformer 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 ~ReformerOscillator() override {}
31
39 void setSampleRate(double sampleRate) override;
40
41 void setBlockSize(size_t blockSize) { m_blockSize = blockSize; }
42
47 double getSampleRate() override;
48
52 void setFrequency(float frequency) override;
53
58 float getFrequency() override;
59
63 void setPhaseOffset(float /*offset*/) override {}
64 void reset() override {}
65 void setPhase(double /*phase*/) override {}
66 double getPhase() override { return 0.0; }
67
72 int getNumActiveGrains() override;
73
77 StereoSample getNextStereoSample(size_t sampleIndex) override;
78
82 // float getNextSample() override;
83
88 void setGranularParameter(size_t paramIndex, const float* newValue);
89
94 void setGranularParameters(std::vector<const float*>& newParams);
95
100 void setSampleData(SampleEngine* sampleEngine);
101
105 void startNote(int midiNote, float velocity, int voiceIndex);
106
109 const float getVelocity();
110
115 void stopNote();
116
120 void clearNote();
121
162
163 int getVoiceIndex() const { return m_voiceIndex; };
164 bool isAutoplayEnabled() const { return m_autoplayEnabled; };
165 bool isDrone() const { return m_isDrone; };
166 bool isStopped() const { return m_stopped; };
167 bool isKeyDown() const { return m_keyDown; };
168
169 private:
170 // Methods
171
172 void flushGranular();
173 float cube(float val);
174 void setTaggingType(bool isOn);
175 void setTrackingEnable(bool isOn);
176 void setHardLoopEnable(bool isOn);
177
178 void killNANs(StereoSample& sample);
179 Grain* launchGrain(float paramSize, float paramStart, float paramSpray, Grain::Flavour flavour,
180 float gain = -1.f);
181 double calculatePlayheadPosition(double startPosition, float halfSpray, float referenceGrainsize);
182 float getRateRandFactor();
184
187 void generateGrains(StereoSample& sampleAccumulator);
188
189 // Variables
190 juce::Random m_rand{1234};
191
192 // Generates grain timing
194
195 // Used to restart loop mode when in popcorn mode
197
198 float m_playbackHz{0.0f};
199 float m_playbackHzDetuned{0.0f}; // Desired frequency of note to be played back
200
201 double m_samplerate{48000.0};
202
203 float m_grainRate{0.0f};
204 float m_StartIndex{0.0f};
207 std::vector<Grain*> m_activeGrains;
208 int m_length{0};
209 std::vector<const float*> m_parameters;
210 bool m_stopped{false};
211 bool m_keyDown{false};
212
213 Point<float> m_puckPosition{0.f, 0.f};
214 size_t m_blockSize{128};
215
217
219 bool m_taggingType{false};
220 bool m_trackingEnable{false};
221 bool m_loopingEnable{false};
223 size_t m_sampleIndex{0};
224 float m_velocity{1.0f};
225
226 // float value between 0.0-12.0f given by the ADSR applied on a Detune
227 float m_detuneModVal{0.0f};
228 const float AMPLITUDE_FIDDLE_FACTOR{0.6f};
229 const float FADE_POINT_MIN{0.000001f};
230 bool m_isDrone{false};
231 bool m_autoplayEnabled{false};
232
235
236 std::mt19937 m_g;
237 std::size_t m_k{1};
238 std::deque<size_t> m_grainHistory;
239
240 // proximity mode
241 bool m_proximityMode = false;
242 bool m_proximityTrigger = false;
243 };
244} // namespace krotos
Definition OscillatorUtils.h:39
Flavour
Definition OscillatorUtils.h:49
Definition Oscillator.h:7
Definition OscillatorUtils.h:89
Generates sounds by decimating and reconstructing audio samples.
Definition ReformerOscillator.h:21
bool m_loopingEnable
Definition ReformerOscillator.h:221
double m_samplerate
Definition ReformerOscillator.h:201
juce::Random m_rand
Definition ReformerOscillator.h:190
float getRateRandFactor()
Definition ReformerOscillator.cpp:264
size_t m_nearestPopGrainIndex
Definition ReformerOscillator.h:234
bool m_proximityMode
Definition ReformerOscillator.h:241
SlewLimiter m_channelCrossfade
Definition ReformerOscillator.h:218
const float FADE_POINT_MIN
Definition ReformerOscillator.h:229
bool isDrone() const
Definition ReformerOscillator.h:165
void stopNote()
Signals the oscillator to begin key up behaviour, usually called by key up event The oscillator may c...
Definition ReformerOscillator.cpp:92
bool m_trackingEnable
Definition ReformerOscillator.h:220
void setHardLoopEnable(bool isOn)
Definition ReformerOscillator.cpp:110
StereoSample getNextStereoSample(size_t sampleIndex) override
Updates the granular engine and returns the next audio value.
Definition ReformerOscillator.cpp:232
void startNote(int midiNote, float velocity, int voiceIndex)
Starts the oscillator playing, usually called by key down event.
Definition ReformerOscillator.cpp:76
bool isStopped() const
Definition ReformerOscillator.h:166
int m_length
Definition ReformerOscillator.h:208
float m_detuneModVal
Definition ReformerOscillator.h:227
void setTaggingType(bool isOn)
Definition ReformerOscillator.cpp:106
float m_velocity
Definition ReformerOscillator.h:224
void reset() override
Definition ReformerOscillator.h:64
std::vector< const float * > m_parameters
Definition ReformerOscillator.h:209
bool isAutoplayEnabled() const
Definition ReformerOscillator.h:164
float getFrequency() override
Gets the target frequency which you set with the setFrequency method.
Definition ReformerOscillator.cpp:562
void setSampleData(SampleEngine *sampleEngine)
Sets the oscillator's internal reference to the SampleEngine structure it is to use.
Definition ReformerOscillator.cpp:38
void setBlockSize(size_t blockSize)
Definition ReformerOscillator.h:41
void setGranularParameter(size_t paramIndex, const float *newValue)
Updates the granular engine and returns the next audio value.
Definition ReformerOscillator.cpp:16
int getNumActiveGrains() override
Returns the number of grains currently active for this instance of the oscillator.
Definition ReformerOscillator.cpp:566
PhaseGenerator m_popcornTimer
Definition ReformerOscillator.h:196
bool m_normalisationEnable
Definition ReformerOscillator.h:222
float cube(float val)
Definition ReformerOscillator.cpp:74
std::size_t m_k
Definition ReformerOscillator.h:237
float m_playbackHz
Definition ReformerOscillator.h:198
void setGranularParameters(std::vector< const float * > &newParams)
Sets multiple internal parameter to new values.
Definition ReformerOscillator.cpp:22
void setPhase(double) override
Definition ReformerOscillator.h:65
void flushGranular()
Definition ReformerOscillator.cpp:41
SampleEngine * m_sampleEngine
Definition ReformerOscillator.h:206
bool m_autoplayEnabled
Definition ReformerOscillator.h:231
Point< float > m_puckPosition
Definition ReformerOscillator.h:213
void setFrequency(float frequency) override
Sets the target frequency which you want the oscillator to output.
Definition ReformerOscillator.cpp:67
float m_grainRate
Definition ReformerOscillator.h:203
void setSampleRate(double sampleRate) override
Sets the sample rate which the granular oscillator uses to calculate its output.
Definition ReformerOscillator.cpp:28
void generateGrains(StereoSample &sampleAccumulator)
Definition ReformerOscillator.cpp:493
size_t m_sampleIndex
Definition ReformerOscillator.h:223
StereoSample getNextStereoGranularSample()
Definition ReformerOscillator.cpp:278
bool isKeyDown() const
Definition ReformerOscillator.h:167
size_t m_blockSize
Definition ReformerOscillator.h:214
double calculatePlayheadPosition(double startPosition, float halfSpray, float referenceGrainsize)
Definition ReformerOscillator.cpp:137
double getSampleRate() override
Returns the sample rate which which you set with the setSampleRate method.
Definition ReformerOscillator.cpp:564
void killNANs(StereoSample &sample)
Definition ReformerOscillator.cpp:112
std::deque< size_t > m_grainHistory
Definition ReformerOscillator.h:238
std::vector< Grain * > m_activeGrains
Definition ReformerOscillator.h:207
const float getVelocity()
Returns the value of the velocity as a float in [0...1].
Definition ReformerOscillator.cpp:94
double getPhase() override
Definition ReformerOscillator.h:66
bool m_taggingType
Definition ReformerOscillator.h:219
float m_StartIndex
Definition ReformerOscillator.h:204
void setPhaseOffset(float) override
Definition ReformerOscillator.h:63
bool m_proximityTrigger
Definition ReformerOscillator.h:242
size_t m_nearestGrainIndex
Definition ReformerOscillator.h:233
int getVoiceIndex() const
Definition ReformerOscillator.h:163
float m_playbackHzDetuned
Definition ReformerOscillator.h:199
int m_voiceIndex
Definition ReformerOscillator.h:216
bool m_keyDown
Definition ReformerOscillator.h:211
void setTrackingEnable(bool isOn)
Definition ReformerOscillator.cpp:108
bool m_isDrone
Definition ReformerOscillator.h:230
std::mt19937 m_g
Definition ReformerOscillator.h:236
AudioDescriptor m_closestDescriptor
Definition ReformerOscillator.h:205
Grain * launchGrain(float paramSize, float paramStart, float paramSpray, Grain::Flavour flavour, float gain=-1.f)
Definition ReformerOscillator.cpp:162
ReformerOscillator()
Definition ReformerOscillator.cpp:14
void clearNote()
Signals the oscillator to stop immediately, and return any grains to pool.
Definition ReformerOscillator.cpp:96
~ReformerOscillator() override
Definition ReformerOscillator.h:30
const float AMPLITUDE_FIDDLE_FACTOR
Definition ReformerOscillator.h:228
bool m_stopped
Definition ReformerOscillator.h:210
GranularParam
Definition ReformerOscillator.h:125
@ Shape
Definition ReformerOscillator.h:152
@ Proximity
Definition ReformerOscillator.h:158
@ Robin
Definition ReformerOscillator.h:149
@ WidthRand
Definition ReformerOscillator.h:137
@ Width
Definition ReformerOscillator.h:136
@ GranularLevel
Definition ReformerOscillator.h:144
@ Rate
Definition ReformerOscillator.h:134
@ LevelRand
Definition ReformerOscillator.h:146
@ Pan
Definition ReformerOscillator.h:138
@ PanRand
Definition ReformerOscillator.h:139
@ SALoop
Definition ReformerOscillator.h:150
@ DetuneMod
Definition ReformerOscillator.h:141
@ NUM_PARAMS
Definition ReformerOscillator.h:160
@ SizeRand
Definition ReformerOscillator.h:133
@ Level
Definition ReformerOscillator.h:143
@ Popcorn
Definition ReformerOscillator.h:147
@ RateRand
Definition ReformerOscillator.h:135
@ StartRand
Definition ReformerOscillator.h:131
@ LevelMod
Definition ReformerOscillator.h:145
@ GrainLim
Definition ReformerOscillator.h:153
@ Autoplay
Definition ReformerOscillator.h:151
@ PuckX
Definition ReformerOscillator.h:128
@ Start
Definition ReformerOscillator.h:127
@ Mute
Definition ReformerOscillator.h:156
@ Normalise
Definition ReformerOscillator.h:155
@ Tracking
Definition ReformerOscillator.h:154
@ Quench
Definition ReformerOscillator.h:148
@ Nearest
Definition ReformerOscillator.h:130
@ DetuneRand
Definition ReformerOscillator.h:142
@ Size
Definition ReformerOscillator.h:132
@ Solo
Definition ReformerOscillator.h:157
@ Detune
Definition ReformerOscillator.h:140
@ Radius
Definition ReformerOscillator.h:159
@ PuckY
Definition ReformerOscillator.h:129
PhaseGenerator m_voicePhase
Definition ReformerOscillator.h:193
Definition SampleEngine.h:84
Definition OscillatorUtils.h:198
Definition KrotosAudioBuffer.h:16
Definition AirAbsorptionFilter.cpp:2
A class to contains any attributes we want to store for the described audio.
Definition KrotosAudioBufferDSP.h:177