Absolutely perfect! Thank you Harm.

All the best,

Craig

On Sat, 29 Jun 2019 at 21:37, Thomas Morley <thomasmorle...@gmail.com>
wrote:

> Am Sa., 29. Juni 2019 um 11:06 Uhr schrieb Craig Dabelstein
> <craig.dabelst...@gmail.com>:
> >
> > Hi all,
> >
> > Is there a way to modify the Flams, Drags and Ruff snippet from the LSR (
> http://lsr.di.unimi.it/LSR/Item?id=566) so that there can be open
> versions of the drag and ruff (that's what exists now), and also a closed
> version of the drag and ruff; i.e. joining the two or three notes with a
> slur.
> >
> > At the moment, to write a closed drag takes this code:
> > \grace { sn16 ( sn ) }
> >
> > Could the snippet be modified so that one could type: \dragclosed or
> \dragopen. The same for the ruffs.
> >
> > All the best,
> >
> > Craig
>
> Do you mean like below (2.19.x required):
>
> \version "2.19.82"
>
> %% http://lsr.di.unimi.it/LSR/Item?id=566
>
>
> %% Return repeated single notes or chords, depending on @var{print-chord?}
> %% If @var{print-chord?} is set @code{#f}, the first written note is taken.
> %% The Number of repeats is set by @var{lngth}
> %% Only notes are returned. Other stuff like @code{Script},
> @code{Fingering}
> %% is thrown away.
> #(define (grace-from-main-note print-chord? lngth music slurred?)
>   (let* ((elts (ly:music-property music 'elements))
>          (has-duration?
>            (lambda (x) (ly:duration? (ly:music-property x 'duration))))
>          ;; If the whole chord should be printed catch Notes only.
>          ;; If the first written note should be printed catch it.
>          ;; Otherwise, don't touch the music.
>          (mus (cond ((and (music-is-of-type? music 'event-chord)
> print-chord?)
>                      (make-event-chord (event-chord-notes music)))
>                     ((music-is-of-type? music 'event-chord)
>                      (first (event-chord-notes music)))
>                     (else music)))
>          ;; Set duration of note, clear 'articulations.
>          (note (map-some-music
>                   (lambda (m)
>                     (and (has-duration? m)
>                          (begin
>                            (set! (ly:music-property m 'duration)
>                                  (ly:make-duration (if (> lngth 1) 4 3) 0
> 1 1))
>                            (set! (ly:music-property m 'articulations) '())
>                            m)))
>                   (ly:music-deep-copy mus)))
>          (next-note (ly:music-deep-copy note))
>          (last-note (ly:music-deep-copy note))
>          ;; Create a list of notes for use with (> lngth 1)
>          (m-list
>            (flatten-list
>              (list note
>                    (make-list (max 0 (- lngth 2)) next-note)
>                    last-note))))
>   ;; Return a single note if (= lngth 1 ).
>   ;; Insert Beam for (> lngth 1) and return the result.
>   (cond ((= lngth 1 )
>            note)
>         ((> lngth 1)
>            (list-set!  m-list 0
>              (begin
>                 (ly:music-set-property!
>                     note
>                     'articulations
>                     (cons
>                       (make-music
>                        'BeamEvent
>                        'span-direction -1)
>                       (if slurred?
>                           (list
>                             (make-music
>                              'SlurEvent
>                              'spanner-id
>                              'drag+ruff
>                              'span-direction
>                              -1))
>                           '())))
>                  note))
>            (list-set!  m-list (- lngth 1)
>              (begin
>                 (ly:music-set-property!
>                     last-note
>                     'articulations
>                     (cons
>                       (make-music
>                            'BeamEvent
>                            'span-direction 1)
>                       (if slurred?
>                           (list
>                             (make-music
>                              'SlurEvent
>                              'spanner-id
>                              'drag+ruff
>                              'span-direction
>                              1))
>                           '())))
>                 last-note))
>             (make-sequential-music m-list))
>          ;; fall back
>          (else (make-sequential-music '())))))
>
> graceRepeat =
> #(define-music-function (chord-repeat? how-much note)
>   ((boolean? #f) integer? ly:music?)
>   "Return @var{note} preceded by repeated and beamed grace-notes. The
> number of
>   grace-notes is specified by @var{how-much}.
>   If @var{note} is a chord the first written note of it is used.
>   If @var{chord-repeat?} is specified the whole chord is repeated during
>   @code{GraceMusic}."
>   #{
>     \slashedGrace {  $(grace-from-main-note chord-repeat? how-much note
> #f) }
>     $note
>   #})
>
> slurredGraceRepeat =
> #(define-music-function (chord-repeat? how-much note)
>   ((boolean? #f) integer? ly:music?)
>   "Return @var{note} preceded by repeated and beamed grace-notes. The
> number of
>   grace-notes is specified by @var{how-much}.
>   If @var{note} is a chord the first written note of it is used.
>   If @var{chord-repeat?} is specified the whole chord is repeated during
>   @code{GraceMusic}.
>   Graces are slurred."
>   #{
>     \slashedGrace {  $(grace-from-main-note chord-repeat? how-much note
> #t) }
>     $note
>   #})
>
> flam =
> #(define-music-function (music)(ly:music?)
>   "Return @var{music} preceded by 1 grace-note"
>   #{ \graceRepeat #1 $music #})
>
> drag =
> #(define-music-function (slurred music)((boolean? #f) ly:music?)
>   "Return @var{music} preceded by 2 grace-notes.  Optionally slurred
> graces."
>   #{
>     \slashedGrace {  $(grace-from-main-note #f 2 music slurred) }
>     $music
>   #})
>
> slurredDrag = \drag ##t \etc
>
> ruff =
> #(define-music-function (parser location slurred music)((boolean? #f)
> ly:music?)
>   "Return @var{music} preceded by 3 grace-notes.  Optionally slurred
> graces."
>   #{
>     \slashedGrace {  $(grace-from-main-note #f 3 music slurred) }
>     $music
>   #})
>
> slurredRuff = \ruff ##t \etc
>
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> % EXAMPLE
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
> % Note: the new coding works now for \notemode too.
>
> #(set-global-staff-size 18)
>
> \paper { indent = 0 }
>
> \layout {
>     \context {
>       \Score
>       \override NonMusicalPaperColumn.line-break-permission = ##f
>     }
> }
>
> <<
> \new DrumStaff {
>   \new DrumVoice \drummode {
>     r4 \flam sn4 \drag cymr4 \ruff bd4 |
>     \flam <sn bd>2 \flam <bd sn>2  |
>     \graceRepeat ##t #4 <bd sn>1 |
>     \graceRepeat  #1 <bd sn>1
>     \graceRepeat  #2 <bd sn>1
>     \graceRepeat  #3 <bd sn>1
>     \graceRepeat  #1 <bd sn>1
>     \graceRepeat  #2 <bd sn>1
>     \graceRepeat  #3 <bd sn>1
>     \graceRepeat  #4 <bd sn>1
>     \graceRepeat  #5 <bd sn>1
>   }
> }
>
> \new Staff
> \new Voice
> \relative c' {
>     \flam c \drag d
>     \ruff e
>     \graceRepeat #4 f-1\2^"foo"
>     \flam <c f>
>     % Insert the beginning of a (Phrasing)Slur before the grace-notes.
>     <>^\(
>     \drag <f c>
>     % Change appearance of grace-notes.
>     $(add-grace-property 'Voice 'NoteHead 'style 'cross)
>     \ruff <c f>~ <c f>
>     $(remove-grace-property 'Voice 'NoteHead 'style)
>     \graceRepeat  #4 <f c>
>     % Insert the beginning of a (Phrasing)Slur before the grace-notes.
>     <>(
>     \graceRepeat  #5 <c f>
>     \graceRepeat ##t #6 <f c-2\3>-"foo"->
>     )\)
> }
> >>
>
>
> \new DrumVoice \drummode {
>     \drag sn4
>     \slurredDrag sn4
>     \ruff sn4
>     \slurredRuff sn4
>     \graceRepeat ##t #6 <bd sn>1
>     \slurredGraceRepeat ##t #6 <bd sn>1
> }
>
>
> Cheers,
>   Harm
>


-- 
[image: photograph]
*Craig Dabelstein*
Owner
email: cr...@maximesmusic.com.au
Maxime's Music, QLD, Australia
[image: facebook icon] <https://www.facebook.com/maximesmusic.com.au> [image:
twitter icon] <https://twitter.com/MaximesMusic> [image: youtube icon]
<http://www.youtube.com/c/Maximesmusic_for_band> [image: instagram icon]
<https://www.instagram.com/maximes_music/>  maximesmusic.com.au
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to