Sup! I made this GH/RB guitar full MIDI mod, link to the github page enclosed,
I made this guide as simple as I could, but I'm assuming you have a basic grasp of, well, arduino stuff really. And soldering, and how to find the ground and power on a chip.
I'll add more info to this post as I go, so consider this thread a WIP. (Program's stable and working though, the download's on my github page)
The aim of my project was to make a standalone MIDI controller with the musical capabilities of a full instrument, but still play like the video game.
Basically THIS, but with sound.
It's an arduino mod that intercepts the button presses directly, without dealing with the controller's chip and its platform-specific protocols.
As a result, this setup is universal for all the GH and RB guitar models. Secondary frets from the RB guitar is on my todo list.
Also, if you already have the controller, the basic setup just requires an arduino, and nothing else! (Obviously, you can add a midi port, but this can work though usb too)
In theory, all modded instruments should be able to stay backwards compatible with the game.
You'll be happy to know that the default octave range I've preset keeps within the DMG's limits!
Scaling up on the frets is represented here. Check the tabs below to see the setup more clearly with octaves and notes written in.
This table is just here to look pretty :)
# | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | #
# | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | #
# | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | #
# | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | #
# | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | # | #
You should be able to see a pattern in this. It's designed so you shouldn't need to do too much work around the base octave.
I recommend hanging around the 3 finger combinations. easy drops to bass, and wiggling your middle finger gives a nice hammer-on combo.
The progression of notes is pretty logical. I have an in-depth guide below. It's lengthy, but it's the most comprehensive description I can give on the system. The theory actually gives you shortcuts to some cool scale-jumping if you check out the bookcase system!
› Basic operation
‹ Basic operation
Strumming + FRETS plays a note. Sustains until you change frets, like in the game.
press SELECT (or your equivalent) to increase your base octave
press START (or your equivalent) to decrease your base octave
hold and release START+SELECT to toggle between note and chord mode.
In chord mode {
strumming up will play a minor chord
strumming down will play a major chord
}
Do hammer-ons while holding down the strum bar.
Velocity of the notes reduce slightly each time, for added realism.
While hammering on, your base C will play softly whenever you lift all your fingers off. (half velocity of current note) This simulates what would happen if you released your finger from a string during a sustained note, or halfway between scaling. Adds a bit of depth too.
Whammy bar whammies, naturally.
› A fret table you can read without getting a headache
‹ A fret table you can read without getting a headache
|--OCTAVES--|
|1ST|2ND|3RD|
|XXX|XXX|XGX|
|XXX|XRX|XXX|
|XXX|XXX|XXX| C
|XXX|XBX|XXX|
|XXX|XXX|XOX|
|XGX|XXX|XGX|
|XXX|XRX|XRX|
|XXX|XYX|XXX| C#
|XXX|XBX|XXX|
|XXX|XXX|XOX|
|XXX|XXX|XGX|
|XRX|XXX|XXX|
|XXX|XYX|XYX| D
|XXX|XXX|XXX|
|XXX|XOX|XOX|
|XXX|XXX|XGX|
|XXX|XXX|XXX|
|XYX|XYX|XXX| D#
|XXX|XBX|XBX|
|XXX|XOX|XOX|
|XXX|XGX|XGX|
|XXX|XXX|XRX|
|XXX|XXX|XYX| E
|XBX|XBX|XXX|
|XXX|XXX|XOX|
|XXX|XGX|XGX|
|XXX|XRX|XXX|
|XXX|XXX|XYX| F
|XXX|XBX|XBX|
|XOX|XXX|XOX|
|XGX|XGX|XGX|
|XRX|XXX|XRX|
|XXX|XYX|XXX| F#
|XXX|XBX|XBX|
|XXX|XXX|XOX|
|XXX|XGX|XGX|
|XRX|XRX|XRX|
|XYX|XYX|XYX| G
|XXX|XBX|XBX|
|XXX|XXX|XOX|
|XXX|XXX|
|XXX|XRX|
|XYX|XXX| G#
|XBX|XXX|
|XXX|XOX|
|XXX|XXX|
|XXX|XRX|
|XXX|XYX| A
|XBX|XXX|
|XOX|XOX|
|XGX|XXX|
|XXX|XRX|
|XYX|XXX| A#
|XXX|XBX|
|XXX|XOX|
|XGX|XXX|
|XRX|XRX|
|XYX|XYX| B
|XXX|XBX|
|XXX|XOX|
› In-depth guide on note progression
‹ In-depth guide on note progression
Open note:
Strumming open gives you a C1 note on your base octave.
Single finger notes:
Green by itself gives you the note above that (C#1)
You continue scaling up with one finger until you reach orange. they are all half steps, e.g. C C# D D# E F.........
Two finger combos:
Return your hand back to the start, and begin scaling again with two fingers. e.g. pressing GR, then RY, etc. until you reach the end.
Next are the three finger combinations. From here on, you use a 'bookcase' approach:
You actually start all multi-finger combos with two fingers, creating two 'bookends'. You then begin to scale between the bookends.
Once the stack is full, you continue to the next combo.
Rules of thumb in priority from lowest to highest:
The more books in the bookcase, the higher the note. (More fingers=Higher pitch)
The further your first finger is from Green, the higher the note.
The bigger the bookcase, the higher the note still.
(Think of the earlier two finger combos as bookend pairs in a really small bookcase. The same could be said for the single and no finger combos.)
Alright, back to the 3 finger combos!
Three finger scaling starts at A#1, with GXY. The next note B1 is GRY, which already fills the bookcase.
After that, you scale to C2, which is RXB. e.g. moving all your fingers one step, then emptying the bookcase.
As usual, you repeat until you reach a full bookcase on O (note D#2). e.g. YBO
Four finger combos:
Here is where the bookcase approach begins to be properly implemented.
Starting with the first four finger note, E, you should have this bookcase: GXXB.
Some elaboration on larger bookcases:
Look, the three finger bookcase was tiny.
The point of the bookcase system is for logical cycling in a small space, maximizing note range.
As you'll see later, a five finger bookcase actually plays eight notes. (That's more than five, guys! :o )
When you open a bookcase, you then scale one note at a time, like I explained before.
Think of this scale as inserting a book, then shuffling it along from one bookend to the other.
When you reach the end of a mini-scale, you can start again if there's space for an extra finger.
So you insert a new, bigger book (two fingahs!) and scale again.
Because the notes are so densely packed together, you can skip around with the notes real easy!
Back to four finger combos!
According to the bookcase rule, you scale within like so: GXXB, GRXB, GXYB
Notice that there's still extra space (X) in that scale.
You continue the scale by throwing in a bigger book (two fingahs!): GRYB
Now your bookcase is completely full, so move on to the next bookcase! RXXO
You know what to do from here.
FIVE FINGER COMBOS! SHOW THEM WHO'S BOSS!
Really, it's the same as a four finger combo.
The scaling is the same, where you slide one button at a time along the bookcase, then throw in the bigger book and repeat.
e.g. GXXXO, GRXXO, GXYXO, GXXBO. (that's scaling from C to D#)
Then the bigger book: GRYXO, GXYBO.
Notice there's a space left, so add a finger width: GRXBO
Note that this is just a nested bookcase, so the next note fills it up: GRYBO
And that's the extent of the scale!
Confused? I'm just bad at explaining things!
There's a binary version of 32 note scaling floating around for a computer based controller, but I feel it's a bit cramped and non-intuitive.
For example, here's the first octave but played in a binary style:
00000,10000,01000,11000,00100,10100,11100,00010,10010,01010,11010,00110.
To me, it doesn't make any musical sense. If you think that's better, and can forgo portability, here's a link.
› Universal-ish guide to wiring it up
‹ Universal-ish guide to wiring it up
If you're up to wiring it up, it's pretty straightforward, even without a massive pictorial guide. (I mean, if I can do it... :3)
Just trace the ground from the (GH/RB) circuit board to the buttons. (get a feel for the place!)
Keep note of a handy place on the GH board to solder your ground to.
Then find a part on the main GH board that supplies the power.
Wire your 'Duino ground and power to the GH ground and power.
Once that's done, you have full access via digital pins to anything that the GH board is connected to!
Then trace the buttons from where they are pressed to where you can solder on your digital leads. (pins 2-10 at time of posting).
In essence, you're 'piggybacking' onto the existing circuit. DON'T cut anything unless you know what you're doing.
Don't worry about resistors or whatnot when wiring it up, the 'Duino is set up to read 'LOW' as a keypress. If that means anything to you.
If you're clever enough with the piggybacking, the guitar should stay backwards compatible with the game, so don't worry about losing 2p mode!
Notes on the potentiometer (Whammy!):
you will probably have to reconfigure the values for the pot, as I'm pretty sure there's a difference in every model.
There's also a chance I/You wired the pot backwards.
I recommend running the AnalogInOutSerial example sketch that comes with your arduino client to find your pot range.
I may throw in some code to do the same thing in my diagnostic sketch at some point.
The diagnostic sketch you get with the arduino-hero program will save you a LOT of hassle.
When I was coding, I spent hours trying to figure out why nothing was working. I made a diagnostic program, and lo and behold the wiring was crappy!
I recommend having the diagnostic sketch running while the guitar is still open, so you can fix things before it becomes a hassle.
› TODO
‹ TODO
A DEMO!
I'm a drummer, so there's a steep learning curve for me before I'll be able to post a decent demo video.
I'm having to teach myself music theory and some pseudo-bass.
I'm looking into square wave generation with variable duty cycles for an 'acoustic mode'.
At some point, i'll post an advanced tutorial covering useful fret positions, note overlaps, superfast octave hopping, etc.
I can easily add support for the secondary frets on a RB controller while only requiring 1 additional pin, but it's not my top priority right now. Leave a comment if you're impatient, and I'll see what I can do. Please note that I won't be able to properly test the code, as I don't have that model. I'd also have to make another guide on how to wire up that particular section. I have an idea of what to do, but no way to test my theories atm.
The Github page: https://github.com/MagicalGentleman/arduino-hero
Last edited by Superquinn (Mar 3, 2015 1:44 am)