Pico MIDI Keypad Mini Tenori-On

I’d love to have a proper Tenori-on.  It is a pretty unique kind of electronic instrument with a 16×16 grid of buttons that allows you to draw patterns that are then played in sequence.  But as that is very unlikely to ever happen, I have to be content with making my own!

Here is a first step using the Pimoroni RGB keypad base for the Raspberry Pi Pico as a mini 4×4 “Tenori-On” style interface.

Warning! I strongly recommend using old or second hand equipment for your experiments.  I am not responsible for any damage to expensive instruments!

These are the key tutorials for the main concepts used in this project:

If you are new to microcontrollers, see the Getting Started pages.

Parts list

The Circuit

2021-03-02 22.12.16

I’ve used my Raspberry Pi Pico MIDI ‘pack’ Interface with a Pimoroni dual expander to allow me to hook up the keypad and MIDI to the Pico.

The Code

The code is a slightly tweaked version of the Pi Pico Keypad MIDI Step Sequencer.  It is designed to work with the Pimoroni version of Micropython that supports their keypad (full details in that previous post).

The main changes are as follows:

  • Instead of scanning through all 16 keys to create the sequence, scanning is done in columns.  This means there are only four steps, but each step can play up to four notes.
  • A true Tenori-on assigns a note to each row, but I’ve kept in the option of setting different notes across the columns should you wish.
  • The original keypad sequencer changed the note being played for each key if you kept pressing the key.  For the Tenori-on the note is either on (playing) or off.

There are many options for notes to be played.  I’ve configured it by default for four notes of the pentatonic scale with the highest note on the top row and the lowest on the bottom.

Another fun one was the assign the notes to each column but have each row play a different octave.

Have a play with the four midiNoteX [] lists at the top of the file and see what works.  These are presented in the order they are mapped to keys, so midiNotes1 is the top row, with keys assigned from left to right.

midiNotes1 = [
    69,69,69,69,
]
midiNotes2 = [
    67,67,67,67,
]
midiNotes3 = [
    64,64,64,64,
]
midiNotes4 = [
    60,60,60,60,
]

I’ve kept in the program change function from the original code, so it will keep setting the pre-configured voice for your synth module.  If you don’t want it to do that then remove the call to

 progChange(MIDI_VOICE)

Find it on GitHub here.

Pico Polytone Keypad Mini Tenori-On

I’ve also created a version for use with my Pico PIO “poly tone” audio.  It is basically making the same modifications but to the “polytone” step sequencer instead.  If you want to give that a try you’ll need the Pi Pico PIO Poly Tone MIDI ‘Pack’ module or the breadboard equivalent to output the PIO audio oscillators and some (preferably sacrificial) amplification.

Find that on GitHub too here.

Closing Thoughts

In the video you can see the Pico Keypad Mini Tenori-On playing my Zynthian synth.

I’d really like a larger array of buttons.  Adafruit make a great modular LED button controller, the “NeoTrellis“.  Four of these would give you an 8×8 array of buttons.  But to get to the 16×16 range of the original instrument will be expensive whichever way you look at it.

One “economy option” might be a graphics display on a touchscreen.  Another might be to divorce the buttons from the LEDS and use something like several of the analog keypads and hook them up to an LED matrix.

Of course if anyone would like to give me a real Tenori-On, I’d be very happy to post a review of it here. Until then, I’m pretty pleased with my mini version.

Kevin

Leave a comment