/guitar-hero-synth

Create a synthesizer out of a Wii Guitar Hero controller

Primary LanguageArduino

Guitar Hero Wii Controller Project

Links

Implementation

Peripheral Protocol is 400kHz "fast" I2C, with slave address 0x52

Data stored at address 0xa40000. The data is 0x100 bytes long.

Decrypt comms by writing 0x55 to 0x(4)A400F0, then writing 0x00 to 0x(4)A400FB.

Guitar Hero Guitars

These Guitars are identified by the 6 bytes: 00 00 A4 20 01 03 at register address 0x(4)a400fa. The first 00 indicates that it is a guitar and not drums (which would be 01).

The Guitar reports its information as 6 bytes of data, readable at 0xa40008 and streamable using Data Reporting Modes that include Extension bytes (unused bytes are filled with 0x00). The data is packed into the six bytes as follows (after decryption): Bit Byte 7 6 5 4 3 2 1 0 0 GH3 GH3 SX 1 GH3 GH3 SY 2 0 0 0 TB 3 0 0 0 WB 4 1 BD 1 B- 1 B+ 1 1 5 BO BR BB BG BY 1 1 BU SX,SY are the Analog Stick X and Y positions. BG,BR,BY,BB,BO are the fret buttons by color (Green, Red, Yellow, Blue, Orange). B-,B+ are the + and - buttons at the base of the controller, on the GHWT Guitars the B- is the StarPower button. BU and BD are up and down on the strum bar, respectively. WB is the analog whammy bar. Bits marked GH3 seem to be 1 on GH3 Gibson Les Paul Guitars and 0 on GHWT Guitars. TB is the analog touchbar found on the neck of the Guitar Hero World Tour Guitars, which does not exist on Guitar Hero 3 Guitars. Not touching it - 0F 1st (top) fret - 04 1st AND 2nd - 07 2nd - 0A 2nd AND 3rd - 0C/0D (keeps changing) 3rd - 12/13 3rd AND 4th - 14/15 4th - 17/18 4th and 5th - 1A 5th (bottom) - 1F You can hold two (touchbar) frets at once, as long as those two (touchbar) frets are adjacent, otherwise it will take the value of the lowest fret held (Eg, if you hold the highest and lowest fret, it reads 1F) Note that high/low means physically on the guitar neck (in musical terms I think it's the other way around, so I thought I'd better specify)