[tablatures] Re: Problems with chord glissandos with articulations and tablature |
[ Thread Index |
Date Index
| More lilynet.net/tablatures Archives
]
On 4/15/10 9:09 PM, "Bernardo Barros" <bernardobarros2@xxxxxxxxx> wrote:
> Thanks a lot, Carl.
>
> Let me know if you make this work with any number of notes.
>
> I'm sure that would be a great feature to add to the next version of
> Lilypond.
>
> I'm new to Lilypond, but I'm finding a pretty good programme.
> I'm a composer and I'm checking this kind of thing to be sure I can work also
> with big projects.
> This was one of the things that made me scared, but not anymore with this
> solution.
>
>
Well, I thought I could put it away, but I couldn't....
Here's a copy of chordGlissando that automatically detects chord lengths and
creates glissandos for chords of up to 8 notes. And if one wanted to add to
that limit, it would be trivial to do so.
HTH,
Carl
%%%%% Start cut and paste
\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
\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
<<
{
$(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))
>>
#}))
\relative c' {
\new Staff {
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> |
\chordGlissando <c e>4 <e g>4
\chordGlissando <c e g c>4 <e g c e>4
}
}