Thank you all for the help! I manage to do quite what I was lookin to... With the template of the vibrato:
%% https://raw.githubusercontent.com/mwitmer/LyUtil/master/ly/expressive_markings/vibrato.ly %% Original author: Mark Witmer %% Rewritten version by Harm I tweak the thiknes of the curve and I add a couple of lines to the variable that I find in another question %%% https://music.stackexchange.com/questions/42775/move-a-trill-into-the-stave so the Snake can get inside the staff. The where a couple of things I couldn't do. 1 - I couldn't find the way to start de curve from up to down. 2 - When the spanner arrive to a line break it's stops and do not continue as can be seen in the attached image. El lun., 8 de jul. de 2019 a la(s) 11:15, tdy lists ([email protected]) escribió: > Wow! > Thank!!!! > > I'll try to make something of all these! > I think Pierre's answer to Andrew is where I find the most acurate answer, > now I'll extract the fragment needed (ifI can manage), and put it inside > the staff... > Let's start tweaking!!! > > THANKS again! > > El lun., 8 de jul. de 2019 a la(s) 05:54, Andrew Bernard ( > [email protected]) escribió: > >> Hi Marcos, >> >> Here is what I use. I hope you may find it useful. The vibrato function >> modifies the trill spanner. >> >> Picture attached of real use in the piece I engraved (for 7 string >> guitar, but that's not really relevant). >> >> I do not recall where I got this from, but the author is acknowledged. >> The example along with the function code gives you lots of inspiration. >> Highly parameterised. >> >> Andrew >> >> %============================================== >> >> %\version "2.19.44" >> >> % vibrato.ly >> % Author: Mark Witmer >> >> % Sets the next trill spanner to draw a waveform with the provided >> wevelength >> % and amplitudes. The waveform will go from one amplitude to the next in a >> % linear fashion. >> >> vibrato = >> #(define-music-function (amplitudes wavelength) >> (list? number?) >> #{ >> \once \override TrillSpanner #'after-line-breaking = >> $(lambda (grob) >> (ly:grob-set-property! grob 'stencil (makevib grob amplitudes >> wavelength))) >> #}) >> >> #(define adjustvib #t) >> >> % Creates the postscript for one system of the vibrato marking >> #(define (make_ps no-sib? lbound xspan span-so-far amplitude-vector >> wavelength) >> (if (or (= xspan -inf.0) (= xspan +inf.0)) >> "" >> (let ((lbound >> (cond >> ((and (> span-so-far 0) adjustvib) >> (- lbound 18)) >> (no-sib? (+ lbound 1)) >> (else lbound))) >> (last >> (inexact->exact (floor (/ (+ span-so-far xspan) >> wavelength))))) >> (format >> #f "gsave currentpoint translate 0.15 setlinewidth newpath /x >> ~a def\nx 0.0 moveto\n ~a ~a" >> lbound >> (let make-curve >> ((current (inexact->exact (floor (/ span-so-far >> wavelength))))) >> (cond >> ((= current (vector-length amplitude-vector)) "") >> ((< (vector-ref amplitude-vector current) 0) "") >> (else >> (let ((current-ps >> (format >> #f " x ~a add ~a x ~a add ~a x ~a add 0.0 >> curveto\n/x x ~a add def\n" >> (exact->inexact (/ wavelength 3)) >> (vector-ref amplitude-vector current) >> (exact->inexact (* 2 (/ wavelength 3))) >> (- (vector-ref amplitude-vector current)) >> wavelength >> wavelength))) >> (if (= (+ current 1) last) >> current-ps >> (format #f "~a~a" current-ps >> (make-curve (+ 1 current)))))))) >> "stroke grestore")))) >> >> % Returns the width of a grob >> #(define (grob-width grob) >> (if (or (= (car (ly:grob-property grob 'X-extent)) -inf.0) >> (= (car (ly:grob-property grob 'X-extent)) +inf.0)) >> 0 >> (- (cdr (ly:grob-property grob 'X-extent)) >> (car (ly:grob-property grob 'X-extent))))) >> >> % Returns the number of ems already traversed by the grob's siblings in >> % previous systems >> #(define (width-up-to grob siblings count) >> (if (eq? (car siblings) grob) >> count >> (+ (+ count (width-up-to grob (cdr siblings) count)) >> (grob-width (car siblings))))) >> >> % Returns the total width of the individual grobs for each system that >> make up >> % the original grob >> #(define (calcfull siblings count) >> (if (eqv? (length siblings) 0) >> count >> (calcfull (cdr siblings) (+ count (grob-width (car siblings)))))) >> >> % Fills a vector of length len with linear interpolations between the >> values >> % found in amplitudes >> #(define (fill-amplitude-vector! amplitude-vector len current-index >> amplitudes) >> (if (> (length amplitudes) 1) >> (let ((start-amplitude (car amplitudes)) >> (end-amplitude (cadr amplitudes)) >> (start-index current-index) >> (end-index (+ current-index >> (inexact->exact >> (floor (/ (vector-length amplitude-vector) >> (- len 1))))))) >> (do ((n current-index (+ 1 n))) >> ((or (> n (+ start-index end-index)) >> (>= n (vector-length amplitude-vector)))) >> (vector-set! amplitude-vector n >> (exact->inexact >> (+ start-amplitude >> (* (/ (- n start-index) (- end-index start-index)) >> (- end-amplitude start-amplitude)))))) >> (fill-amplitude-vector! >> amplitude-vector len end-index (cdr amplitudes))))) >> >> % Makes the vector of amplitudes for the vibrato marking >> #(define (make-amplitude-vector amplitudes total-span wavelength) >> (let* ((current-start 0) >> (len (inexact->exact (floor (/ total-span wavelength)))) >> (amplitude-vector (make-vector len))) >> (if (> (length amplitudes) 1) >> (fill-amplitude-vector! >> amplitude-vector (length amplitudes) 0 amplitudes) >> (vector-fill! amplitude-vector (car amplitudes))) >> amplitude-vector)) >> >> % Creates a stencil that draws a sine wave for vibrato based on the >> provided >> % amplitudes and wavelength >> #(define (makevib grob amplitudes wavelength) >> (let* ((orig (ly:grob-original grob)) >> (siblings (if (ly:grob? orig) (ly:spanner-broken-into orig) >> '())) >> (span (ly:grob-property grob 'X-extent)) >> (xbeg (car span)) >> (xend (cdr span)) >> (xspan (- xend xbeg)) >> (total-span (if (eqv? (length siblings) 0) (- xspan 3) (- >> (calcfull siblings 0) 3))) >> (lbound (if (or (null? siblings) (eq? (car siblings) grob)) >> 0 (+ 14 (cdr (assq 'X (ly:grob-property grob >> 'left-bound-info)))))) >> (span-so-far (if (null? siblings) 0 >> (width-up-to grob siblings 0)))) >> (ly:make-stencil >> (list 'embedded-ps >> (make_ps (null? siblings) lbound xspan span-so-far >> (make-amplitude-vector amplitudes total-span wavelength) >> wavelength)) >> '(0 . 0) '(-0.7 . 0.5)))) >> >> vib = >> #(define-music-function (sizes) >> (list?) >> #{ >> \vibrato $sizes #0.7 >> #}) >> >> sVib = \startTrillSpan >> eVib = \stopTrillSpan >> >> %{ >> % Example: >> >> \relative c' { >> \time 4/4 >> \key d \major >> >> \vibrato #'(4 0 4) #1.5 c\startTrillSpan d e d c d e d c\stopTrillSpan >> >> \vibrato #'(1 6 2 1 3 7 4) #1 c\startTrillSpan d e d c d e d c d e d >> c d e d c d e d c d e d c d e d c d e d >> >> c d e d c d e d c d e d c d e d c d e d c d e d c d e d c d >> e\stopTrillSpan >> } >> >> \paper { >> ragged-right = ##f >> } >> >> \relative c' { >> \vibrato #'(4 .2 0) #1.2 c1\startTrillSpan c\stopTrillSpan >> } >> >> %} >> >> >> >> >> >> >> >> >> >> >> >> %============================================== >> >> _______________________________________________ >> 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
