Sunday, 3 January 2010

The poor mans Harmonic Keyboard

I have always been curious about the Axis Controllers and their unusual key layout, particularly as this 'harmonic table' layout is intended to make chord structures simpler and easier to understand. I wondered what it would be like to play one and thought, hey, maybe I could do it on my Novation Launchpad..!

The first problem is that the Axis has a staggered honeycomb of a hexagonal keys where the Launchpad is a square 8x8 grid. I thought the notes might translate better if the Launchpad was held at 45 degress, but eventually decided to keep it simple.

Here is the key layout I ended up with...

The code is based on some earlier Launchpad MIDI projects. It is Visual C++ / Windows API code which simply receives input from the pad, sends MIDI to light up the buttons and outputs a MIDI stream to Reason (which actually makes the sounds). I used the wonderful Midi Yoke utility from Midi-OX which lets you transmit MIDI from one Windows application and use that stream as input to another (without that I would need to implement a Windows Midi Input device)

I am gathering all my recent Launchpad experiments into a single app which I will post for download together with source code some time soon. Watch this space.

edit: get it here


  1. The main interest of the harmonic table layout is that it is isomorphic: every chord always has the same shape, no matter what not it starts on.

    Considering that, your layout isn't very useful. It would be better to assign minor thirds vertically and major thirds horizontally, for example.

  2. Well, it was just a bit of fun rather than a useful application :)

    However, I did just copy the Axis keyboard layout (albeit without their honeycomb staggered layout) so it is true that chord shapes do stay the same across my layout too. Unless I made some dumb mistake mapping the notes... which is very possible

  3. Because you "rectified" the honeycomb to a square grid, you have an "irregular vector" that goes up and down, alternatively. Your "straight up" (0,1) vector is a perfect fifth, but your "straight right" vector (1,0) is an upward major third half the time and a downward minor third the other half.

    For example, the C-major triad (CEG) in the bottom-left corner goes right+up then left, whereas in the middle, it goes right then left+up.

    Now if you want (0,1) to be your fifth, you could for example assign the major third to (1,0). Then you minor third becomes (-1,1) and your semitone becomes (2,-1) and so on. Or you could go:
    fifth=(0,1), major third (1,1), minor third=(-1,0), semitone=(2,1).
    It's all a question of choosing two vectors for you basis and sticking to it.

    My personal favorite is still major third=(0,1) and minor third=(1,0). Fifth and semitones are on the diagonals. That's probably the "45 degrees" layout you tried, now that I think of it.

  4. Darn. I meant:
    major third=(0,1)
    minor third=(-1,0)

    By turning the square grid 45 degrees clockwise, that gives you the original honeycomb. Otherwise, it's a mirror image.

  5. man, midijoke does not exist anymore, hope to be available again soon, i realy want to try it...

  6. I've been working on a codec for the Launchpad Pro and Reason. I'd come up with a few better arrangements. One of mine was very close to yours here. I'm actually thinking about porting mine into a firmware. Of the three grid note arrangements I'd made (based on hex layouts as you've done too,) this one is my favorite. I'm just pasting it in, but 0=C. (And I'm not including the octave grid.)


  7. Oh, and your Harmonic arrangement of notes translates out to this, Jason: