This is an old revision of the document!

Percussion Notation


As a new drummer and long-time Rosegarden user, I want to use the computer as an improvement aid to help my drumming.

My electronic drum set came with various training patterns that have much potential to be useful, but they did not supply notation for these parts in the manual. I have weak reading skills, and typically learn rhythms more by ear than by reading, but when it comes to drumming, I found looking at some printed notation offered me a vast improvement in my understanding of how the components of a groove fit together in time. I got along much better reading a page than trying to anticipate the flashing red lights on my drum brain.

I would like to be able to print these parts, for starters. I also have a fairly large collection of MIDI files that have nice drum grooves I would like to learn. I also foresee this being useful to me as a learning tool, for seeing how some groove I made up looks on a page.

My intention here is to get a drum notation feature together that works well enough to satisfy me. I hate doing work by hand that a computer can automate for me, but I also hate spending a lot of time making things pretty and fancy. One of my heroes is the Rosegarden user who hacked together a Z80-based synth with drums made out of tape rolls struck with pencils triggered by door bell solenoids.

I am taking a pragmatic, rather than an idealistic approach.

Drum Clef

This implementation adds a new two bar percussion clef. The clef behaves exactly like a treble clef when used in melodic MIDI segments. It is present more as a decoration than as anything functional.

Percussion Key Map Extensions

This implementation adds two new fields to percussion key maps. These key maps are used to associate labels like “Crash Cymbal 2” with MIDI trigger pitches, as well as the new additional information.

Percussion Pitch

The first new field is Percussion Pitch. This is the pitch at which this drum should be written, relative to a treble clef. For example, it is customary to notate a snare drum at the space corresponding to the C above middle C.

Default Note Style

The next new field is Default Note Style. This is the default style that should be used for notes contained within this segment. *Implementing this ought to be a real bear, because the note style system was designed to be customized by the user, and strictly speaking there are no fixed note styles at all. In practice, no user ever customized the note styles, and it was one of those esoteric little pet features that was never properly seized upon. I'm not going to seize upon it properly either. I'm just going to hack around it in the most expedient way possible. I need cross and those weird slashy note heads for cow bells. I'll have to add a whole new mapping for the latter. I need to add the head with a circle around it too, for rim shots. Ugh.*

Percussion Segments

This implementation adds a new kind of MIDI segment that is dedicated to percussion.

blah blah blah


It should be possible to create one of these things manually, with a percussion segment pencil and all kinds of things I haven't really thought through yet. I will add things like that later, if ever. For now, this expects to start with a polyphonic MIDI segment of some type, recorded from my drum set, imported from a MIDI file, played on a keyboard, etc., and will rely on Segment → Split… → Split by Drum… to configure all these behind the scenes segment parameters. I'm planning on changing these parameters for new segments through the percussion key map extensions, and for old segments, go get a text editor and hack the XML I reckon, like the highest/lowest playable and maybe a few other things.

Tired of writing. I'm going to continue fleshing this out as time allows. I more or less plan to write the user documentation as a road map to how the feature will come together when I implement all of it. As of this writing, the basic splitter functionality is working, and I am pretty much trying to answer the question, “Now what?” There are a lot of pieces to this thing. This is a really big undertaking.

Drum kit notation is fundamentally polyphonic notation. While the beats sometimes line up in such a way that split-and-tied chords would work, I am going to take an approach that requires drum parts to be polyphonic 100% of the time, with separate segments for each type of drum played.

Drum Splitter

Toward the ends of converting existing parts to written notation and of handling polyphony, the first thing I need to implement is a drum-oriented split function.

The function shall:

  • for each pitch 0 to 127
  • search the segment for this pitch
  • if the pitch is found, create a new segment for this pitch, taking the label from the percussion key map
  • for known pitches (eg. snare) transpose the segment such that the pitch sounds suitably and the note is rendered at the correct height (eg. middle space C)
  • for known pitches (eg. closed hi-hat) notate using correct note heads automatically


meh… I think I'll implement a rudimentary splitter to get started, and see where it all goes once my sleeves are rolled up. I don't have a firm plan for a number of issues, including:

  • hi-hat, crash, ride, and snare can all trigger a variety of different samples via different pitches, and all but a handful of these pitches need to be notated on the same line
  • our handling of rests in polyphonic parts is really bad, and this drum stuff will showcase the absolute worst of it, absolutely all the time, and this needs gone through and sorted out


snare: 38 snare rim: 40 bass: 36 tom 1: 48 tom 2: 45 tom 3: 43 tom 4: ? tom rim1:? tom rim 2: ? tom rim 3: ? tom rim 4: ? ride: crash 1: 49 crash 2: ? hat pedal down: hat half open: hat closed: hat splash:

dev/percussion.1452426367.txt.gz · Last modified: 2018/02/07 17:07 (external edit)
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki