Tabplate - e-paper guitar tab reader

Tabplate is an e-paper guitar tab reader built on the Inkplate platform.

I built this because sometimes I go camping or to a cottage with my guitar. Rather than pack a pile of books or decide in advance what I will feel like playing, I wanted a device that can store an unlimited amount of music. It has to be readable in the sun, easy on the eyes, and the battery needs to last "forever" (without me remembering to turn it off), so that pretty much means it needs to have an e-paper (aka e-ink) screen.

My first attempt was to adapt my Kobo e-reader. Unfortunately, this didn't work well. Everything I tried was a total disaster: PDFs, text files, rendering pictures into epubs -- all unplayable. And I'm not a professional musician so there's no way I'm shelling out thousands of dollars for a GVIDO.

Then I discovered the Inkplate, which is a recycled Kindle e-paper screen combined with an ESP32 processor. On a whim I bought one from Crowd Supply.

A lot of hacking later, and tabplate is born!

Download the code from my github

Browsing

To get tabs onto tabplate, just put regular ASCII-formatted tabs onto an SD card and insert it into the device. You can put different collections into different directories, and there is a browser that lets you navigate between directories.

An important requirement was to be able to quickly navigate the entire classtab archive (3000+ files). To make this work, large directories automatically become paginated:

Short-press the middle touchpad to enter a page:

Tab rendering

Tabplate renders files in regular ASCII guitar tab format. Mostly I tested with classical tabs, which have some special conventions.

The great thing about ASCII tabs is that they take so little space. You can store tons of them, even on the smallest SD card. The tabplate software will render them into "nice looking" graphics. For example, the following segment of ASCII tab:

   m  i  m  i  m  a  m  i  m  i  m  a    i  m  i  m  i  m
3  |        |        |        |          |        |        |        |
E|-------0--2--4--5-----------0--1--2--|-------------------0--4-p2--0--------|
B|-2--3--------------0--2--3-----------|-------0--2--3--4--------------3-p0--|
G|-------------------------------------|-1--2--------------------------------|
D|-------------------0=================|-------------------------------------|
A|-0=================------------------|-------------------------------------|
E|-------------------------------------|-0===================================|
   3  4     1  3  4     1  2     1  2    1  2     1  2  3      3  1    2
   p                                        < < < < < <       > > > > > > >

   i  m  i  m     i  m     i             a     m  i  a  i  m     i     i  p
5  |        |        |        |          |        |        |        |
E|----0--0--2-p0--0--5-p0--0--9-p0--0--|-12p10-------0-----2-p0--------------|
B|-2-----------------------------------|-------12-9-----4--------3-p0--------|
G|-------------------------------------|-------------------------------1-----|
D|-------------------------------------|----------------------------------2--|
A|-0===================================|-------------------------------------|
E|-------------------------------------|-0===================================|
   1        1        4        1          4  2  4  1     3  1     2     1  2
   mf   < < < < < < < < < < < < < < <          > > > > > > > > > > >

... is rendered like this on the tabplate (starting from the second measure):

The reason we started on the second measure is that we are on the second tabplate page (see 2/14 in top left), and tabs are a fixed width format (usually 80 columns) but tabplate reflows them depending on the actual size of the screen, and whether we're in portrait or landscape mode. It tries to fit as much as possible on a single screen, and only breaks lines in "nice" places (not always possible -- it's a best effort).

Speaking of annotations, I'm eventually going to make an option to hide them, since after you learn a song you don't need them anymore, and sometimes they get a bit out of hand, for example:

Foot pedal

The tab rendering screens let you go forward and backward by short-pressing the left and right touchpads. However, when you're playing you don't want to take your hands off the guitar to go press a button, so I wired up a foot-pedal:

When you press the foot pedal, it advances a single page in the tab. If you long-press the foot pedal (for more than 1/2 a second) then it goes back a page. This is useful for going back to the start of a repeated passage. If you're at the last page and you go forward, it "wraps" back to the start (da capo).

The footpedal I used is just the cheapest one I could find on amazon. I used a regular 1/8th inch audio jack, glued to the back of the inkplate. The foot pedal simply shorts the GPB5 pin to ground (and the code uses an internal pull-up resistor):

Download

The tabplate source code is available on my github

Dedication

This project was a labour of love. I dedicate it to my wonderful family: Nat, Jenny, Zoya ♡♡♡

Thank you to Jenny for the sketch on the splash screen.