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/10 12:46]
michael [Drum Splitter]
dev:percussion [2018/02/07 17:07] (current)
Line 1: Line 1:
 ====== Percussion Notation ====== ====== Percussion Notation ======
 ===== Objective ===== ===== Objective =====
-As a new drummer and long-time ​Rosegarden ​user, I want to use the computer ​as an improvement aid to help my drumming.+To use Rosegarden to print drum notation for compositions that exist only in the MIDI realm, such as vintage ​computer ​game music.
  
-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 drummingI found looking at some printed notation offered me a **vast** improvement in my understanding of how the components of groove fit together in time.  ​got along much better reading a page than trying ​to anticipate the flashing red lights on my drum brain.+Rather than develop a nice, first rate feature ​that would be enjoyable ​to use, my aim is only to hack things to point where can get the task accomplished,​ even if the result is brutally ugly to use.
  
-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 learning toolfor seeing how some groove I made up looks on page.+===== 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 segment by themselvesall the Ab4, all the C0, etc.  This is good beginning, but it needs refinement.
  
-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 ​Z80-based synth with drums made out of tape rolls struck with pencils triggered by door bell solenoids.+===== 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 kit, cross-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 massive amount of work.  If users encounter non-GM files they wish to convert into drum notation, they'​ll have to remap the drums to GM first.  ​If that became ​frequent issue for someone with a particular vintage synth or whateverthis 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 small number ​of exceptions (all pertaining to the snare and hi-hat as far as I recall).
  
-I am taking ​pragmaticrather than an idealistic approach.+===== Phase 3 ===== 
 +Once the drum splitter is smarter, the next step is to collect ​list of every kind of drum LilyPond can exportand create a way to designate a particular segment as containing that kind of drum.  This means the pitch is irrelevant, and 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.
  
-===== Drum Clef ===== +===== Phase 4 ===== 
-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 a decoration than as anything functional.+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 discrete Voice.  ​I have no idea as yet how to deal with the problem of rests.
  
-===== Percussion Key Map Extensions ===== +It should be possible ​to modify LilyPond export ​to notate things ​like cross-stickaccents, 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.
-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 ==== +===== Phase 5 ===== 
-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.+Possibly add some configuration and whatnot so there is more flexibility.
  
-==== 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 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 
- 
-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.  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: ​ 
  
  
 
 
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