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
   }
 }
 >>
}



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/