34class Kit final :
public Instrument,
public GlobalEffectableForClip {
41 Drum* getNextDrum(
Drum* fromSoundSource);
42 Drum* getPrevDrum(
Drum* fromSoundSource);
43 bool writeDataToFile(
Serializer& writer,
Clip* clipForSavingOutputOnly,
Song* song)
override;
44 void addDrum(
Drum* newDrum);
45 Error readFromFile(
Deserializer& reader,
Song* song,
Clip* clip, int32_t readAutomationUpToPos)
override;
48 int32_t getDrumIndex(
Drum* drum);
49 Drum* getDrumFromIndex(int32_t index);
50 Drum* getDrumFromIndexAllowNull(int32_t index);
52 Error loadAllAudioFiles(
bool mayActuallyReadFiles)
override;
53 void cutAllSound()
override;
54 void renderOutput(
ModelStack* modelStack, std::span<StereoSample> buffer, int32_t* reverbBuffer,
55 int32_t reverbAmountAdjust, int32_t sideChainHitPending,
bool shouldLimitDelayFeedback,
56 bool isClipActive)
override;
59 uint8_t channel, uint8_t ccNumber, uint8_t value,
bool* doingMidiThru)
override;
61 MIDIMatchType match, uint8_t channel, uint8_t ccNumber, uint8_t value,
bool* doingMidiThru,
63 void offerReceivedCCToModControllable(
MIDICable& cable, uint8_t channel, uint8_t ccNumber, uint8_t value,
65 void offerReceivedCCToLearnedParams(
MIDICable& cable, uint8_t channel, uint8_t ccNumber, uint8_t value,
69 uint8_t channel, uint8_t data1, uint8_t data2,
bool* doingMidiThru)
override;
71 uint8_t data1, uint8_t data2, MIDIMatchType match, uint8_t channel,
74 MIDIMatchType match, uint8_t channel, uint8_t data1, uint8_t data2,
81 MIDIMatchType match, uint8_t channel, uint8_t value);
84 int32_t channel, int32_t value, int32_t noteCode,
bool* doingMidiThru)
override;
87 MIDIMatchType match, uint8_t channel, uint8_t value);
90 MIDIMatchType match, int32_t channel, int32_t value, int32_t noteCode,
94 int32_t channel, int32_t note, int32_t velocity,
bool shouldRecordNotes,
95 bool* doingMidiThru)
override;
97 int32_t note, int32_t velocity,
bool shouldRecordNotes,
bool* doingMidiThru,
100 int32_t note, int32_t velocity,
bool shouldRecordNotes,
bool* doingMidiThru,
103 void processParamFromInputMIDIChannel(int32_t cc, int32_t newValue,
107 void beenEdited(
bool shouldMoveToEmptySlot =
true)
override;
109 void resyncLFOs()
override;
110 void removeDrumFromKitArpeggiator(int32_t drumIndex);
111 void removeDrum(
Drum* drum);
113 SoundDrum* getDrumFromName(
char const* name,
bool onlyIfNoNoteRow =
false);
114 Error makeDrumNameUnique(
String* name, int32_t startAtNumber);
118 void deleteBackedUpParamManagers(
Song* song)
override;
119 void prepareForHibernationOrDeletion()
override;
120 int32_t doTickForwardForArp(
ModelStack* modelStack, int32_t currentPos)
override;
121 void loadCrucialAudioFilesOnly()
override;
122 GateDrum* getGateDrumForChannel(int32_t gateChannel);
123 void resetDrumTempValues();
124 void setupWithoutActiveClip(
ModelStack* modelStack)
override;
125 void getThingWithMostReverb(
Sound** soundWithMostReverb,
ParamManager** paramManagerWithMostReverb,
126 GlobalEffectableForClip** globalEffectableWithMostReverb,
127 int32_t* highestReverbAmountFound)
override;
128 uint8_t* getModKnobMode()
override {
return &modKnobMode; }
129 Output* toOutput()
override {
return this; }
131 bool isNoteRowStillAuditioningAsLinearRecordingEnded(
NoteRow* noteRow)
override;
132 bool allowNoteTails(
NoteRow* noteRow);
133 void stopAnyAuditioning(
ModelStack* modelStack)
override;
134 bool isAnyAuditioningHappening()
override;
136 int16_t
const* mpeValues, int32_t fromMIDIChannel = MIDI_CHANNEL_NONE);
138 void offerBendRangeUpdate(
ModelStack* modelStack,
MIDICable& cable, int32_t channelOrZone, int32_t whichBendRange,
139 int32_t bendSemitones)
override;
142 std::span<StereoSample> globalEffectableBuffer, int32_t* bufferToTransferTo,
143 int32_t* reverbBuffer, int32_t reverbAmountAdjust, int32_t sideChainHitPending,
144 bool shouldLimitDelayFeedback,
bool isClipActive, int32_t pitchAdjust,
145 int32_t amplitudeAtStart, int32_t amplitudeAtEnd)
override;
147 char const* getXMLTag()
override {
return "kit"; }
156 bool affectEntire,
bool useMenuStack)
override;
168 int16_t
const* mpeValues, int32_t fromMIDIChannel = MIDI_CHANNEL_NONE,
169 uint32_t sampleSyncLength = 0, int32_t ticksLate = 0, uint32_t samplesLate = 0);
173 bool isKit()
override {
return true; }
177 int32_t readAutomationUpToPos);
179 int32_t* selectedDrumIndex, int32_t* drumIndex,
Song* song);
180 void removeDrumFromLinkedList(
Drum* drum);
181 void drumRemoved(
Drum* drum);
182 void possiblySetSelectedDrumAndRefreshUI(
Drum* thisDrum);