Skip to content

Feature / Kit Arpeggiator#3388

Merged
stellar-aria merged 12 commits into
SynthstromAudible:communityfrom
soymonitus:monitus/kit_arp
Mar 2, 2025
Merged

Feature / Kit Arpeggiator#3388
stellar-aria merged 12 commits into
SynthstromAudible:communityfrom
soymonitus:monitus/kit_arp

Conversation

@soymonitus

Copy link
Copy Markdown
Collaborator

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.

@github-actions

github-actions Bot commented Feb 16, 2025

Copy link
Copy Markdown
Contributor

Test Results

111 tests  ±0   111 ✅ ±0   0s ⏱️ ±0s
 17 suites ±0     0 💤 ±0 
 17 files   ±0     0 ❌ ±0 

Results for commit 27effb3. ± Comparison against base commit 3fc67b1.

♻️ This comment has been updated with latest results.

@soymonitus

Copy link
Copy Markdown
Collaborator Author

Ready for review!!

@soymonitus soymonitus left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@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 {

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 {

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) {

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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;

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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},

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kit Automation view now also exposes the arpeggiator params

if (hasAnyVoices()) {
noteOff(nullptr);
}
arpeggiator.reset();

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) {

@soymonitus soymonitus Feb 28, 2025

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 =

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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,

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 m-m-adams left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I admittedly didn't look super closely but gonna trust you and approve

@stellar-aria
stellar-aria added this pull request to the merge queue Mar 2, 2025
Merged via the queue into SynthstromAudible:community with commit b207ba8 Mar 2, 2025
@soymonitus
soymonitus deleted the monitus/kit_arp branch March 3, 2025 18:26
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 24, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 24, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 25, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 25, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 25, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 25, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 25, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 25, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 25, 2026
* Feature / Kit Arpeggiator

* Documentation

* More docs

* docs

* docs

* docs
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
seangoodvibes pushed a commit to seangoodvibes/DelugeFirmware that referenced this pull request Jan 26, 2026
* 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants