Html Drum Tabs and Drumoke
By: Nino Riloviæ , programmer, author of KaPlaRe and N'keybDrum software


Table of Contents


ASCII, HTML, XML, MID file types

First was ASCII file type, usually with extension of txt. Simple plain text which characters every computers system will recognize (DOS, Windows, Unix, Mac). MIDI standard was deweloped for musicians, extension is mid, this is binary file, but not audio format, rather instructions of how and when to play instruments. When Internet started to spread there was a need to proper represent data on screens. Html standard was developed, and in 1995 all basic Microsoft Office tools (Word, Excel) start to "talk" html language. This file type is also plain text with tags (tags are instructions what to do with document elements). It was litle complicated to learn all those tags, so you can simple use "Save as ... htm" option to make this html files and then put them on internet. With MS Office 2000 all those tools start to "speak" xml (same as htm, plain text with tags). Because Microsoft wanted PC with Windows  be a client to all kind of servers (which can have different operating system with all kind of database systems) they develop xml language to easily share data between different system. They told us that it is so user frendly because you can open this xml files in any text editor and look at those data. I never meet person who use that option "Save as --> xml". If file had more then 20 rows nobody wants to read and manually correct those data. Whole concepts than you can put relation and hierarchical database data in one flat file and that file is for human eye is so ... Because of need to represent drum notes to drummers in different way then standard music notation, some poeople "invent" ASCII drum tab (tab stands for tabulator) files. Plain text with individual drum on each row. For many reasons those file are not usefull. But so many programs claim that can import and export those files. But only those files made by them. So I decided to make it better in that way that people will really read them and learn how to play drums. My karaoke program KaPlaRe start to "speak" html (drum tabs).
Quote: ---------------------
What are ASCII drum tabs:
How To Read Drum Tablature:
TAB or tablature is a method of writing down music played on the drums. Instead
of using symbols like in standard musical notation, it uses ordinary ASCII
characters and numbers, making it ideal for places like the internet where
anybody with any computer can link up, copy a TAB file, and read it.

Tabs are very similar to standard notation, as every drum or cymbal has a
seperate line, and tabs follow standard music theory such as measures and
time signatures.

Tabs differ from standard notation in that note values are not shown. Thus,
an eight note, quarter note, etc would all appear as the same, with
different #'s of spaces between, signifying their values.
end of quote ---------------------
As we all know, html language is a standard for shareing files (data) over internet, so why ASCII drum tab, must be a html drum tab and then, we got chance to put note values, the most important thing for every drummer.

Back To Top | Homepage | Mail Me


Advantge of html drum tabs file format

