Sunday, 29 March 2015

Guitar tutor project

It's been programming, programming, programming, code, code, code for a few weeks lately. And sometimes it's nice to create something that you can hold in your hand. So - as a break to get away from the computer screen for a little while - another "weekend project" (likely to take about five weeks in reality) was started.

This time, it's something that I personally hope to benefit from (rather than making cool stuff for other people, or to demonstrate something for someone else!).

Buoyed by our recent success with making a MIDI keyboard that doubles-up as a tutor, we're looking to make a guitar tutor that can double-up as a midi controller! This is likely to need a bit of explanation - so let's start here:

Papastache has some great lessons online (and has a great range of DVDs going much more in-depth) explaining how target chord tones, and to do more than just run up and down pentatonic scales. He makes passing reference to the idea of using major and minor sounds together, as advocated by tutors like Griff Hamlin - but it's not enough to just flip flop between them: you need to know when, and you need to be aware of the chords playing underneath your guitar leads and licks. Brett Papa also mentions playing different chord shapes, not just the regular "open chords" which sounds a lot like Steve Stine's CAGED theory approach.

(nope, we don't see it either. I wonder where the name PapaStache comes from?)

Whichever tutor teaches whichever approach, they all rely on a similar approach - being able to "see" chords all over the fretboard. And being able to see chord shapes in may different keys.

This sounds very similar to being able to - literally - see our chords and scales on our MIDI keyboard, but re-purposed for a guitar fretboard layout, rather than for a piano-style keyboard.

Above is an example of how to play a C-major chord in lots of different places all over the neck. What Papastache teaches are lead patterns than you can "hook onto" these different chord shapes (he works mostly with E-shape, A-shape and D-shape chords, but occasionally wanders into a C-shape chord too).

Now we could just wire up a bunch of (surface mounted) LEDs into a fretboard shaped layout and make them light up using the same technique as before, perhaps a couple of MAX7219 drivers and some clever PIC-based firmware. But we're looking to go one stage further this time!

Because there's so much overlap with chords, scales and so on (to simply light up the C-shape chord and the A-shape chord in the example above, for example, would just look like a bunch of random fret highlighted, rather that distinct chord patterns) we're going to use RGB LEDs.

The idea being that we can program in some way of deciding which LEDs to light up (depending on which chord/scale/position has been selected) and, using some WS2812B RGBs, get, say, the C-shape chord to light up in one colour (green perhaps) and the A-shape chord in, say, red, and so on. Now we can show all the different chord shapes across the whole neck at the same time, but, using different colours for each, and perhaps a pure white shade for the root note(s) keep their different patterns distinct from each other.

All this is probably very similar to what we've already done, with our MIDI keyboard. At least, converting musical notes and music theory into digital binary is anyway.

Now it's highly unlikely that we're going to be able to make anything like a playable guitar, with a light-up tutorial fingerboard. That would be a massive task, and require lots of intricate measuring and cutting. But that's no reason not to give it a go! Wouldn't it be great if, as well as showing you where to put your fingers, the thing could actually be used to play a tune (just like we turned our light-up keyboard tutor into a fully working MIDI instrument)?

Of course, there's no reason why we can't make a working, replacement fingerboard. People do it all the time. But it takes skill and patience, and super-fine tools and equipment, and a steady hand, and a passion for guitar-making, and.... well, a whole heap of other stuff that we just don't have! If just one fret is in the wrong place, or the nut is slightly out, or the bridge is in the wrong place, the entire instrument will always sound out-of-tune - and no amount of fiddling will fix it: a bad guitar will always just be a bad guitar!

But what about making a MIDI-based feedback system instead?
What about having a controller which accepts midi-like data, lights up some dots to show you which frets to play, and then responds to whichever frets you're holding the string(s) against? What about a Guitar Hero type learning system, but with real guitar feedback (instead of a silly five-button controller that just-so-happens to be shaped like a miniature guitar)?

That would be really cool.
And it wouldn't matter if the frets were a little bit off - so long as they're placed closely enough to where the should be that you don't have to re-learn the guitar all over again, it should be good enough.

So how to detect which fret the string is being held against?
This is a big topic - and one that will probably need another post, as this one is getting on a bit already....