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.
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.
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)
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
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)
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
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 firstname.lastname@example.org