This is standard html file format (extension htm). It is ASCII file with tags which helps internet browsers to properly represent data to users (on screen).
Specification:

  1. All data are in table (grid) with thin borders (dashed) between cells and wide borders 4px which are bar separators.
  2. Every instriment has it own row but it is also allowed to group instruments by some criteria. If row label (first column in table data) is a number (instrument numbers from MIDI specification. like 42 for closed hi-hat, 38 for snare etc.) then you know that these data is only for that instrument (posiible values can be only 1 or 2 (right or left hand), but if row label is two characters text (like TT, for tom-toms) then you know that each number is for some instrument from that group.
  3. Drum notation is specific in that way that this is a only instrument that has no duration of notes being played, but timeing is most important thing. So drum notation must show exactly time when to hit some drum element.  Second row of table data is allways a time, numbers that represent note duration, like 4 for quarters, 8 for 8th notes (1/8), triplets in two 8th notes have time of 12 etc.
  4. Because we also want to learn how to play drums (not only to see whcih instrument to hit and when to do it) we will use numbers (like 1 for right hand and 2 for left hand). Exception is only row with snare data, where 1 means left hand and 2 is right hand.
  5. Whole table can have a maximum of 11 rows and 41 columns per one row. Another importan thing is that you can put two digits in one column, If you see in snare row 12 in same column that means you play snare with both hands at same time, if you see 1> it means accent on this strike on snare etc. So everything is here, easily understandable.

For developers only. This is one-directional process. From MIDI to html drum tabs, but not vice versa. First step should be to make mid file and then convert (export) drum track. Because of velocity of drum notes and so many controllers it is not possible to make exactly midi file from html file. Best solution is to first make part of software than can create and save midi file format (format type 0 is recomended) and then export from midi to html. Because of that, if you want to represent Pause in drum track, you should put some drum notes with velocity of 1. You will not hear that sound, but you will get better grid, and in that case do not show number but hyphen (-) sign, it is missing sound or Pause. Do not use midi meta event "Note off" for that purpose. Drums are specific instrument, you don't have to have Note on and Note off pair events, Note off event you can also get with velocity of 0, but in that case I will not show that event because it is Note off event.

Standard music notation have 5 lines with four blank rows between. Because they put notes on lines and offen add notes bellow on extra iine, there are 6 or 7 lines with 6 or 7 blank rows and with possibility to put text above and bellow can be 15 rows of data (if we count lines as rows). Because it is small and compact, we can't to do same, or our table of data will be to big, so limit is 11 rows, one for time, two (first and last for text) and 8 rows for data. In GM specification there are 60 different drum instruments, but we are realy interested in instruments from extended drum set and few others that are used by drummers as effects (like cowbell etc...). About 20 drum instruments that can be group by some criteria. Basic groups are: cymbals, toms, snare, bass drum and extra (rest).  Additional we can then split cymbals and toms. Cymbals from base or extended drum set and toms on mid toms (or tom-toms) and floor toms. Each instrument in those gorups will be represent with two different number, one number for right hand and one number for left hand, so from that number and group label we can easily tell what element to hit, with what hand and from time column at what time. Who can ask for more?

In logic what number to choose for instruments and hands we must respect the way we play drums (most people are right-handed so we will recpect that fact). Let us look at one rhythm patter: 8th notes, we ride rhythm on closed hi-hat (42), play snare (38) on 2th and 4th quarter, play bass (36) on first quarter and double bass on 5th and 6th notes. Because we have only few instruments, we use simple html drum tab format (every instrument on its own row, row labels are note numbers from midi specification, colors and row position are olso in predefined order (like cymbals first, then toms (if any), then snare, then toms (if any), then bass, then instruments that are not part of extended drum set. If row labels are numbers, then only allowed values are numbers 1 or 2 (right and left hand). Important!!! We ride rhythm with right hand so for cymbals 1 is right hand, we usually start rolls and fills with right hand so for toms 1 is right hand, we play bass with right foot so 1 is right foot, but we play snare with left hand, so 1 is left hand and 2 is right hand for snare notatation (opposite from other, remember that). Time signature is 4/4.

    8 8 8 8 8 8 8 8   8th note duration (time)
42  1 1 1 1 1 1 1 1   right hand every 8th notes     (42 - closed hi-hat) 
38      1       1     left hand on 2nd and 4th quarter    (38 - snare)
36  1       1 1       right foot on 1st quarter and twice right foot on 5th and 6th count

In this simple case we have only number 1, but if we know html drum tabs specification and rules, than we will understand  what to play, when to play and how to play.


(click to listen this drum pattern - 65F_44_120_8_42363846.mid)

First column is for labels, but cell (1,1) is for time signature (in this case it is 4/4), cell (2,1 or second row and first column) is for tempo (here bmp = 120), CB (cymbals from base drum set), snare SN, bass drum BD and last row is for text. First row is for text with thin (2 px) bar separator line with bar number at begining of each bar, second row is for time (4 is quarter, 8 is 8th note etc...), there are three row of data and last row is for text which is important for all bars in that table (with thin 2 px line at the biging and end of column data). This is 4 bar long funky rhythm pattern, cymbals are 1-closed hi-hat (right hand) and 2-open hi-hat (right hand). Study a table data, listen a midi, try to count loud with midi and then start to play.


(click to listen this drum pattern - 56_4of4_triplet_snare_toms.mid)

Here we have some triplets. For CB group number 0 represent pedal hi-hat, TT (tom-toms), snare SN, TF - floor toms, BD - bass drim (we have two different sounds for bass in midi specification, note 36 played with right foot is 1, note 35 played with right foot is number 3). This is one bar long pattern, with pedal hi-hat on first, third, fifth and seventh 1/8 notes, and triplets in 1/8 notes, so every notes in triplets is 1/24 long. To emphasise triplets ypu can use red font with straithrought effect (<STRIKE> tag in html), or you can use red font, put another text (3*24) and use html COLSPAN tag to merge those three cells.

Back To Top | Homepage | Mail Me


Base, Extended, Simple and Old format

  CB - Cymbals - from base drum set

      0: pedal hi-hat (44) ,
            special case, play with left foot
      1: closed hi-hat (42) , right hand
      2: open hi-hat (46) , right hand
      3: ride cymbal 1 (51) , right hand
      4: crash cymbal (49) , right hand
      5: closed hi-hat (42) , left hand
      6: open hi-hat (46) , left hand
      7: ride cymbal 1 (51) , left hand
      8: crash cymbal (49) , left hand
      9: ride bell (53) , either hand (mostly right)
  CE - Cymbals from Extended drum set

        0: not used or user defined

        1: ride cymbal 2 (59) , right hand
        2: crash cymbal 2 (57) , right hand
        3: splash cymbal (55) , right hand
        4: chinese cymbal (52) , right hand
        5: ride cymbal 2 (59) , left hand
        6: crash cymbal 2 (57) , left hand
        7: splash cymbal (55) , left hand
        8: chinese cymbal (52) , left hand
        9: not used or user defined
  TT - Toms - total of four instruments

     1: hi-mid tom (47) , right hand
     2: low-mid tom (45) , right hand
     3: hi tom (50) , right hand
     4: low tom (48) , right hand
     5: hi-mid tom (47) , left hand
     6: low-mid tom (45) , left hand
     7: hi tom (50) , left hand
     8: low tom (48) , left hand
  TF - Floor Toms - total of two instruments

     1: high floor tom (43) , right hand
     2: low floor tom (41) , right hand
     3: high floor tom (43) , left hand
     4: llow floor tom (41) , left hand

  SN - snare

     1: accoustic snare, left hand (38)
     2: accoustic snare, right hand (38)
     3: snare 2, left hand (40)
     4: snare 2, right hand (40)
     5: accoustic snare, left hand-brush (38)
     6: accoustic snare, right hand-brush (38)
     7: snare 2, left hand-brush (40)
     8: snare 2, right hand-brush (40)
     0: side stick, left hand (37)
     9: side stick, right hand (37)

  BD - bass drum

     1: bass drum 1, right foot (36)
     2: bass drum 1, left foot (36) (for left-janded)
     3: accoustic bass drum, right foot (35)
     4  accoustic bass drum, left foot (35)
     5: bass drum 1, left foot (double bass) (36)
     6: bass drum 1, right foot (double bass) (36)
  JJ - any instrument not part of extended drum set   LL - extra drum instruments
  CX - Cymbals (all)

     0: pedal hi-hat (44)
     1: closed hi-hat (42)
     2: open hi-hat (46)
     3: ride cymbal 1 (51)
     4: crash cymbal (49)
     5: ride cymbal 2 (59)
     6: crash cymbal 2 (57)
     7: splash cymbal (55)
     8: chinese cymbal (52)
     9: ride bell (53)
  TX - Toms (all)

     1: hi-mid tom (47)
     2: low-mid tom (45)
     3: hi tom (50)
     4: low tom (48)
     5: high floor tom (43)
     6: low floor tom (41)
SN - same for all formats
 
BD - same for all formats

21-jan-2009 - I found one big mistake with groups and note definition. When I was prepearing Bossa Nova beat (Latin) I realise that pedal hi-hat can be in a same group with ride cymbals because they are played at a same time, so in a column will be two notes. It is much better to put that note from CB group to CE group. So, pedal hi-hat (note number 44) will have sign 0 for left foot and sign 9 for right foot (for left-handed people) but in CE group. Yes, what if ... It is not solution, but to put new row of data only for pedal hi-hat? So I decide to allow to enter data for pedal hi-hat in a LL and JJ row. If you have to hit at a same time cymbal from extended drum set and pedal hi-hat, then put note number 44 in one of rest rows (LL or JJ). Case closed. I got no respond on this text so far, everything is on me. Work with me pople.

  CB - Cymbals - from base drum set

      0:  ride bell (53) , right hand
      1: closed hi-hat (42) , right hand
      2: open hi-hat (46) , right hand
      3: ride cymbal 1 (51) , right hand
      4: crash cymbal (49) , right hand
      5: closed hi-hat (42) , left hand
      6: open hi-hat (46) , left hand
      7: ride cymbal 1 (51) , left hand
      8: crash cymbal (49) , left hand
      9: ride bell (53) , left hand 
  CE - Cymbals from Extended drum set

        0: pedal hi-hat (44) ,
            special case, play with left foot
        1: ride cymbal 2 (59) , right hand
        2: crash cymbal 2 (57) , right hand
        3: splash cymbal (55) , right hand
        4: chinese cymbal (52) , right hand
        5: ride cymbal 2 (59) , left hand
        6: crash cymbal 2 (57) , left hand
        7: splash cymbal (55) , left hand
        8: chinese cymbal (52) , left hand
        9: pedal hi-hat (44) , right foot
            (for left-handed people)

Simple format - This format is most suitable for begginers lessons and drum patterns with only few instruments. Like lessons for snare rolls. Row labels (first column in table) are numbers (instrument numbers from MIDI specification, like 42 for closed hi-hat, 38 for snare, 36 for bass drum etc...). Because there is no group of instruments but only one in a row, you only use two characters for instrument being played: 1 for right hand and 2 for left hand. It is easy to read and the best way to introduce html drum format to students.

Base format - Base is short word for base drum set. This format can have 6 rows for data, 2 rows for header and 1 row for footer (total of 9 rows). Header: first row is for text that can have more information on bars (like bar number, Play and Reapti 3 times, chorus, verse etc), second row is for time (4 is for quarter, 8 for 1/8 etc). 6 rows of data: first row for cymbals, second for toms, third for snare and four for bass drum. additionoal two rows are for instruments that are not part of base drum set (like cowbell etc...). Last row is for text (usually karaoke words) but can be any text which will futher explain rhythm or lesson (like how to count rhythm) Groups: CB, TB, SN, BD, JJ. LL

Extended format- short word for Extended drum set. This table can have total of 11 rows. Header: two rows as is in base format, data: six rows for instruments in extended drum set and additional two rows for other instruments used, footer: one row for text, ususally karaoke words. Groups: CE, CB, TT, SN, TF, BD, JJ, LL

Old format - Only characters for instrument, but not for hand. Foru groups of instruments (full extended drum set). Groups_ CX, TX, SN, BD, JJ, LL.

Colors:
CB Khaki #F0E68C
TT LightSalmon #FFA07A
SN WhiteSmoke #F5F5F5
BD Gainsboro #DCDCDC
JJ Lavender #E6E6FA
LL LightPink #FFB6C1

Back To Top | Homepage | Mail Me


Math - MIDI delta-time and grid time numbers

As we said before drum notes has no time duration and in MIDI format only "note on" events  on drum channel (channel 10 or channel 9 if we count channels from 0) does not have to have "note of" pair event. Midi delta-time is allways in microseconds and represent offset from previous event. In MIDI file header there is value called "division" which tell us how to interpret delta-time value. Example: if division is 120 that means 120 ticks per quarter, so if value is 60 then it is 1/8 notes duration. Claro? For times in second row of our table data (grid) 4 means 1/4 or quarter, standard  values can be 1,2, 4, 8, 16, 32, 64. Remember, in case time signature is 4/4 (nominator is 4, denominator is 4), in case of time signature 6/8 then nominator is 6 and denominator is 8. Sum of all values in our bar mus be equal nominator/denominator. In case of 4/4 time it is 1 (4 + 4 + 4 + 4 or 1/4 + 1/4 + 1/4 + 1/4 = 4/4 or 1). Suppose we have 1 quarter, 2 1/8, two triples all in different time and 1 quarter, , then our bar will have 9 columns, (4 8 8 12 12 12 12 12 12 4). Try to do math. 1/4 + 2*(1/8) + 3 * triplets in 2 1/8 notes + 1/4). Triplets in 2/8 are equal 3*(1/12) or 3/12 = 2/8 = 1/4.
Math: ((1/4 + (1/8 + 1/8) + (3/12 + 3/12) + 1/4) = 1/4 + 1/4 + 1/4 + 1/4 = 4/4 = 1
Values will be: 4 | 8 | 8 | 12 | 12 | 12 | 12 | 12 | 12 |4
Maybe it looks difficult, bit you must not only think as a rhythm machine but also must act as one, so understanding of timeing is crucial for anyone who want to became good drummer.Every irregular time (can't be devided with 2) should be represent with red font, and triplets will have "strike" effects with red font.

Important thing that must be said and understood. Computer based rhythm machine (midi file) can have much greater precision than human (drummer). Time values in MIDI file are in microseconds, in normal music notation you have quarters, dotted quarters etc.. For tempo in music world is used value called BMP (beats per minute) or how much steady quarters must be played in one minute. Like if bmp is 120, than you have to play 120 quarters in one minute, every half second one quarter, so bar is 2 second long. So what is a value of dotted quarter note? 1/4 + 1/8 = 2/8 + 1/8 = 3/8. How we will represent that value in time row. We can put 4* (dotted quarter) but then we got characters in that row, should be only number. So if 2 is two quarters then 3 is one quarter + one 8th notes. When you see value here which is not even number them stop and think about it and then you will know. This value should also be in red font. But!!! In music notation when we see dotted quarter and then one 8th notes we know that we should hold key on keyboard, release that key after duration of dotted quarter (how long it would be depends on tempo or bmp) and then press another key which note duration is 1/8 or 8th. When playing drums, we have no notes duration, but most important thing is when to hit instrument. For first quarter in first bar, if time value is 4 means play right now and count one quarter and a half for another instrument.  Proper way to represent those time values is to put time column with value of 4 and then one column with time value of 8 (even there is no hit in that time cycle). It is always better to put notes in a grid which column looks like rhythm machine circle. In exactly time period, smallest possible we need to track every hit properly. Finally, if we have only five notes in a bar, dotted quarter and 8th then dotted quarter and 8th and ghen quarter, don't make 5 columns in that bar and calculate time, make 7 columns with value of 4,8,8,4,8,8,4 for each time column and then put data values in proper column (you will got two 8 time columns empty). Where you can calculate time (even number) then you don't need empty columns. And sum for all time values in a bar must be 1 (for time signature 4/4). Try to use only standard time values. 1,2, 4 , 8, 16, 32, 64 and for triplets 24 (3 in 2 *1/16), 12 (3 in 2 * 8) etc..

Back To Top | Homepage | Mail Me


Drumoke and MIDI

AI, If we want to show which hand (stick) is used to play which drum instrument then we are in trouble. Simple, we can't do that. Too many combinations to guess. So, we must put that information into midi file but not to break any standard from midi specification. My decision was to use meta event text "marker" for that.
'FF 06 len text ---- Marker like "First Verse"
For hands playing instrument we will be use text event: marker, in a form of three bytes:
1 - first byte = instrument number (just to check, to be shure)
2 - second byte is "coarse" tuning (left, right hand or foot = 1,2,3,4)
'    (1 - right hand, 2 - left hand, 3 - right foot, 4 - left foot, 5 - left foot if is plying double bass)
3 - third is "fine" tuning if needed (angle of hand etc), for now is 0
Explanation: if midi format type is 0 (recomended) then this event has delta-time of 0 and it is write after drum "note on" event (to be shure first byte is note number so must be equal to "note on" event (with note number and delta-time). Second byte is simple number from 1-to 4, to indicate which hand or foot is to be used. Third byte can futher give some information but for now it is here and value is 0.

What use of marker event when no software use it. It is like private messaage in midi file. We must find a way to tell midi readers (software) that those markers are for Drumoke. For that purpose we will use SysEx event. Wholloe mesage will have 9 byte, like this:
'total of 9 bytes
'1 = F0, 2 = length of message (bytes to follow = 7), 3,4,5 = Manufacturer ID
'6 = instrument number (dec 114), 7 = Model ID (1 or 2 or 3), 8 = Loop Factor (dec 0-40)
'9 = end of sysex = hex F7
'*********************
'SysEx in hex notation
' 1  2  3  4  5  6  7  8  9
' F0 07 00 40 01 72 02 00 F7

1) F0 'start of SysEx
2) H7 'string length, in our case must be 7
3) 0 'three bytes for Manufacturer ID
4) 40 'dec 64 'software manufacturer
5) 1 'ID of software manufacturer, put any number here
6) 72 'Device ID 'instrument number, 114 for drums
7) 2 'Model ID 'pattern, learn, standard midi with hands
8) 'user defined
9) F7 'end of SysEx

