yusefnapora / lumachromatic

An exploration of color and harmony, to be used with the Lumatone isomorphic keyboard. Work in progress.
https://app.lumachromatic.art
6 stars 3 forks source link

Use the leftmost 7 columns as a chord triggerer/key changer #9

Open johndmulhausen opened 2 years ago

johndmulhausen commented 2 years ago

You know what would be cool is if you took like the leftmost 7 columns and mapped them to send messages to itself, thus letting the lumatone change keys from on the keyboard/without clicking the JS UI.

Sort of like the control area of an Omnichord https://www.youtube.com/watch?v=soMASzL16KI

Or, use it for straight chord triggering, like a KordBot: https://www.youtube.com/watch?v=uUH6Kh3qBP0

yusefnapora commented 2 years ago

I was thinking about how to implement this, and it seems like the straightforward way is to assign the "trigger keys" to send MIDI CC messages. Then you could have the app listen for those messages and send a preset when it gets a CC message (might have to "debounce" a bit to latch the CC values into a single on/off event).

Sadly sending presets via the app takes about ~2 seconds or so - you can see each key changing color one at a time. This is because you have to send 2 midi messages per key to set the MIDI function and RGB values, and they have to be processed serially. It's the same when you load a .ltn file through the Lumatone Editor, so I don't think I can get around it. So it will never be as snappy as pressing one of the built-in preset buttons.

Incidentally, it looks like there is a control message I can send to save the current layout to one of the preset buttons. So maybe a cool feature would be to define a "preset list" of mappings that you want to assign to the preset keys, and the app could program the buttons for you. Then switching during live performance would be super quick.

Chord triggering actually sounds pretty simple tho! You could just have the key send a note on a different MIDI channel, then have the app listen for note events there and translate them into note events for the chord you want to trigger and send them on the main channel.