lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Laissez vibrer sur un arpège


From: Jean-Baptiste
Subject: Re: Laissez vibrer sur un arpège
Date: Mon, 6 Jun 2022 10:00:00 +0200

Merci beaucoup pour ce «  bricolage », qui me dépasse un petit peu mais fait 
parfaitement l'affaire !

Jean-Baptiste.

> Le 5 juin 2022 à 20:14, Jean Abou Samra <jean@abou-samra.fr> a écrit :
> 
> 
> 
> Le 03/06/2022 à 12:51, Jean-Baptiste a écrit :
>> Bonjour à tous,
>> 
>> Je voudrais faire paraitre des laissez vibrer attachés à un arpège, comme on 
>> en voit parfois chez Ravel :
>> 
>> 
>> 
>> 
>> Pour cela j’ai utilisé des liaisons « tie » avec l’option :
>> 
>> \set tieWaitForNote = ##t
>> 
>> Et attachés à un un accord masqué :
>> 
>> J’ai deux problèmes :
>> 1. la liaison du si est plus courte parce que le la et le si sont de part et 
>> d'autre de la hampe. Pourrait-on écraser temporairement cette répartition, 
>> quitte à produire une collision, puisqu'elle est ici invisible ?
>> 2. J'aimerai faire la même chose pour les notes de la portée inférieure. Je 
>> n'arrive pas à le faire sur les deux portées, parce que je ne peux répartir 
>> l’accord vers lequel aboutissent les liaisons sur deux portées.
>> 
>> Si vous avez des solutions, même très différentes, ça m’intéresse…
>> 
>> Jean-Baptiste.
> 
> 
> 
> Bonjour,
> 
> Une solution bricolée à la va-vite…
> 
> 
> \version "2.22.2"
> 
> #(use-modules (ice-9 match))
> 
> multiLaissezVibrer =
> #(define-music-function (music) (ly:music?)
>    ;; hack, hack, hack ...
>    (let ( ;; should store these in a grob, not in a closure ...
>          (lvs '())
>          (right #f))
>      #{
>        \override LaissezVibrerTie.before-line-breaking =
>          #(lambda (grob)
>             (set! lvs (cons grob lvs)))
>        \override LaissezVibrerTie.X-extent = #empty-interval
>        \override LaissezVibrerTie.Y-extent = #empty-interval
>        \override LaissezVibrerTie.vertical-skylines = ##f
>        \override LaissezVibrerTie.after-line-breaking =
>          #(lambda (grob)
>             (let ((sys (ly:grob-system grob)))
>               (define (get-right lv)
>                 (+ (car (fourth (ly:grob-property lv 'control-points)))
>                    (ly:grob-relative-coordinate lv sys X)))
>               (if (not right)
>                   (set! right (apply max (map get-right lvs))))
>               (let* ((cpts (ly:grob-property grob 'control-points))
>                      (my-coord (ly:grob-relative-coordinate grob sys X))
>                      (my-left (+ my-coord (car (first cpts))))
>                      (my-right (+ my-coord (car (fourth cpts))))
>                      (scale (/ (- right my-left)
>                                (- my-right my-left)))
>                      (first-y (cdar cpts))
>                      ;; Ajuster ce nombre pour des liaisons plus ou moins 
> tassées.
>                      (magic-factor 0.25)
>                      (new-cpts (map (match-lambda
>                                      ((x . y)
>                                       (let* ((trx (+ x my-coord))
>                                              (new-trx (+ my-left (* scale (- 
> trx my-left))))
>                                              (new-x (- new-trx my-coord))
>                                              (new-y (+ first-y (* 
> magic-factor scale (- y first-y)))))
>                                         (cons new-x new-y
>                                               ))))
>                                     cpts)))
>                 (ly:grob-set-property! grob 'control-points new-cpts))))
>        #music
>        \revert LaissezVibrerTie.before-line-breaking
>        \revert LaissezVibrerTie.X-extent
>        \revert LaissezVibrerTie.Y-extent
>        \revert LaissezVibrerTie.vertical-skylines
>        \revert LaissezVibrerTie.after-line-breaking
>      #}))
> 
> lv = \laissezVibrer
> 
> voixA = \relative c' { \voiceOne <a' d f ( >2 b'2 ) }
> voixB = \relative c {
>     \mergeDifferentlyDottedOn
>     \mergeDifferentlyHeadedOn
>     \multiLaissezVibrer {
>       \change Staff = "down" \voiceOne b16_\lv f'_\lv b_\lv \change Staff = 
> "up"  \voiceTwo d_\lv f_\lv a_\lv b\lv d\lv
>     }
>     s4
>     <d fis> |
> }
> voixC = \relative c' {
>     \mergeDifferentlyDottedOn
>     \mergeDifferentlyHeadedOn
>     \voiceTwo b,2. gis4 }
> 
> \score {
>     \new PianoStaff {
>         <<
>             \new Staff = "up" {
>                 \clef "treble"
>                 <<
>                     \new Voice {\voixA}
>                     \new Voice {\voixB}
>                 >>
>             }
> 
>             \new Staff = "down" {
>                 \clef "bass"
>                 \new Voice {\voixC}
>             }
>         >>
>     }
>     \layout {}
> }
> 
> 
> 
> Cordialement,
> Jean
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]