.
SysEx message is based on Roland sysex messages. Must be 9 bytes long (including two bytes for start and end SysEx). Full explanation of bytes order:

  1. first byte = F0 (start of sysex message), must be 0
  2. byte 2 = length of Sysex message to follow (must be 7)
  3. bytes 3, 4.and 5 (next three bytes = manufactures ID (hex 00 48 01 dec: 0 64 1). This is same format as for hardware manufactures (first byte must be 0, second byte must be hex 48 or dec 64 - endependent software manufactures, if value is dec 127 then it is for hardware), third byte is for software publishers, I took 1 for my programs and because it is my idea, but this number is not so important)
  4. byte 6 = device ID  I decide to put here one number from midi specification instruments numbers, dec 114 (drum) or hex 72
  5. byte 7 = model ID (0 reserved, 1 for rhythm pattern, 2 for rhythm tutorial, 3 for video). If we (programmers) find here value of 2, then it means midi songs with markers that represent hands for drumm player. Must be 1,,2,3 . If 3 then in meta event "cue points" can be path and name of audio files to be triggered in particular time (good for narrators).
  6. byte 8 = undefined or user defined, I used for DirectX loop factor, it is my private thing
  7. byte 9 = end of SysEx message  (must be hex F7)
    'F0 00 48 01 0A 01 F7

So why we need somethin like Drumoke. Well, it will helo us to develop proper system for drummers, drum teacher and drum students. If we use nice graphics, then it is possible to animate drumm player on screen, so people can see and learn how to play.

Last note (on 10-dec-2008)
After I try to speak with poople on midi.org about this (in vain, they are so busy, got no time to talk) I changed my mind, so this is my final proposal and definite choice.

FF 0A len text ---- Hands and Fingers like (420100)

FF 0B len text ---- Chord Names

Important thing is that those text meta event has len byte so for drums I use three bytes, for for some other instrument maybe more bytes is needed, so who ever define fingers and hands positions for guitar, can extend that message to suit his needs.
When we talking about Chord names, then if you want both chord names and chord symbols, then first byte allways should be @ (ADCII 64) followed by 1 for chord names, then @2 as a prefix for chord symbols etc.). No blanks between those two strings. Of course, if you want only chords symbols, then start string with @2. So simple and easy. Midi players which don't support those text meta events will ignore them, but this is opportunity to ask your favorite midi programmer to put this ooption in his software. For midi file format type 1 those events can be in separate track, and delta-time is a same as for karaoke words. If you ever made midi with text, then it will be no problem for you with this events. Maybe this will grow in standard, probably not (nothing will happened) but we got chance to enjoy in new possibilities in midi as a tool for instrument teachers.

On 05-jan-2009 I made first midi file with those informations of hands. I will repeat format of these new meta event text, and rememeber one important thing, every event must be preceeded with delta-time. In this case, put 0 before, because it is midi format type 0 and event is following note on event.
FF 0A len text  - len is always 4, because 4 bytes are to follow
byte 1 - status byte, will tell us what kind of event is and on what channel. Here we will repeat note on event on channel 10, hex it is 99 or decimal 153
byte 2 - note number, for GM drums can be from 27 to 87
byte 3 - fine adjustment, this byte is used for hand and foot values, 1 is right hand, 2 is left hand, 3 is right foot (note 36) and 4 is left foot for pedal hi-hat, 5 is left foot when you play double bass pedals, 6 is right foot when you play double bass, 7 is single left foot for bass (left-handed people, note 36), 8 is single left foot for bass (left-handed people, note 35), 9 is solo right foot for note 35
byte 4 - coarse  - for drums this value is 0, not used

This is how byte array looks like (in hex notation), with first byte as 0 delta-time, and is says that player plays closed hi-hat (number 42) with right hand (number 1). This is extra 8 bytes per drum event, everage song has about 2000 drum events, so it will be about 16 Kb more for midi file. But drum lessons are about 10-12 bars, less then 200 drum events.
00 FF 0A 04 99 42 01 00

delta-time meta event text event type text len status byte note number hand note descriptor
00 FF 0A 04 99 42 01 0
0 255 10 4 153 42 1 0

On 12-jan-2009 I made extensions to this text meta event. As I decided to make N'keybDrum software , part Metronome as as perfect learning tool, I put picture of drum patterns templates in a standard musical drum notation. Now people can compare that notation with html drum tab notation. Many patterns has accent note or different kind of pause and ASCII drum tabs has other symbols for ghost notes etc.When you make your pattern or from standard notation, user should be able to put that sign on screen and save it in midi file or in a html drum file format. In that case we should be able to read those files and get back perfect grid again. So, for interchange data can be used nor midi nor html drum tab file. I decided to use second byte of this message as note descriptor. It will be for drums, but it is o.k. because we talk about drums, let someone else do specification for other instruments (two bytes are available). So, what will be values for that second byte, note descriptor. Value 0 (zero) means nothing,normal hit,  1 will be for accent (symbol > ), etc...

Note Descriptor (value) Name of Symbol Sign Description of Sign
0  nothing,    
1 accent > accented hit (played harder with the shoulder of the stick for hi-hats and crashes)
2 stroke ! loud stroke when you hit at the same time a rima and a skin (you will easily broke sticks in that way but nevermind)
3 ghost g < ghost note (played very softly)
4 flam f = flam (played with both hands almost simultaneously)
5 diddle, d / double, or diddle (2 notes played in rapid succession, each half as long as a single unit of tab)
6 buzz roll z ? buzz roll (let the stick bounce on the head)
  rim r $ hit on a rim of instrument

Let us finish with with description of those two bytes of data: byte1 = hands, byte2 = note descriptor. Many times we must splitt time of quarters notes to smaller pieces because of grid display. If we want programms that display music sheet scores on screen to be as much precise (and of course, we want that) then we can put that information in note description byte. That value can be hidden (not vidible on screen) but will be saved in midi file. Those values are in a range of 20-50, 21 is 4 quarters, 22 two quarters, 24 one quarter, 26 dotted quarter, 28 1/8, 30 dotted 1/8, 32 1/16, 34 dotted 1/16, 36 1/32, 38 dotted 1/32, 40 1/64, 42 dotted 1/64, 44 1/128,  29 1/12 (triplets),35 1/24 (triplets) etc. It is important to say here, every decent software that will add extra data to midi file should have option to "compact" that midi file (to remove this meta tag and make smaller midi file that it fully compatibile with GM2 spec. 

Special case is pause. Problem is how we will put that sign in midi file. We need that information if we want perfect grid when we convert from midi to html drum tab file format. Pause can be for quarter, 8th note etc. And cen be for different drum instrument. And can be empty column without notes, only pause). In that case we will use same meta event text but status byte will not be note on event but controller event (B9 or dec 185).

delta-time meta event text event type text len status byte note number pause not needed
00 FF 0A 04 B9 42 01 0
0 255 10 4 185 42 1 0

In case of empty column, delta-time will not be 0, so midi reader must treat this event like karaoke words event and display column for that event and put puuse in a row where instrument number belongs. In columns there is place for two characers, so it is not problem to put number and note descriptor in same column. If we put controller value for empty column, then note number should be 0. If we want to put only pause for one column, then delta-time will not be 0, and first byte will tell us what kind of pause we are talking about (4 is quarter, 5 1/18, 6 1/16, etc) We will not be abel to get all information about midi file from html drum tabs because there is no information about note velocity. Even in a drum, fade in and fade out effect can be very important. Should we now invetn our own format (xml or txt for those values)? Absolutly not. For visual representation of drum patterns we will use html drum tabs format, but we we also give user midi file which he/she can listen and import in midi player which has support from drum grid and/or drumoke.  

Now we cover olmost all aspect of good quolity drum tabs, except for a first row of our grid. Usually, here we will put text like: Play and Repeat 3 times, maybe leading bar number, at the end maybe symbol for repeat ":" etc. For midi file this is ordinary text, so will we use meta event text, number 01 for this information. In html drum tabs this text can't be longer then column numbers in a bar * 2. If you have 9 columns in a bar, then this text above notes can have max of 18 characters to perfect fit into bar separators lines. In midi, we must not confuse reader with this information, so this text will have prefix @SS , and everything after that is a text for display.

Of course, if someone have better suggestion or proposal, please let me know.

Back To Top | Homepage | Mail Me


Sample song: Bad Company - Can't get enough of your love

This is not a whole song, but 6 bars from the beginning of song. Because of triplets, young drummers got very hard time to understood and play this simple fills. So, this html drum tablatore will help them to get a clue what is going on here.
Step 1: listen first 8 bars from song in audio format (wav, 22KHz, stereo)
Step 2: listen midi file, only drum track, bars 2-7, total 6 bars
Step 3: study this html drum tab

I made midi file with my helper program. I am working to include it in my N'keybDrum program. Then I played that midi kn my KaPlaRe program because of good loop playback. With KaPlaRe I made basic html drum tab and then adopt it manually. It is easy to copy, paste, insert rows and columns if you got a good html editor (like Microsoft FrontPage). Few important things are in this tab. In first bar we have a asterix (*) sign or character. It is for dotted note, as we know dotted eighth note is 1/8 + 1/16, in world of drums it means wait less then quarter to play another instrument. This dotted sign is here to be so near to standard music notation as possible, but if you don't like it put simple empty column. Bar 2 and 3 got only quarters, so we save space. Bar 4 got three different characteers in columns, so let me explain them. We also got dotted eighth note but here we got more then one instrument in that column, so I put asterix in first row of data for that column. In drums there is no note duration so this is only for you to better understood rhythm. Now we got two triplests (in our case three notes in time of two eighth notes). First note in first triplet is not played, it is like pause but here is missing note, so I put two hyphen signs (just because one hyphen is small) to emphasis this situtation. Same for last note in second triplet. Last column in 4th bar is simple pause or break so I put here sign for puuse, it is percent sign, but as I said before, this coumns can be also left blank. This is the only sign for pause, time number will tell us how long is that pause. Bar 5 have two quarters columns and full two triplets. Then bar 6 is standard rhythm pattern for this song. After all this we still didn't learn jow to play drums. Because we don't know which hand play each instrument. That is way is so important that real drummer make this html drum tabs or midi file with markers for hands then software can make perfect html drum tablature in this way. What I mean is that you practise triplets like this: right, left, right then left, right, left. But what in this case when two triplets are missing. Play nornally right,left and right, left or missing first right, left, right then left, right, missing left. I don't know. Do you?

Back To Top | Homepage | Mail Me


From MIDI to html drum tabs - problems

There is a great site about drums and a lot of free drum lessons and videos. Also a midi files with only drum tracks from Bill Powelson at http://www.studydrums.com/ .I took one of his sample (hope he will not mind). this is a picture of drum music notations , and here you can listen that midi file

What is a problem here. As you can see from picture, time signature should be 6/8,  six 8th notes in a bar (c - closed hi-hat), bass drum on first count and s - snare on the four beat (but you count one, two, three, one, two, three). When I made html drum tab from this midi file, it look like this

First, this is a first version (1.3.0) of KaPlaRe where I introduced this html drum tab format, and far for that it works perfect. A lot of errors, but will make any kind of table which can then be manually corrected. So what we got here. 12 16th notes, but when we listen midi we can here only 8th closed hi-hats being played. And time signature is 4/4. Well, this midi was made a long time ago on who knows what equipment, and, it is not so easy to make good midi file. This sounds exactly as author want too, but with tricks. In situations like this it is not so hard to make it right.

Now you can see that time signature is 6/8, tempo (bmp) is 39, and there are 8 steady 8th notes per bar. Even more, it is html, right, so it can be graphics also, so I put small icon of quavers or 8th notes in a time row (columns in a second bar). If you prefer better look of your html drum tabs, than you can do the same. It will not increase the size of html file much, and because html language is a standard it will be shown in every browser on any system. But it is not a truth with this html table. Yes, CSS rules should be supported in the same way from all browsers, but threre is no guarantee about this issue. As you can see, it not even works as should be in MS IE7 (remember, inner cells border are dotted 1px, bar border solid 4 px, row data outline borders solid 1px and first and last row has bar separators solid 2px.

This is another example of using cutom note pictures (midi - snare/toms triplets from above)

Remember, value of those triplets is 24 (three notes in duration of two 16th or one 8th). Make this one bar as ASCII drum tab, compare with this html drum tab and tell me what you think.

This sample will show you one simple funky rhythm. Drum notation is taken from VirtualDruming.com,
then I made midi file, after that I made html drum tab with my KaPlaRe software. This is only one bar, for best experience you should listen that midi in a software which can loop song (like Drum Machine in my software, remember, Windows Media Player will not give you perfect loop of such small midi files).

 

Back To Top | Homepage | Mail Me


What is a point of this article

AI, as all people, want to buy best quolity of something for so less money. An I also don't want anything for free if it is no good at all. Let us look at this subject from drummer bigginers. They want to study drum patterns, want to learn how to play and make a carier as a player in a band. There is music notation, but nobody like them. You can take a class, but it is also can be difficult if you have to travel too much. Video is excellant thing, but it is so big to download and can't replace a teacher (coach). Ascii drum tabs are small, but you got no guarantee that man who made those tabs can even play drums. And if you hear mp3 song you don't know how to play if somebody show you. And last, and biggiest problem is room for practise. Electronic drums can be played without noise but they are expensive, standard drum set is not but problem is where to play. You can practise in your room only with sticks (few pillows on chairs and table as toms) but now problems is what to play and make progress in time. And everybody has computer. Buy some drum lessons, or even better, whole song and practise. But what to buy. First, must be midi file with only drum track and markers for hands. Man who make this midi must kwno what he is doing (or must know to play drums). Second, nust be html drum tab file so you can study that song (or rhythm pattern). third, must be present standard musical notation for drums (in pdf or doc format). And last thing, must be mp3 representation of drum track (played by drum teacher where he must show that can play, not only talking). With software that can read midi and display in real time drum instruments currently being played (Drumoke) you got everything to understood rhythm, listen and watch real action. With tempo and volume control you can ask for more. Buy sofware, buy drum lessons and practise.


Back To Top | Homepage | Mail Me

Hosted by www.Geocities.ws

1