Deluge Firmware
Loading...
Searching...
No Matches
sound.h
Go to the documentation of this file.
1/*
2 * Copyright © 2014-2023 Synthstrom Audible Limited
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#ifndef SOUND_H
19#define SOUND_H
20
21#include <patcher.h>
22#include "definitions.h"
23#include "compressor.h"
24#include "lfo.h"
25#include "source.h"
27#include "Arpeggiator.h"
28#include "Knob.h"
29#include "ParamSet.h"
30#include "ParamManager.h"
31
32struct CableGroup;
33class StereoSample;
34class Voice;
35class Kit;
37class TimelineCounter;
38class Clip;
44
45#define PARAM_LPF_OFF (-1)
46
47struct ParamLPF {
48 int p; // PARAM_LPF_OFF means none
49 int32_t currentValue;
50};
51
52#define NUM_MOD_SOURCE_SELECTION_BUTTONS 2
53
54
55/*
56 * Sound can be either an Instrument or a Drum, in the form of SoundInstrument or SoundDrum respectively.
57 * These classes are implemented using “multiple inheritance”, which is sacrilegious to many C++ programmers.
58 * I (Rohan) consider it to be a more or less appropriate solution in this case and a few others in the Deluge codebase where it’s used.
59 * It’s a little while though since I’ve sat and thought about what the alternatives could be and whether anything else would be appropriate.
60 *
61 * Anyway, Sound (which may be named a bit too broadly) basically means a synth or sample, or any combination of the two.
62 * And, to reiterate the above, it can exist as a “synth” as the melodic Output of one entire Clip(s),
63 * or as just a Drum - one of the many items in a Kit, normally associated with a row of notes.
64 */
65
67public:
68 Sound();
69
71
73
75
76 int32_t paramFinalValues[NUM_PARAMS - FIRST_GLOBAL_PARAM]; // This is for the *global* params only, and begins with FIRST_GLOBAL_PARAM, so subtract that from your p value before accessing this array!
78
79 uint32_t sourcesChanged; // Applies from first source up to FIRST_UNCHANGEABLE_SOURCE
80
85
87
89
90 uint8_t polyphonic;
91
92 int16_t transpose;
93
94
95 uint8_t numUnison;
96
98
101
103
105
106 uint8_t synthMode;
108
110
112
114
116
118
120
121 int32_t monophonicExpressionValues[NUM_EXPRESSION_DIMENSIONS]; // I really didn't want to store these here, since they're stored in the ParamManager, but.... complications!
122 // Always 0 for Drums - that was part of the problem - a Drum's main ParamManager's expression data has been sent to the
123 // "polyphonic" bit, and we don't want it to get referred to twice.
124 // These get manually refreshed in setActiveClip().
125
126 uint32_t oscRetriggerPhase[NUM_SOURCES]; // 4294967295 means "off"
128
130
131
136 uint32_t startSkippingRenderingAtTime; // Valid when not 0. Allows a wait-time before render skipping starts, for if mod fx are on
137
139 virtual void setSkippingRendering(bool newSkipping);
140
141 bool setModFXType(int newType) final;
142
143 void patchedParamPresetValueChanged(uint8_t p, ModelStackWithSoundFlags* modelStack, int32_t oldValue, int32_t newValue);
144 void render(ModelStackWithThreeMainThings* modelStack, StereoSample *outputBuffer, int numSamples, int32_t* reverbBuffer, int32_t sideChainHitPending, int32_t reverbAmountAdjust = 134217728, bool shouldLimitDelayFeedback = false, int32_t pitchAdjust = 16777216);
145 void unassignAllVoices();
146
147 void ensureInaccessibleParamPresetValuesWithoutKnobsAreZero(Song* song) final; // Song may be NULL
152
153 uint8_t maySourcePatchToParam(uint8_t s, uint8_t p, ParamManager* paramManager);
154
155 void setLFOGlobalSyncLevel(uint8_t newLevel);
156 void resyncGlobalLFO();
157 void setLFOGlobalWave(uint8_t newWave);
158
159
160
161 int8_t getKnobPos(uint8_t p, ParamManagerForTimeline* paramManager, uint32_t timePos, TimelineCounter* counter);
162 int32_t getKnobPosBig(int p, ParamManagerForTimeline* paramManager, uint32_t timePos, TimelineCounter* counter);
163 bool learnKnob(MIDIDevice* fromDevice, ParamDescriptor paramDescriptor, uint8_t whichKnob, uint8_t modKnobMode, uint8_t midiChannel, Song* song) final;
164
165 bool hasFilters();
166
167 void sampleZoneChanged(int markerType, int s, ModelStackWithSoundFlags* modelStack);
168 void setNumUnison(int newNum, ModelStackWithSoundFlags* modelStack);
169 void setUnisonDetune(int newAmount, ModelStackWithSoundFlags* modelStack);
170 void setModulatorTranspose(int m, int value, ModelStackWithSoundFlags* modelStack);
171 void setModulatorCents(int m, int value, ModelStackWithSoundFlags* modelStack);
172 int readFromFile(ModelStackWithModControllable* modelStack, int32_t readAutomationUpToPos, ArpeggiatorSettings* arpSettings);
173 void writeToFile(bool savingSong, ParamManager* paramManager, ArpeggiatorSettings* arpSettings);
174 bool allowNoteTails(ModelStackWithSoundFlags* modelStack, bool disregardSampleLoop = false);
175
176 void voiceUnassigned(ModelStackWithVoice* modelStack);
177 bool isSourceActiveCurrently(int s, ParamManagerForTimeline* paramManager);
179 bool isSourceActiveEver(int s, ParamManager* paramManager);
180 bool isNoiseActiveEver(ParamManagerForTimeline* paramManager);
181 void noteOn(ModelStackWithThreeMainThings* modelStack, ArpeggiatorBase* arpeggiator, int noteCode, int16_t const* mpeValues, uint32_t sampleSyncLength = 0, int32_t ticksLate = 0, uint32_t samplesLate = 0, int velocity = 64, int fromMIDIChannel = 16);
182 void allNotesOff(ModelStackWithThreeMainThings* modelStack, ArpeggiatorBase* arpeggiator);
183
184 void noteOffPostArpeggiator(ModelStackWithSoundFlags* modelStack, int noteCode = -32768);
185 void noteOnPostArpeggiator(ModelStackWithSoundFlags* modelStack, int newNoteCodeBeforeArpeggiation, int newNoteCodeAfterArpeggiation, int velocity, int16_t const* mpeValues, uint32_t sampleSyncLength, int32_t ticksLate, uint32_t samplesLate, int fromMIDIChannel = 16);
186
187 int16_t getMaxOscTranspose(InstrumentClip* clip);
188 int16_t getMinOscTranspose();
189 void setSynthMode(uint8_t value, Song* song);
190 inline uint8_t getSynthMode() {
191 return synthMode;
192 }
193 bool anyNoteIsOn();
194 virtual bool isDrum() { return false; }
195 void setupAsSample(ParamManagerForTimeline* paramManager);
197 int loadAllAudioFiles(bool mayActuallyReadFiles);
198 bool envelopeHasSustainCurrently(int e, ParamManagerForTimeline* paramManager);
199 bool envelopeHasSustainEver(int e, ParamManagerForTimeline* paramManager);
201 bool renderingOscillatorSyncEver(ParamManager* paramManager);
202 bool hasAnyVoices();
203 void setupAsBlankSynth(ParamManager* paramManager);
204 void setupAsDefaultSynth(ParamManager* paramManager);
205 void modButtonAction(uint8_t whichModButton, bool on, ParamManagerForTimeline* paramManager) final;
206 bool modEncoderButtonAction(uint8_t whichModEncoder, bool on, ModelStackWithThreeMainThings* modelStack) final;
207 static void writeParamsToFile(ParamManager* paramManager, bool writeAutomation);
208 static void readParamsFromFile(ParamManagerForTimeline* paramManager, int32_t readAutomationUpToPos);
209 static bool readParamTagFromFile(char const* tagName, ParamManagerForTimeline* paramManager, int32_t readAutomationUpToPos);
210 static void initParams(ParamManager* paramManager);
212 int32_t hasAnyTimeStretchSyncing(ParamManagerForTimeline* paramManager, bool getSampleLength = false, int note = 0);
213 int32_t hasCutOrLoopModeSamples(ParamManagerForTimeline* paramManager, int note, bool* anyLooping = NULL);
214 bool hasCutModeSamples(ParamManagerForTimeline* paramManager);
217 void recalculatePatchingToParam(uint8_t p, ParamManagerForTimeline* paramManager);
218 void doneReadingFromFile();
221 //void channelAftertouchReceivedFromInputMIDIChannel(int newValue);
222 ModelStackWithAutoParam* getParamFromModEncoder(int whichModEncoder, ModelStackWithThreeMainThings* modelStack, bool allowCreation = true) final;
223 void reassessRenderSkippingStatus(ModelStackWithSoundFlags* modelStack, bool shouldJustCutModFX = false);
224 void getThingWithMostReverb(Sound** soundWithMostReverb, ParamManager** paramManagerWithMostReverb, GlobalEffectableForClip** globalEffectableWithMostReverb, int32_t* highestReverbAmountFound, ParamManagerForTimeline* paramManager);
225 virtual bool readTagFromFile(char const* tagName) = 0;
227 void confirmNumVoices(char const* error);
228
229 inline int32_t getSmoothedPatchedParamValue(int p, ParamManager* paramManager) { // Yup, inlining this helped a tiny bit.
230 if (paramLPF.p == p) {
231 return paramLPF.currentValue;
232 }
233 else {
234 return paramManager->getPatchedParamSet()->getValue(p);
235 }
236 }
237
238 void notifyValueChangeViaLPF(int p, bool shouldDoParamLPF, ModelStackWithThreeMainThings const* modelStack, int32_t oldValue, int32_t newValue, bool fromAutomation);
239 void deleteMultiRange(int s, int r);
242 char const* paramToString(uint8_t param) final;
243 int stringToParam(char const* string) final;
245 virtual ArpeggiatorBase* getArp() = 0;
247
248 inline void saturate(int32_t* data, uint32_t* workingValue) {
249 // Clipping
250 if (clippingAmount) {
251 int shiftAmount = (clippingAmount >= 2) ? (clippingAmount - 2) : 0;
252 //*data = getTanHUnknown(*data, 5 + clippingAmount) << (shiftAmount);
253 *data = getTanHAntialiased(*data, workingValue, 5 + clippingAmount) << (shiftAmount);
254 }
255 }
256
258
259private:
260 uint32_t getGlobalLFOPhaseIncrement();
261 void recalculateModulatorTransposer(uint8_t m, ModelStackWithSoundFlags* modelStack);
262 void setupUnisonDetuners(ModelStackWithSoundFlags* modelStack);
263 void calculateEffectiveVolume();
264 void ensureKnobReferencesCorrectVolume(Knob* knob);
265 int readTagFromFile(char const* tagName, ParamManagerForTimeline* paramManager, int32_t readAutomationUpToPos, ArpeggiatorSettings* arpSettings, Song* song);
266
267
268 void writeSourceToFile(int s, char const* tagName);
269 int readSourceFromFile(int s, ParamManagerForTimeline* paramManager, int32_t readAutomationUpToPos);
270 void stopSkippingRendering(ArpeggiatorSettings* arpSettings);
271 void startSkippingRendering(ModelStackWithSoundFlags* modelStack);
272 void getArpBackInTimeAfterSkippingRendering(ArpeggiatorSettings* arpSettings);
273 void doParamLPF(int numSamples, ModelStackWithSoundFlags* modelStack);
274 void stopParamLPF(ModelStackWithSoundFlags* modelStack);
275 bool renderingVoicesInStereo(ModelStackWithSoundFlags* modelStack);
276 void setupDefaultExpressionPatching(ParamManager* paramManager);
277 void pushSwitchActionOnEncoderForParam(int p, bool on, ModelStackWithThreeMainThings* modelStack);
278 ModelStackWithAutoParam* getParamFromModEncoderDeeper(int whichModEncoder, ModelStackWithThreeMainThings* modelStack, bool allowCreation = true);
279
280};
281
282#endif // SOUND_H
Definition: Arpeggiator.h:73
Definition: Arpeggiator.h:28
Definition: Clip.h:41
Definition: GlobalEffectableForClip.h:33
Definition: InstrumentClip.h:54
Definition: kit.h:35
Definition: Knob.h:25
Definition: lfo.h:24
Definition: MIDIDevice.h:74
Definition: Knob.h:36
Definition: ModControllableAudio.h:46
uint8_t clippingAmount
Definition: ModControllableAudio.h:97
Definition: Knob.h:50
Definition: ModelStack.h:277
Definition: ModelStack.h:236
Definition: ModelStack.h:295
Definition: ModelStack.h:243
Definition: ModelStack.h:305
Definition: ParamDescriptor.h:23
Definition: ParamManager.h:166
Definition: ParamManager.h:50
Definition: patcher.h:48
Definition: phaseincrementfinetuner.h:25
Definition: song.h:72
Definition: sound.h:66
int32_t postReverbVolumeLastTime
Definition: sound.h:129
int16_t transpose
Definition: sound.h:92
bool isSourceActiveEverDisregardingMissingSample(int s, ParamManager *paramManager)
Definition: sound.cpp:1549
int16_t getMaxOscTranspose(InstrumentClip *clip)
Definition: sound.cpp:3317
void ensureInaccessibleParamPresetValuesWithoutKnobsAreZeroWithMinimalDetails(ParamManager *paramManager)
Definition: sound.cpp:2218
void reassessRenderSkippingStatus(ModelStackWithSoundFlags *modelStack, bool shouldJustCutModFX=false)
Definition: sound.cpp:1604
bool isSourceActiveCurrently(int s, ParamManagerForTimeline *paramManager)
Definition: sound.cpp:1544
void doneReadingFromFile()
Definition: sound.cpp:2285
void setNumUnison(int newNum, ModelStackWithSoundFlags *modelStack)
Definition: sound.cpp:2405
void recalculateAllVoicePhaseIncrements(ModelStackWithSoundFlags *modelStack)
Definition: sound.cpp:2392
virtual void setSkippingRendering(bool newSkipping)
Definition: sound.cpp:1960
void compensateVolumeForResonance(ModelStackWithThreeMainThings *modelStack)
Definition: sound.cpp:2564
bool isSourceActiveEver(int s, ParamManager *paramManager)
Definition: sound.cpp:1553
void noteOn(ModelStackWithThreeMainThings *modelStack, ArpeggiatorBase *arpeggiator, int noteCode, int16_t const *mpeValues, uint32_t sampleSyncLength=0, int32_t ticksLate=0, uint32_t samplesLate=0, int velocity=64, int fromMIDIChannel=16)
Definition: sound.cpp:1198
uint8_t lfoLocalWaveType
Definition: sound.h:83
bool allowNoteTails(ModelStackWithSoundFlags *modelStack, bool disregardSampleLoop=false)
Definition: sound.cpp:1406
void noteOnPostArpeggiator(ModelStackWithSoundFlags *modelStack, int newNoteCodeBeforeArpeggiation, int newNoteCodeAfterArpeggiation, int velocity, int16_t const *mpeValues, uint32_t sampleSyncLength, int32_t ticksLate, uint32_t samplesLate, int fromMIDIChannel=16)
Definition: sound.cpp:1230
uint8_t lfoGlobalSyncLevel
Definition: sound.h:84
void unassignAllVoices()
Definition: sound.cpp:2019
void setupAsDefaultSynth(ParamManager *paramManager)
Definition: sound.cpp:237
uint8_t voicePriority
Definition: sound.h:115
char const * paramToString(uint8_t param) final
Definition: sound.cpp:3688
void detachSourcesFromAudioFiles()
Definition: sound.cpp:3606
void deleteMultiRange(int s, int r)
Definition: sound.cpp:3614
bool hasAnyVoices()
Definition: sound.cpp:2299
void allNotesOff(ModelStackWithThreeMainThings *modelStack, ArpeggiatorBase *arpeggiator)
Definition: sound.cpp:1341
virtual ArpeggiatorSettings * getArpSettings(InstrumentClip *clip=NULL)=0
bool allowsVeryLateNoteStart(InstrumentClip *clip, ParamManagerForTimeline *paramManager)
Definition: sound.cpp:1505
ModKnob modKnobs[NUM_MOD_BUTTONS][NUM_PHYSICAL_MOD_KNOBS]
Definition: sound.h:86
int32_t hasCutOrLoopModeSamples(ParamManagerForTimeline *paramManager, int note, bool *anyLooping=NULL)
Definition: sound.cpp:1457
int32_t globalSourceValues[FIRST_LOCAL_SOURCE]
Definition: sound.h:77
int32_t paramFinalValues[NUM_PARAMS - FIRST_GLOBAL_PARAM]
Definition: sound.h:76
int8_t getKnobPos(uint8_t p, ParamManagerForTimeline *paramManager, uint32_t timePos, TimelineCounter *counter)
int32_t getKnobPosBig(int p, ParamManagerForTimeline *paramManager, uint32_t timePos, TimelineCounter *counter)
LFO globalLFO
Definition: sound.h:81
uint32_t startSkippingRenderingAtTime
Definition: sound.h:136
int stringToParam(char const *string) final
Definition: sound.cpp:3832
uint32_t timeStartedSkippingRenderingModFX
Definition: sound.h:133
void possiblySetupDefaultExpressionPatching(ParamManager *paramManager)
Definition: sound.cpp:275
uint8_t maySourcePatchToParam(uint8_t s, uint8_t p, ParamManager *paramManager)
Definition: sound.cpp:1089
void ensureParamPresetValueWithoutKnobIsZero(ModelStackWithAutoParam *modelStack)
Definition: sound.cpp:2242
Sound()
Definition: sound.cpp:74
static void readParamsFromFile(ParamManagerForTimeline *paramManager, int32_t readAutomationUpToPos)
Definition: sound.cpp:2496
static bool readParamTagFromFile(char const *tagName, ParamManagerForTimeline *paramManager, int32_t readAutomationUpToPos)
Definition: sound.cpp:2950
ModelStackWithAutoParam * getParamFromModEncoder(int whichModEncoder, ModelStackWithThreeMainThings *modelStack, bool allowCreation=true) final
Definition: sound.cpp:3403
void ensureParamPresetValueWithoutKnobIsZeroWithMinimalDetails(ParamManager *paramManager, int p)
Definition: sound.cpp:2262
uint8_t lfoGlobalWaveType
Definition: sound.h:82
uint32_t numSamplesSkippedRenderingForGlobalLFO
Definition: sound.h:132
virtual void setupPatchingForAllParamManagers(Song *song)
Definition: sound.h:219
int readFromFile(ModelStackWithModControllable *modelStack, int32_t readAutomationUpToPos, ArpeggiatorSettings *arpSettings)
Definition: sound.cpp:2509
uint32_t oscRetriggerPhase[NUM_SOURCES]
Definition: sound.h:126
int8_t unisonDetune
Definition: sound.h:97
static void initParams(ParamManager *paramManager)
Definition: sound.cpp:159
bool skippingRendering
Definition: sound.h:117
PhaseIncrementFineTuner modulatorTransposers[numModulators]
Definition: sound.h:102
bool setModFXType(int newType) final
Definition: sound.cpp:325
void setUnisonDetune(int newAmount, ModelStackWithSoundFlags *modelStack)
Definition: sound.cpp:2473
void wontBeRenderedForAWhile()
Definition: sound.cpp:3590
int numVoicesAssigned
Definition: sound.h:257
bool envelopeHasSustainEver(int e, ParamManagerForTimeline *paramManager)
Definition: sound.cpp:3385
void recalculatePatchingToParam(uint8_t p, ParamManagerForTimeline *paramManager)
Definition: sound.cpp:367
bool modEncoderButtonAction(uint8_t whichModEncoder, bool on, ModelStackWithThreeMainThings *modelStack) final
Definition: sound.cpp:3451
int lastNoteCode
Definition: sound.h:111
int loadAllAudioFiles(bool mayActuallyReadFiles)
Definition: sound.cpp:3363
void confirmNumVoices(char const *error)
Definition: sound.cpp:2041
bool oscillatorSync
Definition: sound.h:113
uint32_t modulatorRetriggerPhase[numModulators]
Definition: sound.h:127
void voiceUnassigned(ModelStackWithVoice *modelStack)
Definition: sound.cpp:2304
virtual ArpeggiatorBase * getArp()=0
uint32_t timeStartedSkippingRenderingLFO
Definition: sound.h:134
uint8_t polyphonic
Definition: sound.h:90
ModelStackWithAutoParam * getParamFromMIDIKnob(MIDIKnob *knob, ModelStackWithThreeMainThings *modelStack) final
Definition: sound.cpp:3847
void notifyValueChangeViaLPF(int p, bool shouldDoParamLPF, ModelStackWithThreeMainThings const *modelStack, int32_t oldValue, int32_t newValue, bool fromAutomation)
Definition: sound.cpp:1676
void modButtonAction(uint8_t whichModButton, bool on, ParamManagerForTimeline *paramManager) final
Definition: sound.cpp:3396
void render(ModelStackWithThreeMainThings *modelStack, StereoSample *outputBuffer, int numSamples, int32_t *reverbBuffer, int32_t sideChainHitPending, int32_t reverbAmountAdjust=134217728, bool shouldLimitDelayFeedback=false, int32_t pitchAdjust=16777216)
Definition: sound.cpp:1754
bool modulator1ToModulator0
Definition: sound.h:107
bool anyNoteIsOn()
Definition: sound.cpp:2478
void setSynthMode(uint8_t value, Song *song)
Definition: sound.cpp:2338
int8_t modulatorCents[numModulators]
Definition: sound.h:100
void patchedParamPresetValueChanged(uint8_t p, ModelStackWithSoundFlags *modelStack, int32_t oldValue, int32_t newValue)
Definition: sound.cpp:348
uint8_t getSynthMode()
Definition: sound.h:190
bool isNoiseActiveEver(ParamManagerForTimeline *paramManager)
Definition: sound.cpp:1559
int16_t getMinOscTranspose()
Definition: sound.cpp:3342
void setLFOGlobalWave(uint8_t newWave)
Definition: sound.cpp:2120
Patcher patcher
Definition: sound.h:70
void setLFOGlobalSyncLevel(uint8_t newLevel)
Definition: sound.cpp:2115
void setModulatorTranspose(int m, int value, ModelStackWithSoundFlags *modelStack)
Definition: sound.cpp:2374
bool renderingOscillatorSyncCurrently(ParamManagerForTimeline *paramManager)
Definition: sound.cpp:1566
bool learnKnob(MIDIDevice *fromDevice, ParamDescriptor paramDescriptor, uint8_t whichKnob, uint8_t modKnobMode, uint8_t midiChannel, Song *song) final
Definition: sound.cpp:2166
uint8_t synthMode
Definition: sound.h:106
bool envelopeHasSustainCurrently(int e, ParamManagerForTimeline *paramManager)
Definition: sound.cpp:3375
virtual bool isDrum()
Definition: sound.h:194
void setupAsSample(ParamManagerForTimeline *paramManager)
Definition: sound.cpp:205
bool hasFilters()
Definition: sound.cpp:2490
bool renderingOscillatorSyncEver(ParamManager *paramManager)
Definition: sound.cpp:1572
Source sources[NUM_SOURCES]
Definition: sound.h:74
void setupAsBlankSynth(ParamManager *paramManager)
Definition: sound.cpp:304
int32_t hasAnyTimeStretchSyncing(ParamManagerForTimeline *paramManager, bool getSampleLength=false, int note=0)
Definition: sound.cpp:1436
void writeToFile(bool savingSong, ParamManager *paramManager, ArpeggiatorSettings *arpSettings)
Definition: sound.cpp:3225
int32_t getSmoothedPatchedParamValue(int p, ParamManager *paramManager)
Definition: sound.h:229
virtual bool readTagFromFile(char const *tagName)=0
uint32_t sourcesChanged
Definition: sound.h:79
void prepareForHibernation()
Definition: sound.cpp:3584
int32_t monophonicExpressionValues[NUM_EXPRESSION_DIMENSIONS]
Definition: sound.h:121
uint8_t whichExpressionSourcesChangedAtSynthLevel
Definition: sound.h:119
ParamLPF paramLPF
Definition: sound.h:72
uint8_t numUnison
Definition: sound.h:95
void setModulatorCents(int m, int value, ModelStackWithSoundFlags *modelStack)
Definition: sound.cpp:2379
void noteOffPostArpeggiator(ModelStackWithSoundFlags *modelStack, int noteCode=-32768)
Definition: sound.cpp:1355
void fastReleaseAllVoices(ModelStackWithSoundFlags *modelStack)
Definition: sound.cpp:3566
static void writeParamsToFile(ParamManager *paramManager, bool writeAutomation)
Definition: sound.cpp:3147
void getThingWithMostReverb(Sound **soundWithMostReverb, ParamManager **paramManagerWithMostReverb, GlobalEffectableForClip **globalEffectableWithMostReverb, int32_t *highestReverbAmountFound, ParamManagerForTimeline *paramManager)
Definition: sound.cpp:1657
bool hasCutModeSamples(ParamManagerForTimeline *paramManager)
Definition: sound.cpp:1487
int16_t modulatorTranspose[numModulators]
Definition: sound.h:99
static int createParamManagerForLoading(ParamManagerForTimeline *paramManager)
Definition: sound.cpp:2552
void resyncGlobalLFO()
Definition: sound.cpp:2126
PhaseIncrementFineTuner unisonDetuners[maxNumUnison]
Definition: sound.h:104
void saturate(int32_t *data, uint32_t *workingValue)
Definition: sound.h:248
uint32_t timeStartedSkippingRenderingArp
Definition: sound.h:135
void ensureInaccessibleParamPresetValuesWithoutKnobsAreZero(Song *song) final
Definition: sound.cpp:2191
int32_t volumeNeutralValueForUnison
Definition: sound.h:109
int32_t sideChainSendLevel
Definition: sound.h:88
void sampleZoneChanged(int markerType, int s, ModelStackWithSoundFlags *modelStack)
Definition: sound.cpp:1581
Definition: source.h:31
Definition: AudioSample.h:25
Definition: TimelineCounter.h:29
Definition: voice.h:33
#define NUM_PARAMS
Definition: definitions.h:434
#define NUM_EXPRESSION_DIMENSIONS
Definition: definitions.h:919
#define numModulators
Definition: definitions.h:319
#define NUM_SOURCES
Definition: definitions.h:608
#define FIRST_GLOBAL_PARAM
Definition: definitions.h:430
#define NUM_PHYSICAL_MOD_KNOBS
Definition: definitions.h:553
#define NUM_MOD_BUTTONS
Definition: definitions.h:173
#define maxNumUnison
Definition: definitions.h:321
#define FIRST_LOCAL_SOURCE
Definition: definitions.h:360
int32_t getTanHAntialiased(int32_t input, uint32_t *lastWorkingValue, unsigned int saturationAmount)
Definition: functions.h:379
Definition: PatchCableSet.h:28
Definition: sound.h:47
int p
Definition: sound.h:48
int32_t currentValue
Definition: sound.h:49