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.

1 Like

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

1 Like

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

4 Likes

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.

1 Like

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: