Advamced Percussion Analysis in the Midistats Program This is an addendum to the midistats.1 file. The MIDI file devotes channel 9 to the percussion instruments and over 60 percussion instruments are defined in the MIDI standard. Though there is a lot of diversity in the percussion track, for most MIDI files only the first 10 or so percussion instruments are important in defining the character of the track. The program Midiexplorer has various tools for exposing the percussion channel which are described in the documentation. The goal here is to find the essential characteristics of the percussion track which distinguishes the MIDI files. This is attempted in the program midistats. Here is a short description. -corestats Produces a line with 3 numbers separated by tabs. eg 384 8349 448 It returns the number of divisions per quarter note beat (ppqn), the number of note onsets in the midi file, and the maximum number of quarter note beats in midi file. -pulseanalysis Counts the number of note onsets as a function of its onset time relative to a beat, grouping them into 12 intervals and returns the result as a discrete probability density function. Generally, the distribution consists of a couple of peaks corresponding to quarter notes or eigth notes. If the distribution is flat, it indicates that the times of the note occurrences have not been quantized into beats and fractions. Here is a sample output. 0.3496,0.0000,0.0000,0.1602,0.0000,0.0002,0.2983,0.0000,0.0000,0.1914,0.0002,0.0001 -panal Counts the number of note onsets for each percussion instrument. The first number is the code (pitch) of the instrument, the second number is the number of occurrences. eg. 35 337 37 16 38 432 39 208 40 231 42 1088 46 384 49 42 54 1104 57 5 70 1040 85 16 -ppatfor n where n is the code number of the percussion instrument. Each beat is represented by a 4 bit number where the position of the on-bit indicates the time in the beat when the drum onset occurs. Thus 0 indicates that there was no note onset in that beat, 1 indicates a note onset in the beginning of the beat, 4 indicates a note onset in the middle of the beat, and etc. The function returns a string of numbers ranging from 0 to 7 indicating the presence of note onsets for the selected percussion instrument for the sequence of beats in the midi file. Here is a truncated sample of the output. 0 0 0 0 0 0 0 0 1 0 0 4 1 0 0 4 1 0 0 4 1 0 0 4 1 0 0 4 1 0 0 4 1 4 4 0 1 0 0 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 5 0 1 0 0 0 1 0 5 0 1 0 5 0 1 etc. One can see a repeating 4 beat pattern. -ppat midistats attempts to find two percussion instruments in the midi file which come closest to acting as the bass drum and snare drum. If it is unsuccessful, it returns a message of its failue. Otherwise, encodes the position of these drum onsets in a 8 bit byte for each quarter note beat in the midi file. The lower (right) 4 bits encode the bass drum and the higher (left) 4 bits encode the snare drum in the same manner as described above for -ppatfor. 0 0 0 0 0 0 0 0 0 0 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 145 33 and etc. -ppathist computes and displays the histogram of the values that would appear when running the -ppat. eg. bass 35 337 snare 38 432 1 (0.1) 64 32 (2.0) 8 33 (2.1) 136 144 (9.0) 8 145 (9.1) 136 The bass percussion code, the number of onsets, and the snare percussion code and the number of onsets are given in the first two lines. In the next line the number of occurrences of each value in the -ppat listing is given. The number in parentheses splits the two 4-bit values with a period. Thus 33 = (2*16 + 1).