This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
dev:percussion [2016/01/10 12:46]
michael [Drum Splitter]
dev:percussion [2016/02/06 00:15]
Line 3: Line 3:
 As a new drummer and long-time Rosegarden user, I want to use the computer as an improvement aid to help my drumming. 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.+My original plan was to add drum notation ​to Rosegarden.  ​After serious study and contemplation, ​I have concluded this is very impractical. ​ Rosegarden does all internal work using a MIDI-based system, and the existing editors allow you to move notes freely up and down the scale by MIDI pitch. ​ Height on staff and other factors are ultimately determined ​by the MIDI pitch. ​ Rosegarden can manage polyphonic notation, but poorly and awkwardly.  ​It is best to keep polyphony to a minimum.
-I would like to be able to print these partsfor starters.  ​I also have fairly large collection ​of MIDI files that have nice drum grooves ​would like to learn.  ​I also foresee this being useful ​to me as learning toolfor seeing how some groove I made up looks on a page.+Drum notes need to be written at one particular height by drum.  As drum kits are highly polyphonic; every height represents a different instrumentand has to be notated within a separate segment.  ​Some drums can trigger ​variety ​of different ​MIDI pitches from the same staff position, eg. snare head/cross stick/rim shot, ride edge/​bell/​bow,​ and open/closed hi-hat. ​ Some drums can trigger the same MIDI pitch from different staff positions, eg. the hi-hat pedal is notated toward the bottom of the staff, for the foot, and can play a note by itself, but it is also used with and sometimes notated in conjunction with the closed hi-hat sound that it triggers. ​ The drum score to "Will Survive"​ by Gloria Gaynor comes to mind as an example where entering that as notated on the score would trigger duplicate closed hi-hat events.  ​Finally, drum notes need to export to LilyPond in totally different waylike "hh4 bd bd hh."
-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. +Added all together, Rosegarden needs something radically different ​to handle these requirements.  ​Rosegarden has stretched ​the limits ​of what can be done with notation ​in a sequencer-based applicationbut after stewing on all of this for few weeksI have to conclude that drum notation lies beyond ​those limits.  ​The only realistic ​way to go forward here is to invent ​a new event paradigm ​that is not MIDI-basedwhere it displays at pitch //x//sounds at pitch //y//, and exports ​as pitch //z//.  There could be no way to go back and forth between ​that and standard Rosegarden events.  ​It would amount ​to doing parallelnotation-driven system within ​the existing MIDI-driven system.
- +
-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 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 pitchesas 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 treble clef.  For exampleit 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 +
- +
-===== Workflow ===== +
-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 extensionsand for old segmentsgo get a text editor and hack the XML I reckonlike 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 ​new segment for this pitchtaking ​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 +
- +
-===== Alesis ===== +
-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: ​+
 +It feels tantalizingly possible to overcome all of these objections, but I have concluded that even if it could be done, it just wouldn'​t be anything to be proud to show off in the end.  It would be hacky and weird in the extreme.
 +I have determined that the best solution to my overall requirements is to switch to a notation-driven editor like MusE Score for notating drum parts. ​ Perhaps I will discover opportunities to improve workflow and integration with that application.
dev/percussion.txt · 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