Illumikey is an experimental display designed to be used with the Haken Continuum or keyboards.
A strip of independently changeable RGB LEDs is placed along the back/upper edge of the fingerboard/keybed to provide various forms of feedback to the player.
Media
Static scale displayed on the early prototype (144 LEDs/m 1/2m long)
Video of later prototype (144 LEDs/m 1m Long) with MIDI inputs from Yamaha S80 (+1 octave, ±2 semitone PB range) and Haken Continuum (±96 semitone PB range)
Modes
Scale Mode
Scale mode provides a simple cyclic pattern of 12 colors to back each octave.
This enables the player to represent scales to the player.
This mode is mostly inspired by the LinnStrument and Ableton Push.
Currently it just is a 2 color pattern, eventually I'll add a separate color for the tonic.
Harmonic Mode
Harmonic mode attempts to map the harmonic nature of notes based on what is already playing.
To do this MIDI is accepted from multiple sources and analyzed for note ons, note offs, pitch bend, sustain, sustenuto, reset all controllers, and all notes off.
These MIDI events are combined with per port preferences for transpose and pitch bend range to compute the pitch of all notes that should be playing.
Once these notes are mapped, a simple algorithm is applied to each note.
First, all notes are rounded to the 12-note scale and all are displayed as white.
Any notes that are ±2 or ±1 semitones are mapped as "inharmonic" and colored red.
Any notes that are ±11 and ±13 are mapped as "partially inharmonic" and marked as yellow (though commonly used in 7th chords.)
All other notes are considered "harmonic" and marked as green.
This simple display is very effective in displaying content from multiple surfaces/keybeds and potentially sequencers to warn of sour notes.
Eventually some degree of persistence might be useful, but it may prove hard to discriminate parts of a continuing musical phrase from a key change.
This could easily render the display at least temporarily useless.
Analysis Mode
Though analysis mode is not yet implemented, I am looking to take a FFT of audio and render a color based amplitude of the frequencies centered on each key.
I expect the spectrum will need to be normalized for relative energy to be very useful.
The hope would be for the primaries and the harmonics to be readily visible and the noise components though visible to be easily discernible.
Python module for "DotStars" from AdaFruit (with some experimental modifications here.)
A Python server (based on the SocketServer module) that accepts network connected MAX MSP Jitter buffers and renders a 1xN strip of them to the "DotStar" strip (string of APA102B LEDs).
Strip is using the transmit pins from the SPI port lines to communicate at 32MHz
Demo is actually 144/m as I'd not found the more useful 72/m pitch yet.
72/m LED pitch lines up "pretty well" with keyboards and very well with the Haken Continuum.
A length of 92 LEDs would cover the whole Continuum
A length of 88 LEDs would cover a conventional keyboard, but would need cutting and adjustment every octave or 2.
5V@10A Power Supply
Provides power to the strip and the Raspberry Pi via the port pin.
With 1000uF >5V capacitor in parallel to clean up any electrical spikes
An inline polyfuse going into the 5V RPi port line would likely be a very good idea
NOTE: APA102 LEDs can pull up to ~100mA per element if on at full brigtness, and ~1mA when off. RPi pulls less than 500mA. Be very careful to not draw too much current from whichever power supply you use.