114 if (std::isnan(sample.
left))
119 if (std::isnan(sample.
right))
124#ifdef USE_BRICK_WALL_CLIPPING
125 const float clippingVal = 3.0f;
126 if (sample.
left > clippingVal)
128 sample.
left = clippingVal;
130 if (sample.
right > clippingVal)
132 sample.
right = clippingVal;
152 Range<double> sprayRange(startPosition -
static_cast<double>(halfSpray),
153 startPosition +
static_cast<double>(halfSpray));
154 Range<double> constraintRange(0.f, 1.f);
155 Range<double> useableRange = constraintRange.constrainRange(sprayRange);
158 return (useableRange.getStart() +
m_rand.nextDouble() * useableRange.getLength()) *
165 const float minimumGrainLength{0.1f};
167 bool checkGrain =
false;
197 static_cast<int>(playHead) -
220 newGrain->
length = grainLength;
223 newGrain->flavour = flavour;
262 inline int clamp(
int val,
int min,
int max) {
return jmin<int>(jmax<int>(val, min), max); }
267 float rand =
m_rand.nextFloat() - 0.5f;
271 return 1.0f + rand * 6.0f;
273 return 1.0f + rand * 1.5f;
282 int segmentIndex = 0;
284 bool popcornMode =
false;
301 float playbackHzDetunedMod;
308 playbackHzDetunedMod =
325 Grain* newGrain =
nullptr;
334 bool inhibitGrainGeneration =
false;
338 auto nearestGrainIndex =
342 inhibitGrainGeneration =
true;
349 const auto nearestIndexes =
357 inhibitGrainGeneration =
true;
365 auto nearestIndexes =
370 if (!inhibitGrainGeneration)
400 bool grainRateChanged =
m_grainRate != newGrainRate;
402 if (newGrain || grainRateChanged)
445 Range<int> sprayRange(
static_cast<int>(startPositionInSamples - halfSpray),
446 static_cast<int>(startPositionInSamples + halfSpray));
447 Range<int> constraintRange(0,
m_length);
448 Range<int> useableRange = constraintRange.constrainRange(sprayRange);
449 newGrain->
playHead = (useableRange.getStart() +
m_rand.nextFloat() * useableRange.getLength());
458 gainNormalisationFactor =
479 newGrain->
gainRand = gain * gain * gainNormalisationFactor;
490 return sampleAccumulator;
506 while (grainIndex >= 0)
510 float randomisedPan = 0.5f * (1.f + jlimit<float>(-1.f, 1.f, pan + playingGrain->
panRand));
517 playingGrain->
envelope = sinf(jmap<float>(playingGrain->
grainWindow, 0.f, fadePoint, 0.f, 1.f) *
518 MathConstants<float>::halfPi);
520 else if (playingGrain->
grainWindow >= 1.f - fadePoint)
522 playingGrain->
envelope = sinf(jmap<float>(playingGrain->
grainWindow, 1.f - fadePoint, 1.f, 1.f, 0.f) *
523 MathConstants<float>::halfPi);
539 sampleAccumulator += newSample.
panSine(randomisedPan).
width(width * playingGrain->
widthRand) * masterGain *
552 float playheadIncrement = increment * playingGrain->
pitchRand;
553 playingGrain->
playHead += playheadIncrement;
556 playingGrain->
gainMod = gainMod;
Definition OscillatorUtils.h:39
float resampleRatio
Definition OscillatorUtils.h:67
int length
Definition OscillatorUtils.h:61
float principalZ
Definition OscillatorUtils.h:81
float gainRand
Definition OscillatorUtils.h:69
float principalX
Definition OscillatorUtils.h:79
float panRand
Definition OscillatorUtils.h:70
double playHead
Definition OscillatorUtils.h:65
float envelope
Definition OscillatorUtils.h:63
float windowDelta
Definition OscillatorUtils.h:74
float gainMod
Definition OscillatorUtils.h:76
float principalY
Definition OscillatorUtils.h:80
float widthRand
Definition OscillatorUtils.h:71
float pitchMod
Definition OscillatorUtils.h:77
float pitchRand
Definition OscillatorUtils.h:68
void setLifetime(int grainPlaybackLength)
Set the approriate variables to control the lifetime of the grain.
Definition OscillatorUtils.cpp:12
float grainSize
Definition OscillatorUtils.h:60
int voiceIndex
Definition OscillatorUtils.h:75
float principalQ
Definition OscillatorUtils.h:82
Flavour
Definition OscillatorUtils.h:49
@ foreground
Definition OscillatorUtils.h:52
@ background
Definition OscillatorUtils.h:53
int playHeadStart
Definition OscillatorUtils.h:58
float grainWindow
Definition OscillatorUtils.h:62
ProgressTracker & getProgressTracker()
Get a reference to this buffer's ProgressTracker.
Definition KrotosAudioBufferDSP.cpp:24
std::size_t getNearestNeighbour2D(float x, float y)
Definition KrotosAudioBufferDSP.h:456
bool analysisResultsAreValid()
Definition KrotosAudioBufferDSP.h:422
AudioDescriptor & audioIndexToDescriptor(int audioIndex)
Definition KrotosAudioBufferDSP.cpp:895
std::vector< AudioDescriptor > & getGrainDescriptionByTime()
Definition KrotosAudioBufferDSP.h:452
float getSampleRate(void)
Definition KrotosAudioBuffer.cpp:506
StereoSample getInterpolatedSample(double index)
Get a stereo sample from the audio buffer.
Definition KrotosAudioBuffer.cpp:318
float getNativeNoteFrequency(void)
Definition KrotosAudioBuffer.cpp:512
void setSampleRate(float val)
Definition OscillatorUtils.cpp:105
void triggerNewGrain()
Definition OscillatorUtils.cpp:92
void setFrequency(float val)
Definition OscillatorUtils.cpp:78
bool hasWrapped()
Definition OscillatorUtils.cpp:99
void nextPhase()
Definition OscillatorUtils.cpp:24
bool isLoading()
Definition KrotosAudioBufferDSP.h:98
Definition SampleEngine.h:84
void setGrainLimit(int newLimit)
Definition SampleEngine.cpp:64
float getAudioSegmentNormalisationFactor(int segmentIndex)
Definition SampleEngine.h:259
void freeGrain(Grain *grain)
Definition SampleEngine.cpp:66
Grain * allocateGrain()
Definition SampleEngine.cpp:31
int getAudioSegmentSampleRate(int segmentIndex)
Definition SampleEngine.h:246
void setMaxSlewRate(float val)
Definition OscillatorUtils.cpp:238
Definition KrotosAudioBuffer.h:16
float left
Definition KrotosAudioBuffer.h:107
float right
Definition KrotosAudioBuffer.h:107
StereoSample width(float width)
Definition KrotosAudioBuffer.h:98
StereoSample panSine(float pan)
Definition KrotosAudioBuffer.h:90
Definition AirAbsorptionFilter.cpp:2
static const int MIDI_NOTE_MASK
Definition OscillatorUtils.h:21
int clamp(int val, int min, int max)
Definition ReformerOscillator.cpp:262
static const int MIDI_NOTE_FLAG_DRONE
Definition OscillatorUtils.h:22
static const int SEMITONES_PER_OCTAVE
Definition OscillatorUtils.h:36
int debugCounter
Definition ReformerOscillator.cpp:276
A class to contains any attributes we want to store for the described audio.
Definition KrotosAudioBufferDSP.h:177
int grainIndexByTime
Definition KrotosAudioBufferDSP.h:182
int audioIndex
Definition KrotosAudioBufferDSP.h:180
float grainSize
Definition KrotosAudioBufferDSP.h:181