|
From: | Urs Liska |
Subject: | Re: segmented glissando lines |
Date: | Mon, 12 Jan 2015 00:06:17 +0100 |
User-agent: | Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 |
Hi Harm, this is terrific! I'm about to collect a number of examples why LilyPond rocks for engraving contemporary music, and this should definitely be part of it. Best Urs Am 12.01.2015 um 00:00 schrieb Thomas
Morley:
2015-01-11 10:28 GMT+01:00 Orm Finnendahl <address@hidden>:Hi Pierre, Urs, that's excellent and very instructional, thanks! -- Orm Am Samstag, den 10. Januar 2015 um 23:56:03 Uhr (+0100) schrieb Pierre Perol-Schneider:Hi Orm, How about : \version "2.19.15" #(define (add-gliss m) (case (ly:music-property m 'name) ((NoteEvent) (set! (ly:music-property m 'articulations) (append (ly:music-property m 'articulations) (list (make-music (quote GlissandoEvent))))) m) (else #f))) addGliss = #(define-music-function (parser location music) (ly:music?) (map-some-music add-gliss music)) \relative c'' { \override Glissando.thickness = #2 \override Glissando.bound-details =#'( (right (attach-dir . 1) (padding . 0)) (left (attach-dir . 1) (padding . 0))) \override NoteHead.no-ledgers = ##t \addGliss { d,2 \omit Stem \override NoteHead.transparent = ##t f' d, f' e, g' d, f' } } Cheers, PierreBelow my own attempt. It has some advantages and limitations compared with Pierre's coding. There is one thing I have no clue about: If the function is applied to a dotted whole note some very strange things may happen and a warning is printed: "Loose column does not have right side to attach to." If someone has an idea how to fix, I'd love to hear it. (Look out for %% !!!!!!!!!!!!!!!!!!!!! if you want to test) \version "2.19.15" %#(use-modules (ice-9 pretty-print)) lengthen-gliss = #(define-music-function (parser loation nmbr)(number?) #{ \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods \once \override Glissando.minimum-length = #nmbr #}) fancy-gliss = #(define-music-function (parser location pts-list)(list?) #{ \once \override Glissando.after-line-breaking = #(lambda (grob) (let ((stil (ly:line-spanner::print grob))) (if (ly:stencil? stil) (let* ((left-bound-info (ly:grob-property grob 'left-bound-info)) (left-bound (ly:spanner-bound grob LEFT)) (y-off (assoc-get 'Y left-bound-info)) (padding (assoc-get 'padding left-bound-info)) (note-column (ly:grob-parent left-bound X)) (note-heads (ly:grob-object note-column 'note-heads)) (ext-X (if (null? note-heads) '(0 . 0) (ly:relative-group-extent note-heads grob X))) (dot-column (ly:note-column-dot-column note-column)) (dots (if (null? dot-column) '() (ly:grob-object dot-column 'dots))) (dots-ext-X (if (null? dots) '(0 . 0) (ly:relative-group-extent dots grob X))) (factor (/ (interval-length (ly:stencil-extent stil X)) (car (take-right (last pts-list) 2)))) (new-stil (make-connected-path-stencil (map (lambda (e) (cond ((= (length e) 2) (cons (* (car e) factor) (cdr e))) ((= (length e) 6) (list (* (car e) factor) (cadr e) (* (third e) factor) (fourth e) (* (fifth e) factor) (sixth e))) (else (ly:error "Some element(s) of the given list do not fit")))) pts-list) (layout-line-thickness grob) ;line-width 1 ;scaling 1 ;scaling #f #f))) (ly:grob-set-property! grob 'stencil (ly:stencil-translate new-stil (cons (+ (interval-length ext-X) (interval-length dots-ext-X) padding) y-off)))) (begin (ly:warning "Cannot find stencil. Please set 'minimum-length accordingly") #f)))) #}) #(display "\n\tLimitations: \t-Does not work with line-break \t-dotted notes with glissando may return a warning for unknown reasons, \t strange things may happen") %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXAMPLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \paper { indent = 28 } \header { title = "Fancy Glissando" } music = << \new Staff \with { instrumentName = "fancy-gliss " } \relative c' { \set Score.defaultBarType = #"" %% If spacing is very tight Glissando sometimes is omitted. %% Use 'lengthen-gliss' with an apropiate value in this case. %\lengthen-gliss #10 \fancy-gliss #'( (1 3) (2 0) (3 3) (4 1) (5 3.5) (6 0) (7 0 8 5 12 0) ) f1\glissando f1 } \new Staff \with { instrumentName = "skipping a column" } \relative c' { %\lengthen-gliss #10 \fancy-gliss #'( (1 3) (2 0) (3 3) (4 1) (5 3.5) (6 0) (7 0 8 5 12 0) ) %% !!!!!!!!!!!!!!!!!!!!! f1 %% change to f1. to view some strange things happen \glissando s1 f1 } \new Staff \with { instrumentName = "control-staff " } \relative c' { a'1 a1 a1 }\score { \transpose c b \music %% uncomment to let happen very tight spacing happen, use 'lengthen-gliss' then. % \layout { % line-width = 10 % } } \score { \music \layout { ragged-right = ##f } } Cheers, Harm attached two pngs, one with the intended out put, the other while using a dotted whole note. |
[Prev in Thread] | Current Thread | [Next in Thread] |