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
<orm.finnend...@selma.hfmdk-frankfurt.de>:
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,
Pierre
Below 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.
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user