Midigrid: use launchpads & midi grid controllers with Norns (Update 04-04-2021)

Midigrid

A grid emulator/shim for using midi grid controllers with Norns

Official Documentation

This thread is focused on support of my fork of Midigrid, the full history and origin of midigrids can be found at Norns alt. grids
Special thanks to @beepboop @tim52 @ground_state @thopa and any other early contributors I may have missed for getting this all started.

Supported devices

  • Launchpad Mini Mk1 & Mk2
  • Launchpad S **
  • Launchpad Mk2
  • Launchpad Mini Mk3
  • Launchpad Pro MK3
  • Launchpad X
  • Push 2
  • APC Mini
  • Livid Block

Device support added on request, PR’s welcome! We mostly just need people to report Midi Device names and test.

** older device, may not be well supported

Install

See the Official Documentation for full installation details.

;install https://github.com/jaggednz/midigrid

https://github.com/jaggednz/midigrid

31 Likes

Has anyone gotten the Launchpad X to work with Norns yet? The search function shows that @snkhydrox was working on it, but I can’t tell if the issues they were facing were ever resolved.

Thanks in advance!

ah! i’ve been meaning to submit the LPX modifications that’ve been working for me – great reminder!

2 Likes

Yay!! This is exactly what I needed :slight_smile: thanks @JaggedNZ !!

Question: I was just able to modify my Adafruit NeoTrellis (8x8) grid to send/receive MIDI messages as if it were any other MIDI grid. (We corresponded a bit on a different thread.) Do you have any tips as to where I should start when modifying my fork of your midigrid package?

Thanks!!

2 Likes

o0o00o0! I would love to take a gander and test!
I just built one over the weekend with bluetooth and wifi.

In fact i also have an old Livid Ohms on the trophy mantle I could try to port.

Launchpad Pro mk3 was working with the midi grid library as well!

1 Like

I’ve been eyeing this - anyone confirm how the faders show up to Norns? ie: Can I use the grid AND the faders, or will the faders be redundant?

The whole APC line would be cool (APC40/20 mk1, APC40 mk2 and APC mini), they are such versatile pieces of gear. I have an APC40 mk1 I could test if there was implementation into the midigrid library or I can help pull the relevant info from the device to have it added.

Just spitballin here… could this be the tool that answers the question, “Can I combine my two monome 64s into a 128 with norns?”

I can’t confirm but Norns should still see the CC messages. Someone let me know if this does not work!

It might just work, think I added code to support it … was awhile ago though

1 Like

Tell me the midi device names and a link to the programmers reference. Bonus points if you can tell me what/if there are implementation differences from the apc mini.

Launchpad X support added. Thanks @dan_derks !

2 Likes

I’ll start compiling info in this post with some of the more easily accessible info. I’ll get my device out in a bit to get the actual device name for the APC40 MK1.

  1. Akai APC40 MK1 Programmers Manual
    The APC20 functions the same as the APC40 mk1, it just doesn’t have all the knobs as the APC40.

  2. Akai APC40 MK2 Programmers Manual
    The Akai APC40 MK2 seems to share similar design and (maybe??) implementation to the APC Mini as they were released at the same time and are a part of the same “family” of devices.

Edit: @JaggedNZ - The APC40 mk1 shows up as Akai APC40 in norns.
midi 1 selected: Akai APC40

Hi, long time listener, first time caller :slight_smile:

I saw at the top of the thread, a call for other grids that may be adaptable to the midi grids environment, I just wondered if it may be possible to adapt a single layer of the tenori-on for use as a midigrid for norns? It seems to have a lot of the requirements, a16*16 grid, buttons that can be different brightness, a firmware that is in itself hackable…

It would be amazing if I could assign just one of the 16 layers in the tenori on to use to intersect with norns and have the rest still as native tenori on layers…

At the moment Im throwing ideas with the wonderful guy who has exposed and repurposed much of the tenori ons code, to see if a leyer can be formatted to send to midi whatever would be the most appropriate notes for interactions as a midi grid…can I ask what the best format would be?

Is it a case of. Picking a nominated channel to use exclusively for a midigrid, then sending one note per button starting a, say 1 and moving through note numbers button by button?

I’m just feeling out a start point to see if this can even happen.

Thanks and sorry if this is a noob question

Phill

1 Like

I’ll try to condense some technical considerations, this could easily turn into its own thread, or might be better discussed on the original Alt Grid thread.

Speed could easily be the biggest issue with the teroni-on.
You only have 128 notes per channel, if you want to use the whole 256 buttons you might need to split into 2 midi channels. That said 128 buttons is the sweet spot! Also, keep in mind both the monome grid and midigrid split the grid into 8*8 “quads” and this is an implementation detail you will have to deal with.

Note to Key assignment is arbitrary but starting with note 0 in the top right and incrementing left to right, then top to bottom makes sense. See the current device implementations for ideas.

Note velocity carries brightness information, not sure if the tenori-on has brightness, if it doesn’t you might be able to fake it if the on-board processor can “blink” the LEDs fast enough, even 4 levels of brightness would be better than none, but then there are plenty of original non-varibright monome 64 grids in use.

Hope this gives you some direction and I look forward to progress updates. :slight_smile:

Thanks you for the starting point, I will feed this back to Pika my Tenori guru,

So, am I understanding correctly that all current “midi grid” implementations are 2x 8 by 8 as standard?

Do you think it would be most time efficient to adapt the midigrids code and adapt from this, or start from the original 128 grid code?.. Sorry if that’s a naive question, I am just trying to anticipate some questions pika may ask me.

The tenori on can certainly, natively receive decoupled led commands at three values via sysex (off, half on, full on) but more may be possible… I am guessing if the launch pad midigrids implementation used velocity then some. Sort of translation to sysex will be needed too?

Sorry for all the questions and sorry if this is currently in the wrong place… I will endeavour to move this once I figure out how to do that.

Phill MyOneManBand

minor Updates

  • RGB Launchpad devices should now be able to swap Quads with the first 4 aux buttons, i.e. the very top row. (If you have a single RGB LP try mg_128 !)

  • Older Launchpad devices, changed Quad switch to first 4 Aux buttons, sorry if this messes with anyones muscle memory.

5 Likes

Quad swapping works like a charm :slightly_smiling_face: thank you!

1 Like

Well I have to say that MIDIGrid is incredible! After some setup I am now able to control both Ableton and Norns simultaneously via my Launchpad Pro MK3, using an iConnectMIDI4+ as the middle man (but any USB MIDI host should be able to do the same thing)

6 Likes

@sunsonrays mentioned the Livid OHM RGB in another thread and I thought I’d post some midi reference material here if anyone wants add it

buttons are note number

pots/faders are CC number

menu_buttons = {69, 70, 71, 77, 78, 79, 87}	

bottom_buttons = {65, 73, 66, 74, 67, 75, 68, 76} 

faders = {23, 22, 15, 14, 5, 7, 6, 4}	

pots_left = {17, 16, 9, 8, 
		19, 18, 11, 10, 
		21, 20, 13, 12, 
		3, 1, 0, 2}

crossfader = 24

crossfader_buttons (64, 72}

  grid_notes= {
    {0,8,16,24,32,40,48,56},
    {1,9,17,25,33,41,49,57},
    {2,10,18,26,34,42,50,58},
    {3,11,19,27,35,43,51,59},
    {4,12,20,28,36,44,52,60},
    {5,13,21,29,37,45,53,61},
    {6,14,22,30,38,46,54,62},
    {7,15,23,31,39,47,55,63}
  },

-- colors are mapped to these velocity ranges = {0, 1-3, 4-7, 8-15, 16-31, 32-63, 64-126, 127}

velocity_colors = {"off", "white","cyan","magenta","red","blue","yellow","green"}

velocity_map_simplified = {0, 2, 4, 8, 16, 32, 64, 127}

1 Like