Feature / Kit Arpeggiator#3388
Conversation
|
Ready for review!! |
# Conflicts: # docs/community_features.md
# Conflicts: # src/deluge/gui/views/automation_view.cpp
soymonitus
left a comment
There was a problem hiding this comment.
@stellar-aria @m-m-adams I added some extra comments on my own changes to help on the review process in case something is not 100% clear.
| } | ||
| }; | ||
|
|
||
| class ArpSoundOnlyUnpatchedParam final : public UnpatchedParam { |
There was a problem hiding this comment.
All the changes in the files within the menu_item/* folders are just for making the new kit arpeggiator menu items appear where they should, by mainly touching the isRelevant implementation of each
| #include "model/song/song.h" | ||
|
|
||
| namespace deluge::gui::menu_item::arpeggiator { | ||
| class IncludeInKitArp final : public Selection { |
There was a problem hiding this comment.
This new menu item for arpeggiator menu within kit rows is to let you decide if the note row participates in the Kit arpeggiator or is excluded and plays on its own
| soundEditor.currentSource->sampleControls.pitchAndSpeedAreIndependent = false; | ||
| } | ||
|
|
||
| if (current_value == SampleRepeatMode::ONCE) { |
There was a problem hiding this comment.
Similarly to what I had to implement for kit Sound rows that now can send also MIDI notes at the same time, if we change the sample repeat mode to ONCE, then this row will now have notes with no tails, which don't send note offs in the sequencer so we must send any possible noteoff in the kit arpeggiator that corresponds to this kit row to avoid stuck notes
|
|
||
| constexpr int32_t kNumNonGlobalParamsForAutomation = 81; | ||
| constexpr int32_t kNumGlobalParamsForAutomation = 26; | ||
| constexpr int32_t kNumGlobalParamsForAutomation = 37; |
There was a problem hiding this comment.
I moved all arpeggiator params from sound-only params to global params so now apart from Sounds, also the globaleffectables like Kit can have their own arp settings.
| {params::Kind::UNPATCHED_GLOBAL, params::UNPATCHED_ARP_BASS_PROBABILITY}, | ||
| {params::Kind::UNPATCHED_GLOBAL, params::UNPATCHED_REVERSE_PROBABILITY}, | ||
| {params::Kind::UNPATCHED_GLOBAL, params::UNPATCHED_ARP_RHYTHM}, | ||
| {params::Kind::UNPATCHED_GLOBAL, params::UNPATCHED_ARP_SEQUENCE_LENGTH}, |
There was a problem hiding this comment.
Kit Automation view now also exposes the arpeggiator params
| if (hasAnyVoices()) { | ||
| noteOff(nullptr); | ||
| } | ||
| arpeggiator.reset(); |
There was a problem hiding this comment.
All types of kit rows (gate, midi and sound) need now to carefully take care of reseting also their own arpeggiators when requested to stop all voices
| void noteOnPreKitArp(ModelStackWithThreeMainThings* modelStack, Drum* drum, uint8_t velocity, | ||
| int16_t const* mpeValues, int32_t fromMIDIChannel = MIDI_CHANNEL_NONE, | ||
| uint32_t sampleSyncLength = 0, int32_t ticksLate = 0, uint32_t samplesLate = 0); | ||
| void noteOffPreKitArp(ModelStackWithThreeMainThings* modelStack, Drum* drum, int32_t velocity = kDefaultLiftValue); |
There was a problem hiding this comment.
noteOnPreKitArp and noteOffPreKitArp are now the entry points of all note events sent to the Kit clip
| ArpeggiatorForKit::ArpeggiatorForKit() : Arpeggiator::Arpeggiator() { | ||
| } | ||
|
|
||
| void ArpeggiatorForKit::removeDrumIndex(ArpeggiatorSettings* arpSettings, int32_t drumIndex) { |
There was a problem hiding this comment.
the ArpeggiatorForKit is basically the same implementation as the synth arpeggiator but it just needed an extra method removeDrumIndex to reorder note objects when some row gets deleted
@stellar-aria I know this method uses the "notes" OrderedResizableArray, but as it was already there in the arpeggiator code, this could be refactored to be modernized after this PR is merged, to avoid making this one bigger and more difficult to review
| arpNote.noteCodeOnPostArp[n] = ARP_NOTE_NONE; | ||
| } | ||
| instruction->invertReversed = isPlayReverseForCurrentStep; | ||
| instruction->invertReversed = |
There was a problem hiding this comment.
Another feature of the Kit arpeggiator is its ability to reverse the samples (or re-reverse them if already reversed)
| [UNPATCHED_MOD_FX_FEEDBACK] = STRING_FOR_MODFX_FEEDBACK, | ||
| [UNPATCHED_SIDECHAIN_SHAPE] = STRING_FOR_SIDECHAIN_SHAPE, | ||
| [UNPATCHED_COMPRESSOR_THRESHOLD] = STRING_FOR_THRESHOLD, | ||
| [UNPATCHED_ARP_GATE] = STRING_FOR_ARP_GATE_MENU_TITLE, |
There was a problem hiding this comment.
All these changes in the param class is to move the arpeggiator params from UnpatchedSound to UnpatchedGlobal
# Conflicts: # src/deluge/model/global_effectable/global_effectable.h
m-m-adams
left a comment
There was a problem hiding this comment.
I admittedly didn't look super closely but gonna trust you and approve
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
* Feature / Kit Arpeggiator * Documentation * More docs * docs * docs * docs Chore/Clean up kit render output SynthstromAudible#3931 Cleaned up kit::renderOutput function by refactoring kit arp code to separate functions Missing note-off for kit-arpeggiator (SynthstromAudible#3866)
Add an arpeggiator menu to the Kit affect-entire menu. This allows the user to engage an arpeggiator layer on top of the kit rows, which will control which rows receive noteOns and noteOffs. That means that the kit rows can have their own arpeggiators also enabled, which allows for unlimited possible pattern combinations.
If kit rows have a sample with sampleMode = ONCE, they will be automatically ignored from kit arpeggiator. For them to be eligible to participate in kit arpeggiator, they new to allow to input note tails in the sequencer, that is, the row is a synth or is a sample with sampleMode = CUT or LOOP.
Every kit row now has an option "Include in kit arpeggiator" inside the Arpeggiator menu, to allow them to opt-out from kit arp.