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
dev:percussion [2016/01/01 14:52]
michael
dev:percussion [2016/07/14 21:21]
michael [Objective]
Line 1: Line 1:
 ====== Percussion Notation ====== ====== Percussion Notation ======
-Now that I'm learning to play the drums, it's inevitable that I 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 itwe needn't bother.+===== Objective ===== 
 +To use Rosegarden to print drum notation for compositions that exist only in the MIDI realmsuch as vintage computer game music.
  
-===== Clef ===== +Rather than develop nicefirst rate feature that would be enjoyable to usemy aim is only to hack things to a point where I can get the task accomplished, even if the result is brutally ugly to use.
-The usual way to decide where to draw note involves using clefkeyand accidental information to choose height on staff and presentation for a 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?+===== Phase 1 ===== 
 +The Edit... Split... Split by Drum feature.  This scans segment to find the discrete pitches, then moves each pitch encountered into a new segment.  All the F#3 go into a segment by themselves, all the Ab4, all the C0, etc.  This is a good beginning, but it needs refinement.
  
-It shouldn'be too unreasonable to make the clef examine the pitchcompare to the tableand return the height in the usual fashion.+===== Phase 2 ===== 
 +To work out which pitches to combine into a single segment, such as open and closed hi-hat.  This will be limited to GM percussion only, and hard coded for the basic standard GM drum kitcross-referenced to whatever LilyPond supports.  If it isn't in basic GM or if LilyPond can't support it, then it doesn't get in.  Hard coding the rules saves a massive amount of work.  If users encounter non-GM files they wish to convert into drum notationthey'll have to remap the drums to GM first.  If that became a frequent issue for someone with a particular vintage synth or whatever, this remapping could be scripted a lot more cheaply than fancy internals could be constructed.  There just isn't any point in laying all that groundwork to create mappings when one mapping will be used the vast majority of the time, and when there are only a small number of exceptions (all pertaining to the snare and hi-hat as far as I recall).
  
-===== Questions to Consider ===== +===== Phase 3 ===== 
-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.+Once the drum splitter is smarter, the next step is to collect a list of every kind of drum LilyPond can export, and create a way to designate a particular segment as containing that kind of drum.  This means the pitch is irrelevantand non-GM mappings could be accommodated here easily.  The obvious way to go here is to add a combo box to the SPB to designate that this segment contains a hi-hat or what have you.
  
-Seems like a workflow to consider is loading standard GM file with a percussion part you want to learn.  The Split function needs a new capability to split a segment such that each individual pitch ends up in a new segment.+===== Phase 4 ===== 
 +Once it's possible to designate hi-hat segment, LilyPond export needs to be modified to deal with putting all of this together.  It is probably sufficient to write each segment to a discrete Voice.  I have no idea as yet how to deal with the problem of rests.
  
-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 headetc.+It should be possible to modify LilyPond export to notate things like cross-stick, accents, and ghost notes; the latter two of which could be guessed at reasonably by examining velocity, and using simple hard-coded ranges.  Velocity less than //n// equals an automatic ghost note, velocity higher than //y// equals an accent.
  
-How to handle the ride vs. ride 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 patches, some of them don't, and on the layered ones, you get the bell sound by crossing a velocity threshold A smart function would take a GM ride bell and turn it into a 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?+===== Phase 5 ===== 
 +Possibly add some configuration and whatnot so there is more flexibility.
  
-I'm done thinking for now.  I'm going to need to do a lot of thinking and planning before I think about coding anything, and I don't know what odds I'd put on my actually getting this done. 
  
-Random thought:  maybe the lookup table could exist in track parameters instead of being associated with the clef. 
  
-Meh.  Sleepy now. 
- 
-Quick note to self:  As I learn and grow with the new drum set, the number one thing I'm in a hurry to do is load some classic MIDI file and use it to learn the pattern, via printed notation.  Before I go off and spend a month of free time writing a notation feature, I 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! 
- 
-===== 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 a rather satisfying degree.) 
 
 
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