Deluge Firmware
Loading...
Searching...
No Matches
kit.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 KIT_H
19#define KIT_H
20
22#include "instrument.h"
24
25class InstrumentClip;
26class Drum;
27class Sound;
28class SoundDrum;
29class NoteRow;
30class GateDrum;
31class ModelStack;
33
34class Kit final : public Instrument, public GlobalEffectableForClip
35{
36public:
37 Kit();
38 Drum *getNextDrum(Drum *fromSoundSource);
39 Drum *getPrevDrum(Drum *fromSoundSource);
40 bool writeDataToFile(Clip* clipForSavingOutputOnly, Song* song);
41 void addDrum(Drum* newDrum);
42 int readFromFile(Song* song, Clip* clip, int32_t readAutomationUpToPos);
44 ~Kit();
45 int getDrumIndex(Drum *drum);
46 Drum* getDrumFromIndex(int index);
47 void modKnobAction(uint8_t whichKnob, int8_t offset);
48 int loadAllAudioFiles(bool mayActuallyReadFiles);
49 void cutAllSound();
50 void renderOutput(ModelStack* modelStack, StereoSample *startPos, StereoSample *endPos, int numSamples, int32_t* reverbBuffer, int32_t reverbAmountAdjust, int32_t sideChainHitPending, bool shouldLimitDelayFeedback, bool isClipActive);
52 void offerReceivedCCToLearnedParams(MIDIDevice* fromDevice, uint8_t channel, uint8_t ccNumber, uint8_t value, ModelStackWithTimelineCounter* modelStack);
53 bool offerReceivedPitchBendToLearnedParams(MIDIDevice* fromDevice, uint8_t channel, uint8_t data1, uint8_t data2, ModelStackWithTimelineCounter* modelStack);
54
55 void offerReceivedPitchBend(ModelStackWithTimelineCounter* modelStackWithTimelineCounter, MIDIDevice* fromDevice, uint8_t channel, uint8_t data1, uint8_t data2, bool* doingMidiThru);
56 void offerReceivedCC(ModelStackWithTimelineCounter* modelStackWithTimelineCounter, MIDIDevice* fromDevice, uint8_t channel, uint8_t ccNumber, uint8_t value, bool* doingMidiThru);
57 void offerReceivedAftertouch(ModelStackWithTimelineCounter* modelStackWithTimelineCounter, MIDIDevice* fromDevice, int channel, int value, int noteCode, bool* doingMidiThru);
58
59 void choke();
60 void resyncLFOs();
61 void removeDrum(Drum* drum);
63 SoundDrum* getDrumFromName(char const* name, bool onlyIfNoNoteRow = false);
64 int makeDrumNameUnique(String* name, int startAtNumber);
65 bool setActiveClip(ModelStackWithTimelineCounter* modelStack, int maySendMIDIPGMs);
66 char const* getFilePrefix() { return "KIT"; }
71 int32_t doTickForwardForArp(ModelStack* modelStack, int32_t currentPos);
73 GateDrum* getGateDrumForChannel(int gateChannel);
75 void setupWithoutActiveClip(ModelStack* modelStack);
76 void getThingWithMostReverb(Sound** soundWithMostReverb, ParamManager** paramManagerWithMostReverb, GlobalEffectableForClip** globalEffectableWithMostReverb, int32_t* highestReverbAmountFound);
77 uint8_t* getModKnobMode() { return &modKnobMode; }
78 Output* toOutput() { return this; }
79 void offerReceivedNote(ModelStackWithTimelineCounter* modelStackWithTimelineCounter, MIDIDevice* fromDevice, bool on, int channel, int note, int velocity, bool shouldRecordNotes, bool* doingMidiThru);
81 bool allowNoteTails(NoteRow* noteRow);
82 void stopAnyAuditioning(ModelStack* modelStack);
84 void beginAuditioningforDrum(ModelStackWithNoteRow* modelStack, Drum* drum, int velocity, int16_t const* mpeValues, int fromMIDIChannel = MIDI_CHANNEL_NONE);
85 void endAuditioningForDrum(ModelStackWithNoteRow* modelStack, Drum* drum, int velocity = DEFAULT_LIFT_VALUE);
86 void offerBendRangeUpdate(ModelStack* modelStack, MIDIDevice* device, int channelOrZone, int whichBendRange, int bendSemitones);
87
88 void renderGlobalEffectableForClip(ModelStackWithTimelineCounter* modelStack, StereoSample* globalEffectableBuffer, int32_t* bufferToTransferTo, int numSamples, int32_t* reverbBuffer, int32_t reverbAmountAdjust,
89 int32_t sideChainHitPending, bool shouldLimitDelayFeedback, bool isClipActive, int32_t pitchAdjust, int32_t amplitudeAtStart, int32_t amplitudeAtEnd);
90
91 char const* getXMLTag() { return "kit"; }
92
95
97
98protected:
99 bool isKit() { return true; }
100
101private:
102 int readDrumFromFile(Song* song, Clip* clip, int drumType, int32_t readAutomationUpToPos);
103 void writeDrumToFile(Drum* thisDrum, ParamManager* paramManagerForDrum, bool savingSong, int* selectedDrumIndex, int* drumIndex, Song* song);
104
105 void removeDrumFromLinkedList(Drum* drum);
106 void drumRemoved(Drum* drum);
107
108};
109
110#endif // KIT_H
Definition: Clip.h:41
Definition: drum.h:45
Definition: GateDrum.h:30
Definition: GlobalEffectableForClip.h:33
Definition: InstrumentClip.h:54
Definition: instrument.h:45
Definition: kit.h:35
uint8_t * getModKnobMode()
Definition: kit.h:77
void addDrum(Drum *newDrum)
Definition: kit.cpp:360
Kit()
Definition: kit.cpp:49
void endAuditioningForDrum(ModelStackWithNoteRow *modelStack, Drum *drum, int velocity=DEFAULT_LIFT_VALUE)
Definition: kit.cpp:1212
void prepareForHibernationOrDeletion()
Definition: kit.cpp:760
bool setActiveClip(ModelStackWithTimelineCounter *modelStack, int maySendMIDIPGMs)
Definition: kit.cpp:717
void stopAnyAuditioning(ModelStack *modelStack)
Definition: kit.cpp:1157
bool isKit()
Definition: kit.h:99
OrderedResizeableArrayWith32bitKey drumsWithRenderingActive
Definition: kit.h:96
int32_t doTickForwardForArp(ModelStack *modelStack, int32_t currentPos)
Definition: kit.cpp:801
bool isNoteRowStillAuditioningAsLinearRecordingEnded(NoteRow *noteRow)
Definition: kit.cpp:1153
void offerReceivedAftertouch(ModelStackWithTimelineCounter *modelStackWithTimelineCounter, MIDIDevice *fromDevice, int channel, int value, int noteCode, bool *doingMidiThru)
Definition: kit.cpp:1093
void choke()
Definition: kit.cpp:594
bool offerReceivedPitchBendToLearnedParams(MIDIDevice *fromDevice, uint8_t channel, uint8_t data1, uint8_t data2, ModelStackWithTimelineCounter *modelStack)
Definition: kit.cpp:570
void setupWithoutActiveClip(ModelStack *modelStack)
Definition: kit.cpp:634
SoundDrum * getDrumFromName(char const *name, bool onlyIfNoNoteRow=false)
Definition: kit.cpp:425
char const * getFilePrefix()
Definition: kit.h:66
void renderGlobalEffectableForClip(ModelStackWithTimelineCounter *modelStack, StereoSample *globalEffectableBuffer, int32_t *bufferToTransferTo, int numSamples, int32_t *reverbBuffer, int32_t reverbAmountAdjust, int32_t sideChainHitPending, bool shouldLimitDelayFeedback, bool isClipActive, int32_t pitchAdjust, int32_t amplitudeAtStart, int32_t amplitudeAtEnd)
Definition: kit.cpp:445
void compensateInstrumentVolumeForResonance(ParamManagerForTimeline *paramManager, Song *song)
Definition: kit.cpp:769
Drum * getNextDrum(Drum *fromSoundSource)
Definition: kit.cpp:73
void offerReceivedPitchBend(ModelStackWithTimelineCounter *modelStackWithTimelineCounter, MIDIDevice *fromDevice, uint8_t channel, uint8_t data1, uint8_t data2, bool *doingMidiThru)
Definition: kit.cpp:1044
int loadAllAudioFiles(bool mayActuallyReadFiles)
Definition: kit.cpp:309
int readFromFile(Song *song, Clip *clip, int32_t readAutomationUpToPos)
Definition: kit.cpp:227
void offerReceivedCCToLearnedParams(MIDIDevice *fromDevice, uint8_t channel, uint8_t ccNumber, uint8_t value, ModelStackWithTimelineCounter *modelStack)
Definition: kit.cpp:552
bool isAnyAuditioningHappening()
Definition: kit.cpp:1172
void resetDrumTempValues()
Definition: kit.cpp:861
Drum * getFirstUnassignedDrum(InstrumentClip *clip)
Definition: kit.cpp:397
void getThingWithMostReverb(Sound **soundWithMostReverb, ParamManager **paramManagerWithMostReverb, GlobalEffectableForClip **globalEffectableWithMostReverb, int32_t *highestReverbAmountFound)
Definition: kit.cpp:867
void removeDrum(Drum *drum)
Definition: kit.cpp:368
char const * getXMLTag()
Definition: kit.h:91
Drum * getDrumFromIndex(int index)
Definition: kit.cpp:415
void loadCrucialAudioFilesOnly()
Definition: kit.cpp:339
int makeDrumNameUnique(String *name, int startAtNumber)
Definition: kit.cpp:616
void cutAllSound()
Definition: kit.cpp:437
~Kit()
Definition: kit.cpp:57
void offerBendRangeUpdate(ModelStack *modelStack, MIDIDevice *device, int channelOrZone, int whichBendRange, int bendSemitones)
Definition: kit.cpp:1126
void modKnobAction(uint8_t whichKnob, int8_t offset)
void renderOutput(ModelStack *modelStack, StereoSample *startPos, StereoSample *endPos, int numSamples, int32_t *reverbBuffer, int32_t reverbAmountAdjust, int32_t sideChainHitPending, bool shouldLimitDelayFeedback, bool isClipActive)
Definition: kit.cpp:541
bool allowNoteTails(NoteRow *noteRow)
GateDrum * getGateDrumForChannel(int gateChannel)
Definition: kit.cpp:851
void deleteBackedUpParamManagers(Song *song)
Definition: kit.cpp:789
void setupPatching(ModelStackWithTimelineCounter *modelStack)
Definition: kit.cpp:663
ModControllable * toModControllable()
Definition: kit.cpp:609
int getDrumIndex(Drum *drum)
Definition: kit.cpp:406
void beginAuditioningforDrum(ModelStackWithNoteRow *modelStack, Drum *drum, int velocity, int16_t const *mpeValues, int fromMIDIChannel=MIDI_CHANNEL_NONE)
Definition: kit.cpp:1183
void resyncLFOs()
Definition: kit.cpp:601
bool writeDataToFile(Clip *clipForSavingOutputOnly, Song *song)
Definition: kit.cpp:87
void notifySamplesInterruptsSuspended()
void offerReceivedNote(ModelStackWithTimelineCounter *modelStackWithTimelineCounter, MIDIDevice *fromDevice, bool on, int channel, int note, int velocity, bool shouldRecordNotes, bool *doingMidiThru)
Definition: kit.cpp:881
void offerReceivedCC(ModelStackWithTimelineCounter *modelStackWithTimelineCounter, MIDIDevice *fromDevice, uint8_t channel, uint8_t ccNumber, uint8_t value, bool *doingMidiThru)
Definition: kit.cpp:1066
Drum * firstDrum
Definition: kit.h:93
Drum * selectedDrum
Definition: kit.h:94
Output * toOutput()
Definition: kit.h:78
Drum * getPrevDrum(Drum *fromSoundSource)
Definition: kit.cpp:78
Definition: MIDIDevice.h:74
Definition: ModControllable.h:39
Definition: ModelStack.h:123
Definition: ModelStack.h:199
Definition: ModelStack.h:130
Definition: NoteRow.h:72
Definition: OrderedResizeableArray.h:70
Definition: Output.h:42
uint8_t modKnobMode
Definition: Output.h:61
String name
Definition: Output.h:49
Definition: ParamManager.h:166
Definition: ParamManager.h:50
Definition: song.h:72
Definition: sounddrum.h:29
Definition: sound.h:66
Definition: AudioSample.h:25
Definition: DString.h:25
#define DEFAULT_LIFT_VALUE
Definition: definitions.h:693
#define MIDI_CHANNEL_NONE
Definition: definitions.h:927