How to use Guitar Hero World Tour Drums as a real MIDI drumkit:
Mathijs van den Berg 2009

Introduction:

The Guitar Hero World Tour Drums are an addition to the famous Guitar Hero game. Instead of just playing the guitar, it is now possible to sing and play drums as well.
Many people have noticed the MIDI connector at the back of the controller. It assumes that this drum kit can also be used as a MIDI drum. Too bad, this is not the case. This is a MIDI IN connector and can only be used to connect a real drum kit, so that you can play the game with better drums. My opinion is that it is much more fun to use this drum kit as a 'cheap' MIDI drum kit.

 

Other Solutions:

Some people already found some solutions to use this drum kit as a midi drum

PS360MIDI: This piece of software uses the PS3 or XBOX360 USB HID device and output it to a virtual MIDI driver, with a bit velocity support
eDrums monitor: This piece of software does the same as the PS360MIDI but works faster. No velocity support is available
Wiimote kind of projects: Several guys made a program that uses the WiiMote library to connect to the drumcomputer with the Wii remote + Bluetooth

All those programs looks really nice and you can produce some drum sounds. The bad thing of them is that there is way too much latency. This latency is caused by the drumcontroller on the drums, the wireless transmitter, the wireless receiver, the USB HID interface, the application and the MIDI tunnel.
This delay is noticeable when playing.

My Solution:

I wanted to eliminate as much as possible interfaces between the actual drumpads and the Sample application (like Native Instruments Battery). Therefore i unscrewed my drumkit and took a look inside:

There is a circuit inside the drumkit. I identified 3 chips:

Microchip HA1504: a custom chip, not found on microchip.com that is likely used for signal shaping.

Input pins: 3,5,10 and 12 ( 4 inputs)
Upperleft HA1504: Kick and Crash
Lowerright HA1504: Hihat, Snare, High tom, Low tom

Microchip HA1500: a custom chip, not found on microchip.com that is likely a microcontroller for processing the drumpads and output/inputs SPI data

Left connector: MIDI IN data and Kick pedal, The black jack socket (next to the purple jack socket for the kick pedal) is also connected. Testpoint
TP6 indicates HH. This looks like a future addition to use a Hihat pedal too for open/close.

Top connector: This is the most important connector. It connects the drumkit with the gamecontroller (the big block on top of the drumkit, that differs for each system
(PS3, XBOX360 or Wii). The pinout is:

1: CLK  (SPI Clock signal, 2 MHz is used)
2: MISO (SPI Master IN Slave OUT). This is the output pin of the module to the gamecontroller (black block)
3: GND (Ground)
4: MOSI (SPI Master OUT Slave IN). This is the input pin of the module from the gamecontroller (black box)
5: VCC (3.3v)
6: /CS  (Chip select pin inverted, for SPI)


The protocol

It is clear now that SPI is used. after some measurements with a logic analyzer, it became clear that the gamecontroller(the black box) is the SPI master and the small circuit inside the drumkit is the SPI slave. the clock is supplied by the master and have a frequency of 2 MHz. The CS pin is put low every 10ms, so it looks like the circuit is polled for every 10ms (100Hz)

After some sniffing around, the following became clear:

Example 1: no pad is hit

Master sends: 0xAA 0x55
Slave replies: 0XAA 0x00


Example 2: Hit a pad, for example the green one

Master sends: 0xAA 0x55
Slave replies: 0xAA 0x01 0x99 0x2D 0x1C


Example 3: Hit two pad at the exactly the same time (does not happen very often), for example the green one and the blue one

Master sends: 0xAA 0x55
Slave replies: 0xAA 0x02 0x99 0x30 0x4E 0x99 0x2D 0x27

If you are a bit familiar with MIDI, you can see a message in this:

0x99 = Midi channel 10 note on
0x2D = Midi note (green pad)
0x1C = Velocity, the higher, the louder


To make the picture complete:

0xAA = Preamble
0x01 = Number of midi messages (can be 1 or 2, perhaps more?)

0x99 = MIDI channel 10 note on
0x30 = MIDI note (blue pad)
0x4E = Velocity

Midi notes:

0x26 = Red pad
0x2E = Yellow symbal
0x30 = Blue pad
0x31 = Orange symbal
0x2D = Green pad
0x24 = Kick pedal






I made a small testprogram for a 18F25J50 microcontroller to communicate with the SPI, and output MIDI to the UART. I removed the 0xAA, 0x01 and 0x02 messages and then clean
midi data was left.

The application is written in MPLAB C18 and will be put online soon. It contains

- Interrupt driven SPI
- FIFO buffer between SPI and MIDI UART
- MIDI message shaping (removing 0xAA 0x01 0x2)

Conclusion:

After making the connections to my soundcard's MIDI port i was able to receive MIDI data from my microcontroller. I used the Native Instruments Battery 3 demo.
You can download this demo version from Native Instruments. It works for 30 minutes, and then you need to restart it. It comes with a few demo sample kits included.
The results were suprising! The delay is really reduced and the velocity feels quite real. One con is that the sensivity of the pads and especially the hihat/crash is very
bad. Therefore you need to hit them quite hard before a midi message is generated.


If you have any comments or question, you can always contact me at mathijs@thijsje.nl