lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Custom drum noteHead in define expression


From: Thomas Morley
Subject: Re: Custom drum noteHead in define expression
Date: Wed, 4 Apr 2018 02:39:58 +0200

2018-04-03 18:25 GMT+02:00 Karim Haddad <address@hidden>:

> And thanx also for your snippet. I have already tried it and works 
> marvelously.
> But concerning customizing new note heads i think checking the code itself 
> seems necessary.
> Do you know if define-grobs.scm is a good place to start with ?

Well, some scheme-knowledge is needed.
There is a scheme-tutorial in the docs. Several guile tutorials out
there, as well as the guile manual.
Best general training is reading this list, though, trying to
understand the requests and trying to solve them.
If you read someones code, try to understand what happens and why, can
it be improved and ...

The Extending Manual is not bad as well.
I remember as a starter I did several exercises, defining several
custom-markup-command, markup-list-commands, substitution functions
etc etc
Homework, like a decade ago, but I'm still learning ;)

If you try to solve an own problem searching the archives is always a
good starting point.



On topic.
There's something annoying happening while using custom-styles. I just
wrote a bug-report about it:
http://lilypond.1069038.n5.nabble.com/custom-style-custom-stencil-combination-returns-warning-tt211374.html

So with the workaround, in the bug-report as well you could do:

\version "2.19.81"

#(define mydrums '(
         (bassdrum        myStyle   #f           -1)
         (snare           myStyleII   #f           0)
         (hihat           cross     #f           1)
         (halfopenhihat   cross     "halfopen"   1)
         (pedalhihat      xcircle   "stopped"    2)
         (lowtom          diamond   #f           3)))

#(define stencil-for-my-style
  (lambda (grob)
    (cond
      ((eq? 'myStyle (ly:grob-property grob 'style))
        (begin
          (ly:grob-set-property! grob 'style '())
          (grob-interpret-markup grob
            #{
              \markup \vcenter \musicglyph #"pedal.*"
            #})))
      ((eq? 'myStyleII (ly:grob-property grob 'style))
        (begin
          (ly:grob-set-property! grob 'style '())
          (grob-interpret-markup grob
            #{
%% from http://lsr.di.unimi.it/LSR/Item?id=515
%% slightly changed
               \markup \vcenter \scale #'(0.4 . 0.4) {
                   \combine
                     \translate #(cons -1.25 0) \combine
                       \draw-circle #0.65 #0 ##t
                       \override #'(thickness . 2.5) \draw-line #'(3 . -3)
                     \translate #(cons 1.25 0) \combine
                       \draw-circle #0.65 #0 ##t
                       \override #'(thickness . 2.5) \draw-line #'(-3 . -3)
                 }
            #})))
      (else (ly:note-head::print grob)))))

\new DrumStaff
  \with {
    drumStyleTable = #(alist->hash-table mydrums)
    \override NoteHead.stencil = #stencil-for-my-style
  }
  \drummode {
        bd8
        sn
        hh
        hhho
        hhp
        toml
  }

You may want to adjust stem-attachment.
I leave it as an exercise ;)


HTH,
  Harm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]