Chord Jammer
A midi web app that lets you play chords with 1 finger in the left hand and jam safely in the right hand. As you change chords, the rh notes are filtered so you always play good sounding notes.
Try it out at Chord Jammer
Code
~/Devel/midi-play/webmidijs-play
Sample config
export let project = {
chords: {
'C3': {
lhchord: Em7Chord,
rhnotes: EmScaleMelodic,
},
'D3': {
lhchord: AmAdd9Chord,
rhnotes: EmScaleNatural,
},
'E3': {
lhchord: CM9Chord,
rhnotes: EmScaleNatural,
},
'F3': {
lhchord: BmAdd11ChordInversion1,
rhnotes: EmScaleNatural,
rhnotes2: EmScaleHarmonic,
rhnotes3: EmBlues,
}
}
}
Single finger Chords
With the project config above
- Play C3 to trigger chord
Em7Chord
and jam in default scaleEmScaleMelodic
- Play D3 to trigger chord
AmAdd9Chord
and jam in default scaleEmScaleNatural
- Play E3 to trigger chord
CM9Chord
and jam in default scaleEmScaleNatural
- Play F3 to trigger chord
BmAdd11ChordInversion1
and jam in default scaleEmScaleNatural
Jamming notes are G3
to C5
and are filtered to be in the default scale for that chord.
Scale Switching whilst playing
You can switch to e.g. the pentatonic scale for the current chord by pressing D#4. Switch back to the default scale by pressing C#4.
Here is a list of modifier keys and what they do to the rh scale:
- C#4 default scale,
rhnotes
in config - D#4
rhnotes2
scale in config - F#4
rhnotes3
scale in config - G#4 transpose rh scale by
options.transposeUpAmount
semitones - A#4 transpose rh scale down by
options.transposeDownAmount
semitones
You can customise the transposition amounts for a given project via config e.g.
export let project = {
chords: {...},
options: {
transposeUpAmount: 4,
transposeDownAmount: -2,
}
}
Potentially other customisations via config will be supported in the future:
- Being able to specify which scales to switch to, instead of pentatonic and blues.
- Being able to change what the modifier keys actually are (unlikely).
Left hand black key modifiers
The octave containing the left hand chord trigger notes will have its black keys used as modifiers.
The C#
acts as a SHIFT, so
C#
hold down to engage SHIFT modeD#
cmdSetScaleFiltering(false)F#
cmdSetScaleFiltering(true)G#
transposeChord down a semitoneA#
transposeChord up a semitone- SHIFT
D#
stopAllNotes() - SHIFT
F#
scaleFilteringModificationSticky toggle - SHIFT
G#
reset chord transpose - todo - SHIFT
A#
reset chord transpose - todo
Config customisations supported
export let project = {
chords: {...},
options: {...},
splitNote: 'C3', // Where the root note is (see explanation below)
rhStartOctave: 3, // To which octave to start mapping notes to
}
Technologies
Description | Technology |
---|---|
MIDI | WebMidi.js |
GUI | webaudio-controls |
Scales and chords | tonaljs - A functional music theory library for Javascript. |
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.