2012/8/24 Pierre Perol-Schneider <[email protected]>: > From: Pierre Perol-Schneider <[email protected]> > Date: 2012/8/24 > Subject: Re: guitar cluster > To: luis jure <[email protected]> > > > Hi Luis, > Well it's not that nice but it's readable : > > { > \time 1/4 > \clef "G_8" > << > { \once \override NoteColumn #'force-hshift = #0.8 > \once \override Stem #'stencil = ##f > e' } \\ > { <dis'\3 e'\2> } >>> > } > > hope that helps, > Pierre > > 2012/8/24 luis jure <[email protected]> >> >> >> hello list, this is a notation questions as well as about lilypond. >> >> i have to notate a three note cluster on the guitar: d# on the third >> string, e on the second (fifth fret) and e unison on the open first >> string. >> >> i would notate the unison e-e with two heads sharing the same stem, but >> i'm not sure where to place the d#. any suggestions? >> >> >> best, >> >> >> lj >> >> _______________________________________________ >> lilypond-user mailing list >> [email protected] >> https://lists.gnu.org/mailman/listinfo/lilypond-user > > > > > _______________________________________________ > lilypond-user mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/lilypond-user >
Perhaps via \splayedStemChord -> http://lists.gnu.org/archive/html/lilypond-user/2012-07/msg00336.html \version "2.15.39" #(define ((positioning-done l1 l2) grob) (if (< (ly:grob-property grob 'duration-log) 1) #f (let* ((nh (ly:grob-array->list (ly:grob-object grob 'note-heads))) (default-nh-x-width (interval-length (ly:stencil-extent (ly:note-head::print grob) X))) (accidental-grobs (map (lambda (x) (ly:grob-object x 'accidental-grob)) nh)) (sys (ly:grob-parent (ly:grob-parent (ly:grob-parent grob X) X) X)) (nh-ref-pts (map (lambda (x) (ly:grob-relative-coordinate x sys X)) nh)) (acc-ref-pts (map (lambda (x) (if (ly:grob? x) (ly:grob-relative-coordinate x sys X) #f)) accidental-grobs))) ;; note-heads (for-each (lambda (x y z) (ly:grob-translate-axis! x (* y z) X)) nh (iota (length nh)) l1) ;; accidentals (for-each (lambda (a b c d add) (if (null? a) #f (ly:grob-translate-axis! a (- (* b c) d default-nh-x-width add) X))) accidental-grobs (iota (length nh)) l1 acc-ref-pts l2))) 0.0) #(define (splayed-stem-stencil grob) (if (< (ly:grob-property grob 'duration-log) 1) #f (let* ((pc (ly:grob-parent (ly:grob-parent grob X) X)) (nc (ly:grob-parent grob Y)) (dir (ly:grob-property grob 'direction)) (half-space (* 0.5 (ly:staff-symbol-staff-space grob))) (thick (* (ly:grob-property grob 'thickness) (ly:staff-symbol-line-thickness grob))) (y1 (* half-space (ly:stem::calc-stem-begin-position grob))) (y2 (- (* half-space (ly:stem::calc-stem-end-position grob)) (* 2 thick))) (nh (ly:grob-array->list (ly:grob-object grob 'note-heads))) (x (ly:grob-relative-coordinate (car nh) pc X)) (first-nh-staff-pos (ly:grob-property (car nh) 'staff-position)) (targets-staff-pos (map (lambda (x) (ly:grob-property x 'staff-position)) nh)) (sorted-targets-staff-pos (sort targets-staff-pos <)) (beam (ly:grob-object grob 'beam)) (beam-corr (if (and (= dir -1) (ly:grob? beam)) -1 1)) (corr-add (if (and (>= first-nh-staff-pos (car sorted-targets-staff-pos)) (= dir 1)) (/ (- first-nh-staff-pos (car sorted-targets-staff-pos)) 2) (/ (- first-nh-staff-pos (car (reverse sorted-targets-staff-pos))) 2))) (stem-y-corr (map (lambda (x) (+ (/ (- x first-nh-staff-pos) 2) corr-add)) targets-staff-pos)) (stencil (apply ly:stencil-add (map (lambda (nh y) (let ((my-x (car (ly:grob-extent nh pc X)))) (make-line-stencil thick x (* beam-corr y2) my-x (+ y y1)))) nh stem-y-corr)))) stencil))) #(define (new-flag-stencil grob) (let* ((stil (ly:flag::print grob)) (stem (ly:grob-parent grob X)) (dir (ly:grob-property stem 'direction)) (thick (* (ly:grob-property stem 'thickness) (ly:staff-symbol-line-thickness grob))) (x-ext (ly:stencil-extent stil X)) (y-ext (ly:stencil-extent stil Y)) (line-stil (make-line-stencil thick (car x-ext) (car y-ext) (car x-ext) (cdr y-ext))) (new-stil (ly:stencil-translate-axis (ly:stencil-combine-at-edge stil X LEFT line-stil 0) (* dir (- (interval-length y-ext) (* 3 thick))) Y))) new-stil)) #(define (new-X-extent grob) ;; TODO Better spacing (let* ((x-ext (ly:grob-property grob 'X-extent))) (ly:grob-set-property! grob 'X-extent (cons (* 2 (car x-ext)) (* 2 (cdr x-ext)))))) splayedStemChord = #(define-music-function (parser location l1 l2 mus) (list? list? ly:music?) #{ \once \override Staff.Flag #'stencil = #new-flag-stencil \once \override Score.NoteColumn #'before-line-breaking = #new-X-extent \once \override Staff.Stem #'positioning-done = #(positioning-done l1 l2) \once \override Staff.Stem #'stencil = #splayed-stem-stencil \once \override Score.Script #'after-line-breaking = #(lambda (grob) (let* ((note-head (ly:grob-parent grob X)) (nc (ly:grob-parent note-head X)) (nh (ly:grob-array->list (ly:grob-object nc 'note-heads)))) (set! (ly:grob-parent grob X) (car nh)))) $mus #}) mus = \relative c { \splayedStemChord % Note-head-offsets. Note: elements are multipliers. #'(0 -1.6 1.4 ) % Accidental-offsets, elements are added to the calculated values. #'(0 0 0) <e' e dis>8 \splayedStemChord % Note-head-offsets. Note: elements are multipliers. #'(0 -1.6 1.2 ) % Accidental-offsets, elements are added to the calculated values. #'(0 0 -0.4) <e dis! d!>8 \splayedStemChord % Note-head-offsets. Note: elements are multipliers. #'(0 -1.6 1.3 ) % Accidental-offsets, elements are added to the calculated values. #'(0 -0.3 0) <e d! cis>8 \splayedStemChord % Note-head-offsets. Note: elements are multipliers. #'(0 -1.6 1.3 ) % Accidental-offsets, elements are added to the calculated values. #'(0 0.1 -0.3) <e cis! c!>8 <b c e>2 } << \new Staff { \clef "G_8" \mus } \new TabStaff \mus >> Best, Harm
<<attachment: cluster-test.png>>
_______________________________________________ lilypond-user mailing list [email protected] https://lists.gnu.org/mailman/listinfo/lilypond-user
