lilypond-user
[Top][All Lists]
Advanced

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

Re: Problems with chord glissandos with articulations and tablature


From: Carl Sorensen
Subject: Re: Problems with chord glissandos with articulations and tablature
Date: Fri, 16 Apr 2010 08:16:42 -0600



On 4/16/10 7:27 AM, "Phil Holmes" <address@hidden> wrote:

> You can override this:
> 
> http://lsr.dsi.unimi.it/LSR/Item?id=457


Thanks for the tip!

Here's a revised version, with the warning message turned off during the
chordGlissando and back on afterwards:

%%%%% Start of cut and paste section

\version "2.13.3"

chordGlissando =
#(define-music-function (parser location mus1 mus2) (ly:music? ly:music?)
  "Make a glissando between the notes of triads @code{mus1} and
@code{mus2}."

  (define (add-glissando musChord)
     (let ((els (ly:music-property musChord 'elements)))
      (ly:music-set-property! musChord 'elements (append els (list
(make-music 'GlissandoEvent))))
      musChord))

  (define (get-notes musicChord)
   (filter (lambda(x) (eq? (ly:music-property x 'name) 'NoteEvent))
           (ly:music-property musicChord 'elements)))

  (define (select-note musChord index)
    (let* ((notes (get-notes musChord))
           (non-notes (filter (lambda (x)
                               (not (eq? (ly:music-property x 'name)
                                         'NoteEvent)))
                              (ly:music-property musChord 'elements)))
           (selected-note (list-ref notes index))
           (new-els (cons selected-note non-notes))
           (new-mus (ly:music-deep-copy musChord)))
     (ly:music-set-property! new-mus 'elements new-els)
     new-mus))

  (define (add-glissando-line mus1 mus2 index)
    #{
       \new Voice {
         \hideNotes
         \override NoteColumn #'ignore-collision = ##t
         \once \override Glissando #'thickness = #2
         $(add-glissando (select-note mus1 (1- index)))
         $(select-note mus2 (1- index))
       }
    #})

  (let* ((notes1 (get-notes mus1))
         (notes2 (get-notes mus2))
         (note-count (min (length notes1) (length notes2))))

    #{
       \once \override Glissando #'minimum-length = #5
       \once \override Glissando #'springs-and-rods =
#ly:spanner::set-spacing-rods
       \once \override Glissando #'thickness = #2
     <<
       \override NoteColumn #'ignore-collision = ##t
       {
         $(add-glissando mus1)
         $mus2
       }
       $(if (> note-count 1) (add-glissando-line mus1 mus2 1))
       $(if (> note-count 2) (add-glissando-line mus1 mus2 2))
       $(if (> note-count 3) (add-glissando-line mus1 mus2 3))
       $(if (> note-count 4) (add-glissando-line mus1 mus2 4))
       $(if (> note-count 5) (add-glissando-line mus1 mus2 5))
       $(if (> note-count 6) (add-glissando-line mus1 mus2 6))
       $(if (> note-count 7) (add-glissando-line mus1 mus2 7))
    >>
    \revert NoteColumn #'ignore-collision
  #}))


\relative c' {
 \new Staff  {
   \override NoteColumn #'ignore-collision = ##t
   d8 [ \chordGlissando <c e g>16 <d f a>] e4 <e g c> d |
   \chordGlissando <c e g>4 <e c f> \chordGlissando <c e g> <d f a> |
   \break
   \chordGlissando <c e>4 <e g>4
   \chordGlissando <c e g c>4 <e g c e>4
 }
}
 





reply via email to

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