Seeking MIDI Plugin for Multi-Key Chord Triggers

Hi everyone,

I’m looking for an alternative to Ripchord or built-in GP MIDI chord maker that takes the concept a step further. Instead of pressing just one key to trigger a chord, I’d like to press two or more keys (like a chord) and have that trigger a custom set of notes or tones of my choosing. Does anyone know of a plugin or a Gig Performer setup that can handle this kind of multi-key input mapping? Any recommendations or ideas would be greatly appreciated!

Thanks!

Maybe this can be helpful: Send a note when multiple notes are pressed - #2 by David-san

A key combination can unlock another Note event that you could route to a MIDI Chord Maker that would later trigger a chord.

A sequence of notes I suppose ? Then you could trigger a MIDI file player?

With this Scriptlet you could indeed trigger everything a CC# message can trigger.

Thanks for sharing this wonderful scriptlet—I’ll definitely use it for another case! For this situation, though, I want to press a chord and have additional tones (like fifths or octaves) play simultaneously. My issue is with chord inversions: some keys get ‘occupied,’ preventing further use in the song. This wouldn’t be a problem if I could define two or more ‘trigger’ keys.

I don’t understand why you couldn’t use the GP Chord Maker for this? Any single key can be converted to any other key combination with it… :thinking:

Yes, but it only works with one key at a time. For example, in this chord sequence: D#-F#-A# (D# as the trigger), then C#-F-G# (C# as the trigger). The problem arises with the next chord, C#-F#-A# (F# as the trigger)—it includes C#, which ‘steps’ on the trigger from the second chord.

Yes, I usually get around this by choosing a different note as the trigger—for example, using F for the second chord in this case. But that doesn’t always work. That’s why having two or more simultaneous trigger notes would solve the problem entirely

I don’t know what you mean…

chord_maker

Right there. Try playing chords in upper keyboard. I’m out until evening - I’ll record the situation and show it.

I think he wants to be able to use a chord as a trigger…so the combination C3+E3+G3 would map to some arbitrary chord and the combination. C3 + G3 would map to some other arbitrary chord.

This is a tricky one because you have to deal with thresholds

Here are another couple of similar options. I wanted something to trigger changes when a chord was played. So I made a general purpose scriptlet that you could just select the chord and inversion. This scriptlet will work anywhere the chord is played on the input. At the moment it will detect 3 and 4 note chords and outputs a single note, or the root. An output parameter also provides a connection to widgets.

/*
 * C H O R D    T A R G E T
 *
 * Outputs a Widget signal and/or a MIDI note when a chord target is detected.
 * The position of the notes on the keyboard does not affect the chord trigger. 
 * The chord inversions can be uniquely identified. The MIDI output can be sent 
 * as a trigger pulse with a note on followed by a delayed note off.
 *
 * root -       selects the root note for the target chord.
 * type -       selects the type of chord for the target.
 * inversion -  selects the inversion for the target chord. If the inversion is 
 *              not required this should be set to 'All'. A 3rd inversion of a 
 *              triad is the same as the root chord.
 * note -       Selects the MIDI note number to output when a chord triggers.
 *              MIDI note 0 will turn off the MIDI note output. Setting the
 *              MIDI note to 128 will output the chord root note (MIDI 60-71).
 * pulse -      MIDI delay for an automatic note off in units of 1mS. Setting
 *              this value to zero will turn off the MIDI pulse. This setting 
 *              does not affect the Widget signal.
 * output -     An output that indicates the trigger state.
 *
 * Detected Chords - maj, min, dim, sus2, sus4, aug, dom7, maj7, min7, dim7, aug7, maj6, min6,
 *                   dom7b5, min7b5, min7#7, maj7omit3, min7omit3, dom7omit5, maj7omit5, min7omit5
 */
 

This second option is a scriptlet that will detect 3&4 note chords and outputs a single note/channel combination. This can be used with channel constrainers and the MIDI Chord maker to augment simple chords.

/*
 * C H O R D    T R I G G E R
 *
 * Outputs unique triggers when chords are found.
 * There are some detection limits on suspended and augmented chords, 
 * where priority will select the root over the inversion.
 *
 * Trigger outputs MIDI root notes as defined below
 *
 * Channel 1 Note: dom7omit5 0-11,  min7omit5 12-23,  maj7omit5 24-35,  maj 36-47,  min 48-59,  dim 60-71,  aug 72-83,  sus2 84-95,  sus4 96-107
 *  1st Inversion Channel 2
 *  2nd Inversion Channel 3
 *
 *
 * Channel 4 Note:  7#5 12-23,  min7b5 24-35,  dom7 36-47,  min7 48-59,  maj7 60-71,  min(M7) 72-83,  7b5 84-95,   dim7 96-107
 *  1st Inversion Channel 5
 *  2nd Inversion Channel 6
 *  3rd Inversion Channel 7
 */

var triggerWidth : Subrange Parameter 0..10 = 0     // Set the trigger pulse width in 10mS increments


/* Notes:
 * As all the augmented triads have the same pattern, the inversions cannot easily be
 * determined except by the history of playing therefore these chords will always be root.
 * For the Sus2 and Sus4 triads the root will always be given in preference to the inversion.
 */

Attachments removed as these are going to be covered in detail in Gigs and Rackspaces

This is nice do we have it in the gig file section of the community forum? If not @npudar could perhaps add it?

Will do! :slight_smile:

EDIT:
Just checking this, these are gpscript files.
To be in the Gig and Rackspace files, it needs to be a complete example.

No, they are scriptlets and can just be dropped into the MIDI flow in the wiring view.

image

You can’t drag and drop this file.

A complete gig file will be better, anyway :slight_smile:

Sorry, it was a metaphorical dropped, and referred to the position in the MIDI flow not the instructions on how to load it.

The scriptlet is to be loaded into a scriptlet block, in this way the MIDI port is implied and no code changes are required when being used. Funky things can be done without any further coding.

I use scriptlets a lot when adding functionality. In this way they are immediately portable without any changes. I also manage all my scripts with version control. Making changes every time a script gets reused risks changes made to the scriptlet not propagating to all the script instances. This is the entire content of my scriptlet in my wiring view.

This is live: [Gig] Chord Target

Big thanks goes to @spav !

EDIT: one more!

Link: [Gig] Chord Trigger

by @Spav

Would a plugin such as midiChords by Insert Piz Here be of use? Each note of each triggered chord can be assigned to a different channel.

Hi Syme,

midiChords works in the same way as all the others - it has only one trigger key. But it has some other nice options. :smiling_face: