Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
dev:percussion [2016/01/01 14:52]
michael
dev:percussion [2016/01/09 13:42]
michael [Default Note Style]
Line 1: Line 1:
 ====== Percussion Notation ====== ====== Percussion Notation ======
-Now that I'm learning to play the drumsit's inevitable that will want to use Rosegarden to notate something.  Instead of trying to implement the entire spectrum of percussion notation, I want to begin by focusing on notation for a drum set.  This is basically four voices on one staff, with various special symbols.  Working backwards from LilyPond is the way to go here.  If LilyPond can't render it, we needn't bother.+===== Objective ===== 
 +As a new drummer and long-time Rosegarden user, I want to use the computer as an improvement aid to help my drumming.
  
-===== Clef ===== +My electronic drum set came with various training patterns that have much potential to be usefulbut 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 **vast** improvement in my understanding of how the components of 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.
-The usual way to decide where to draw a note involves using clefkey, and accidental information to choose height on staff and presentation for given MIDI pitch.+
  
-A standard clef won't work for percussion.  We need way of mapping the bass drum sounding pitch to the correct staff height for the bass drum.  This wants to be configurable and editable Are there three toms or four?  A cowbell?+I would like to be able to print these parts, for starters.  I also have 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.
  
-It shouldn't be too unreasonable to make the clef examine the pitch, compare to the table, and return the height in the usual fashion.+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 mebut 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.
  
-===== Questions to Consider ===== +I am taking a pragmaticrather than an idealistic approach.
-Drum kit notation is polyphonic notation.  By the nature of the notation and of Rosegardenit's going to have to work as four (or more) totally independent segments.+
  
-Seems like a workflow to consider is loading a standard GM file with a percussion part you want to learn.  The Split function needs new capability to split a segment such that each individual pitch ends up in a new segment.+===== Drum Clef ===== 
 +This implementation adds new two bar percussion clef.  The clef behaves exactly like treble clef when used in melodic MIDI segments.  It is present more as decoration than as anything functional.
  
-Some things will want to be combined.  There are at least three standard hi-hat sounds that will all want to translate onto the hi-hat line.  A smart function would notate each of them appropriately.  Closed hat gets the X note head, etc.+===== 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.
  
-How to handle the ride vsride bell in GM?  On my personal electronic drum kit, getting the bell sound is dependent on the drum kit used.  Some of them have layered patchessome of them don't, and on the layered ones, you get the bell sound by crossing velocity threshold.  A smart function would take a GM ride bell and turn it into ride with a suitably scaled velocity How much of that is general practice, and how much of that is hard coding things for Michael's particular cheap entry level starter drum kit?+==== Percussion Pitch ==== 
 +The first new field is Percussion Pitch.  This is the pitch at which this drum should be writtenrelative to treble clef.  For example, it is customary to notate snare drum at the space corresponding to the C above middle C.
  
-I'done thinking for now.  I'm going to need to do a lot of thinking and planning before think about coding anything, and I don't know what odds I'd put on my actually getting this done.+==== 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'not going to seize upon it properly either.  I'just going to hack around it in the most expedient way possible. need cross and those weird slashy note heads for cow bells.  I'll have to add a whole new mapping for the latter.  need to add the head with a circle around it too, for rim shots.  Ugh.*
  
-Random thought:  maybe the lookup table could exist in track parameters instead of being associated with the clef.+===== Percussion Segments ===== 
 +This implementation adds a new kind of MIDI segment that is dedicated to percussion.
  
-Meh.  Sleepy now.+blah blah blah
  
-Quick note to self:  As learn and grow with the new drum set, the number one thing I'm in hurry to do is load some classic MIDI file and use it to learn the patternvia printed notation.  Before I go off and spend month of free time writing a notation featureI should go look at MusE Score for one thing, and see if there's something already on the shelf.  I'd rather spend time learning drums than writing code at this point.  I got into drumming to get my fat ass some exercise, and it's working!+===== 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.  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 keyboardetc., 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 reckonlike the highest/lowest playable and maybe a few other things.
  
-===== A Bazillion Standards ===== 
-So I got a couple of drum books from Hal Leonard.  To my surprise, there is no key to what line is which drum. 
  
-Surveying what's what, it looks like they expect me to know this is that, because they follow the standard of the Percussive Arts Society.  Just at a casual glance, it's highly obvious that the scheme LilyPond supports by default is quite different from this.  Maybe it's an America vs. everyone else in the world kind of thing, like our weights and measures and our name for what every other country on the fricking planet calls football. 
  
-Anyway, it's highly obvious that drum notation will have to be extremely configurable and flexible if it is to do anyone any good.  Failing that, I'll just implement it the same way as all these books, since that's what I'm learning.  (And getting the hang of to rather satisfying degree.)+**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 foundcreate 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 
 + 
 +etc.? 
 + 
 +meh...  I think I'll implement a rudimentary splitter to get started, and see where it all goes once my sleeves are rolled up.  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 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
 
 
dev/percussion.txt · Last modified: 2022/05/06 16:07 (external edit)
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki