In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Difference between revisions of "Wiimote/Extension Controllers/Guitar Hero World Tour (Wii) Drums"

From WiiBrew
Jump to navigation Jump to search
(Added MIDI info)
m (throw a bold around the data being inverted)
 
(11 intermediate revisions by the same user not shown)
Line 32: Line 32:
 
|- style="background-color: #ded;"
 
|- style="background-color: #ded;"
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 2
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 2
| style="border: 1px solid #ccc; padding: 0.2em;" | HHP
+
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="7" | MIDI Note
| style="border: 1px solid #ccc; padding: 0.2em;" | None
+
| style="border: 1px solid #ccc; padding: 0.2em;" | Velocity<3>
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="5" | Which
 
| style="border: 1px solid #ccc; padding: 0.2em;" | ??
 
 
|- style="background-color: #ded;"
 
|- style="background-color: #ded;"
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 3
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 3
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="3" | Softness
+
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="3" | Velocity<6:4>
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="4" | 0110
+
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="4" | Channel
| style="border: 1px solid #ccc; padding: 0.2em;" | ??
+
| style="border: 1px solid #ccc; padding: 0.2em;" | Velocity<2>
 
|- style="background-color: #ded;"
 
|- style="background-color: #ded;"
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 4
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 4
| style="border: 1px solid #ccc; padding: 0.2em;" | ??
+
| style="border: 1px solid #ccc; padding: 0.2em;" | Velocity<1>
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color:#888;" | 1
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color:#888;" | 1
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color:#888;" | 1
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color:#888;" | 1
Line 50: Line 48:
 
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">+</span>
 
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">+</span>
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color:#888;" | 1
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color:#888;" | 1
| style="border: 1px solid #ccc; padding: 0.2em;" | ??
+
| style="border: 1px solid #ccc; padding: 0.2em;" | Velocity<0>
 
|- style="background-color: #ded;"
 
|- style="background-color: #ded;"
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 5
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 5
Line 67: Line 65:
 
SX and SY are the black analog stick behind the Wii Remote. 0x20 means centered.
 
SX and SY are the black analog stick behind the Wii Remote. 0x20 means centered.
  
None will be 0 if there is velocity data, and 1 if there is none. If there is none, bytes 2 and 3 will be FF FF and contain no data, and all the ??s will be 1.
+
The data from the drum kit is based on the MIDI standards. '''All the data is inverted''', so you will need to invert the data the bytes before it will make any sense.
 +
The MIDI note and velocity data are 7-bit numbers, and the MIDI channel is a 4-bit number. Note that you will need to add 1 to the MIDI channel, as the MIDI standard starts at channel 1, but the value from the kit starts at 0.
  
If there is velocity data, then "Which" tells you which pad it is for:
+
Since the data is inverted, bytes 2 and 3 will be FF FF if there is no data present.
  
Pedal =  11011 = 27 dec, 0x1B
+
If a MIDI device is plugged into the MIDI port, than any notes are passed directly through. The following notes and channel are used for the built-in pads:
Red =    11001 = 25 dec, 0x19
 
Yellow = 10001 = 17 dec, 0x11
 
Blue =  01111 = 15 dec, 0x0F
 
Orange = 01110 = 14 dec, 0x0E
 
Green =  10010 = 18 dec, 0x12
 
  
"Softness" is how hard or soft you hit the pad. It ranges from 0 = Very hard to 6 = very soft, with 7 = not hit at all
+
{| class="wikitable"
 
+
|-
"HHP" is 0 if the velocity data is for the hi-hat pedal (unmarked 3.5mm jack above bass pedal jack), and 1 otherwise. When hi-hat pedal data is sent, "Which" is set as it is for the bass drum pedal (ie 11011). The velocity varies according to how far the pedal is pressed. The pedal to connect to the jack is not the same as the bass drum pedal; it must be a some sort of variable resistor (varying between 20k Ohms when down and 40 Ohms when up seems to give a good spread of velocity values from 0 to 7). The messages are not always sent and are delayed by around 35ms (probably due to the home-made pedal I'm using working wrong).
+
! Name        !! MIDI Channel !! MIDI Note !! Standard Midi Value !! Raw Value
 
+
|-
"0110" is 0110 if there is velocity information, or 1111 if there is not. Its meaning is unknown.
+
| Kick Pedal  || 10          || C2        || 36                  || 0x5B
 
+
|-
The data in the "??" bits is also unknown, although they are always 1 if there is no velocity data.
+
| Red          || 10          || D2        || 38                  || 0x59
 +
|-
 +
| Green        || 10          || A2        || 45                  || 0x52
 +
|-  
 +
| Yellow      || 10          || A#2      || 46                  || 0x51
 +
|-  
 +
| Blue        || 10          || C3        || 48                  || 0x4F
 +
|-  
 +
| Orange      || 10          || C#3      || 49                  || 0x4E
 +
|-
 +
| Hi-hat pedal || 10          || E7        || 100                || 0x1B
 +
|}
  
''Thanks to Metallica1969, death_au, l0stsign, MonkeyJamboree and Carl Kenner.''
+
Note that unfortunately the MIDI message type is not sent to the console, so it isn't possible to differentiate different message types when they are sent via the MIDI in port.
  
==MIDI input==
+
For the hi-hat pedal (unmarked 3.5mm jack above bass pedal jack), the velocity varies according to how far the pedal is pressed. The pedal to connect to the jack is not the same as the bass drum pedal; it must be a some sort of variable resistor (varying between 20k Ohms when down and 40 Ohms when up seems to give a good spread of velocity values). The drums seem to only send a value when they detect you pressing the pedal, and once you do then the pedal will send its changing value for a few seconds. This means if you are testing with a variable resistor, you will only see a velocity when turning it in one direction but not the other.
The MIDI IN jack on the drum controller can be used to connect a MIDI drum kit. MIDI notes are treated as follows:
+
This jack is compatible with pedals from Rock Band drum kits however, and there was a talk by the developers stating that this was the original function for this unused jack. Note that RB pedals are digital, so you will only ever see a velocity of 127.
  
C2  = 36 = Pedal
+
''Thanks to Metallica1969, death_au, l0stsign, MonkeyJamboree, sanjay900 and Carl Kenner.''
D2  = 38 = Red
 
A2  = 45 = Green
 
A#2 = 46 = Yellow
 
C3  = 48 = Blue
 
C#3 = 49 = Orange
 
  
 
==Sensitivity adjustment==
 
==Sensitivity adjustment==

Latest revision as of 06:59, 29 March 2025

Note: This is different from Rock Band drums, which are USB.

The Drums are identified by the 6 bytes: 01 00 A4 20 01 03 at register address 0x(4)a400fa. The first 01 indicates that it is drums and not a guitar (which would be 00). To read these bytes unencrypted, you must first write 0x55 to 0x(4)a400f0, then 0 to 0x(4)a400fb. Trying to read the 6 bytes after initialising the old way will just return FF FF FF FF FF FF, like many other expansions.

Data Format

The drum kit reports its information as 6 bytes of data, readable at 0x(4)a40008 and streamable using Data Reporting Modes that include Extension bytes. The Guitar Hero World Tour game uses mode 0x37 with continuous reporting. The data is packed into the six bytes as follows (after decryption):

  Bit
Byte 7 6 5 4 3 2 1 0
0 0 0 SX
1 0 0 SY
2 MIDI Note Velocity<3>
3 Velocity<6:4> Channel Velocity<2>
4 Velocity<1> 1 1 B- 1 B+ 1 Velocity<0>
5 O R Y G B Bass 1 1

R, B, and G are the drum pads by colour (Red, Blue, and Green). O and Y are the cymbals. Bass is the pedal. B- and B+ are the black - and + buttons behind the Wii Remote. They will be 0 when hit, 1 when not.

SX and SY are the black analog stick behind the Wii Remote. 0x20 means centered.

The data from the drum kit is based on the MIDI standards. All the data is inverted, so you will need to invert the data the bytes before it will make any sense. The MIDI note and velocity data are 7-bit numbers, and the MIDI channel is a 4-bit number. Note that you will need to add 1 to the MIDI channel, as the MIDI standard starts at channel 1, but the value from the kit starts at 0.

Since the data is inverted, bytes 2 and 3 will be FF FF if there is no data present.

If a MIDI device is plugged into the MIDI port, than any notes are passed directly through. The following notes and channel are used for the built-in pads:

Name MIDI Channel MIDI Note Standard Midi Value Raw Value
Kick Pedal 10 C2 36 0x5B
Red 10 D2 38 0x59
Green 10 A2 45 0x52
Yellow 10 A#2 46 0x51
Blue 10 C3 48 0x4F
Orange 10 C#3 49 0x4E
Hi-hat pedal 10 E7 100 0x1B

Note that unfortunately the MIDI message type is not sent to the console, so it isn't possible to differentiate different message types when they are sent via the MIDI in port.

For the hi-hat pedal (unmarked 3.5mm jack above bass pedal jack), the velocity varies according to how far the pedal is pressed. The pedal to connect to the jack is not the same as the bass drum pedal; it must be a some sort of variable resistor (varying between 20k Ohms when down and 40 Ohms when up seems to give a good spread of velocity values). The drums seem to only send a value when they detect you pressing the pedal, and once you do then the pedal will send its changing value for a few seconds. This means if you are testing with a variable resistor, you will only see a velocity when turning it in one direction but not the other. This jack is compatible with pedals from Rock Band drum kits however, and there was a talk by the developers stating that this was the original function for this unused jack. Note that RB pedals are digital, so you will only ever see a velocity of 127.

Thanks to Metallica1969, death_au, l0stsign, MonkeyJamboree, sanjay900 and Carl Kenner.

Sensitivity adjustment

The sensitivity of the pads, cymbals and pedal can be adjusted via MIDI Control Change messages sent to the MIDI IN jack. Activision released a "Drum Tuning Kit" program for this purpose.

The first byte is always 0xBF (Control Change message on channel 16).

The second byte determines which sensitivity to adjust: 0x68 for red, 0x69 for yellow, 0x66 for blue, 0x6A for orange, 0x67 for green, and 0x64 for the pedal.

The third byte determines the sensitivity, with lower values representing higher sensitivities. Activision's software offers 21 different sensitivity levels, which are then scaled to this byte as follows:

Sensitivity level = 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 20
Byte (Pads)       = 28 1E 19 16 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04
Byte (Cymbals)    = 3C 35 2E 29 26 22 1E 1B 18 16 14 12 0F 0D 0B 09 08 07 06 05 04
Byte (Pedal)      = 33 2D 28 24 21 1E 1C 1A 18 16 14 12 10 0E 0C 0A 09 08 07 06 05

Sensitivity adjustments will reset once powered off unless manually saved. To do this, the software sends 0xBF6503, waits 750ms, then sends 0xBF7777.