Re: [tablatures] Re: [Patch] NR: Documentation of harmonics and slides |
[ Thread Index |
Date Index
| More lilynet.net/tablatures Archives
]
-------- Original-Nachricht --------
> Datum: Sat, 11 Dec 2010 14:19:01 +0100
> Von: Federico Bruni <fedelogy@xxxxxxxxx>
> An: Patrick Schmidt <p.l.schmidt@xxxxxx>
> CC: Carl Sorensen <c_sorensen@xxxxxxx>, "tablatures@xxxxxxxxxxx" <tablatures@xxxxxxxxxxx>
> Betreff: Re: [tablatures] Re: [Patch] NR: Documentation of harmonics and slides
> Il giorno sab, 11/12/2010 alle 13.34 +0100, Patrick Schmidt ha scritto:
> > > I'm not sure that \chordGlissando is up to LilyPond coding
> > > standards for
> > > inclusion in the distribution. It may be too much of a hack.
> > I'll
> > > post it
> > > for review on Rietveld and see what the developers think.
> > IMHO it's very useful for electric guitar scores and it is user-
> > friendly.
>
> Not only electric guitar.. I write scores for acoustic guitar mainly and
> in the last months at least a couple of times I happened to wish
> LilyPond had such a feature.
So did I!
>
> I hope \chordGlissando will be accepted and included in the distribution
> eventually. If not, maybe Carl could provide a .ly file to include (as
> we used to do with tablature.ly)?
Well, he already did. Here is the code and a test file.
HTH,
patrick
>
> Let us know :)
> Thanks,
> Federico
>
>
>
--
GRATIS! Movie-FLAT mit über 300 Videos.
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome
\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)
(context-spec-music
(context-spec-music
(make-sequential-music
(list
hideNotes
(make-grob-property-set 'StringNumber 'transparent #t)
(make-grob-property-set 'NoteColumn 'ignore-collision #t)
;; obviously, this isn't equivalent to \once,
;; so could be changed if required
(make-grob-property-set 'Glissando 'thickness 2)
(add-glissando (select-note mus1 index))
(select-note mus2 index)))
'Bottom (symbol->string (gensym)))
'Staff))
(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
}
$(make-simultaneous-music
(map (lambda (x)
(add-glissando-line mus1 mus2 x))
(iota note-count)))
>>
\revert NoteColumn #'ignore-collision
#}))
\version "2.13.41"
\include "chord-glissando.ly"
% string numbers are necessary for TabStaff because automatic
% string calculations are different for chords and for single notes,
% and \chordGlissando works draws lines between single notes.
myMusic = {\chordGlissando <c\3 e\2 g\1>8 <f\3 a\2 c\1>}
\relative c' {
<<
\new Staff {
\new Voice {
\myMusic
}
}
\new TabStaff {
\new TabVoice {
\myMusic
}
}
>>
}