(reposted from lilypond-user at the suggestion of one of the readers, and includes my script)
I'm interested in making a custom drum mode that more accurately reflects the rules in Weinberg's Guide To Standardized Drumset Notation. Some of the pieces seem to be straightforward, others not so much. I made an example file that was as close as I could get it, but there are a number of problems with my approach. In particular, one notehead uses custom postscript; two others use standard lilypond noteheads that aren't quite right; and there are other expressive marks or articulations that aren't 100%. So not only am I not getting exactly the output I want, it's also moderately difficult to enter the notes themselves in some cases. Has anyone already looked into updating lilypond's drum features to be compliant with GSDN? If not, is there anyone out there that's put extensive time/effort into customizing their drum modes that would be willing to share their work so I might see best (or better!) practices on how to approach this? Specific notes on some of the major problems with my approach: 1) I'd like the halfopen articulation to be a 0 with line straight up-and-down through it instead of slanted...my guess is this mark is embedded in the font and hard to change 2) The staccatissimo articulation appears directly over the choked cymbal note, instead of slightly behind (to the right) of it 3) The rimshot slash is rendered with custom postscript per notehead 4) There is no "circled default" notehead, so I used xcircle instead 5) The triangle notehead isn't the proper orientation for percussion (wide isosceles with base parallel to staff lines) 6) The acciaccatura I use for flams doesn't put the slur line in the direction I wish (it's over instead of under) 7) The grace I used for ruffs and drags doesn't put the slur line in the direction I wish (but I think I can override this) These are mostly appearance-related. Functional- or use-related issues are that I'd really like to be able to make new note names that are like macros so I don't need to be so specific at invocation. I kind of want something like (pardon the pseudocode): (define bell cymr->) (define choke cymc-|) (define rimshot sn^\markup { \postscript #"gsave 0.25 setlinewidth -0.2 -1.3 rmoveto 1.7 -1.7 rlineto stroke grestore" }) (define ghost < \parenthesize sn >) (define flam \acciaccatura { sn8 } sn) (define drag \grace { sn16[\( sn] } sn4\)) Except of course that each of those would need to put the note value in the correct place and be a valid expression, etc. Here's my example: \version "2.14.0" % necessary for upgrading to future LilyPond versions. #(define mydrums '( (bassdrum default #f -3) (snare default #f 1) (hightom default #f 4) (himidtom default #f 3) (lowmidtom default #f 2) (lowtom default #f 0) (highfloortom default #f -1) (lowfloortom default #f -2) (hihat cross #f 5) (halfopenhihat cross "halfopen" 5) (openhihat cross "open" 5) (closedhihat cross "stopped" 5) (pedalhihat cross #f -5) (longwhistle cross "open" -5) (crashcymbal cross #f 6) (splashcymbal cross #f 7) (chinesecymbal cross #f 8) (ridecymbal cross #f 4) (electricsnare diamond #f 1) (sidestick xcircle #f 1) (triangle triangle #f 6) (mutetriangle triangle "stopped" 6) (cowbell triangle #f 3) (hiwoodblock triangle #f 2) (lowoodblock triangle #f 1) (tamtam triangle #f -4) )) % longwhistle == pedalhihatsplash % electricsnare == rimshot (should be default with line through) % tamtam is a gong up = \drummode { s1 sn4_\markup { \tiny "snare" } sn sn sn \times 2/3 { tomh4_\markup { \tiny "toms" } tommh tomml } \times 2/3 { toml tomfh tomfl } hh4_\markup { \tiny "hihat" } hhho hho hhc s1 cymc4_\markup { \tiny "crash" } cyms_\markup { \tiny "splash" } cymch_\markup { \tiny "china" } cymr_\markup { \tiny "ride" } cymr4->_\markup { \tiny "bell" } cymr cymr->_\markup { \tiny "bell" } cymr % use accent for ride bell cymc4-|_\markup { \tiny "choke" } cyms cymc-|_\markup { \tiny "choke" } cymch % use pipe for choke sn4^\markup { \postscript #"gsave 0.25 setlinewidth -0.2 -1.3 rmoveto 1.7 -1.7 rlineto stroke grestore" }^\markup { \tiny "rim." } ss_\markup { \tiny "cross." } < \parenthesize sn >^\markup { \tiny "ghost" } sn-+_\markup { \tiny "stop" } % use plus for stopped drum sn4^"R" sn^"L" sn^"R" sn^"L" tri4^\markup { \tiny "tri." } trim^\markup { \tiny "mute" } cb_\markup { \tiny "cowbell" } cb wbh4^\markup { \tiny "hi bl." } wbl^\markup { \tiny "low bl." } tt_\markup { \tiny "gong" } tt sn4:8^\markup { \tiny "rolls and equivalents" } sn8 sn s2 sn4:16 sn16 sn sn sn s2 \set subdivideBeams = ##t \set baseMoment = #(ly:make-moment 1 8) \set beatStructure = #'(2 2 2 2) sn4:32 sn32 sn sn sn sn sn sn sn s2 \set subdivideBeams = ##f \times 2/3 { sn4:8 s8 } \times 2/3 { sn8 sn sn s } s4 \times 2/3 { s8 s } sn2:8 sn8 sn sn sn sn4.:8 s8 sn8 sn sn s \acciaccatura { sn8 } sn4^\markup { \tiny "flams" } s2 \acciaccatura { tommh8 } sn4 % flams \grace { sn16[\( sn] } sn4\)_\markup { \tiny "drag" } s2. % drags \grace { sn16[\(^\markup { \tiny R } sn]^\markup { \tiny L } } sn4\)_\markup { \tiny "ruff" } s2. % ruffs } down = \drummode { bd4^\markup { \tiny "kick" } bd bd bd s1 s1 s1 hhp4^\markup { \tiny "foot hat" } hhp whl^\markup { \tiny "hat splash" } whl s1 s1 s1 s1 bd4_"R" bd_"L" bd_"R" bd_"L" s1 s1 s1 s1 s1 s1 s1 s1 s2 \acciaccatura { bd8 } bd4 s4 % flams } \new DrumStaff \with { \consists "Parenthesis_engraver" } << \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \new DrumVoice { \voiceOne \up } \new DrumVoice { \voiceTwo \down } >> -- Mike J. Bell on gmail
_______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel