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

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

Re: Fonction pour Ambitus


From: yagloops
Subject: Re: Fonction pour Ambitus
Date: Mon, 29 Aug 2022 22:04:30 +0200

Un énorme merci Jean ! C’est magnifique…
En fait je disais que j’indique systématiquement l’ambitus et parfois dans certains cas une voix peut ne comporter qu’un seul son, ou voir aucun,  par exemple la voix de tenor ou d’alto ou de basse pour des pièces courtes …
Je comprends que ça n’est  pas très utile à beaucoup mais sait-on jamais… 
Encore tout mes remerciements et ma gratitude !!! Gilles 
Le 29 août 2022 à 20:02 +0200, Jean Abou Samra <jean@abou-samra.fr>, a écrit :
Le 28/08/2022 à 12:45, Ya Gloops a écrit :
Et dernière petite chose!
Si il n'y à qu'une note ou seulement un unisson, n'afficher qu'une note au lieu de deux...


J'étais déjà surpris de l'ambitus à deux notes, je suis encore plus surpris
de l'ambitus unisson, mais pourquoi pas après tout…

Voilà une version qui le fait. J'ai aussi corrigé des problèmes avec les
altérations.

Cordialement,
Jean




\version "2.23.12"

\layout {
  #(use-modules (ice-9 match)
                (srfi srfi-1))
  \context {
    \Staff
    \override Ambitus.before-line-breaking =
      #(lambda (grob)
         (let* ((elts (ly:grob-array->list (ly:grob-object grob
'elements)))
                (heads (filter (lambda (g)
                                 (grob::has-interface g
'note-head-interface))
                               elts)))
           (match heads
             (()
              #f)
             ((head1 head2)
              (let* ((p1 (ly:grob-property head1 'staff-position))
                     (p2 (ly:grob-property head2 'staff-position))
                     (diff (abs (- p1 p2))))
                (case diff
                  ((0)
                   (ly:grob-suicide! head2)
                   (for-each
                    (lambda (g)
                      (when (and (grob::has-interface g
'accidental-interface)
                                 (eq? head2 (ly:grob-parent g Y)))
                        (ly:grob-suicide! g)
                        (let ((placement (find (lambda (h)
(grob::has-interface h 'accidental-placement-interface))
                                               elts)))
                          (when placement
                            (let* ((accidental-grobs (ly:grob-object
placement 'accidental-grobs))
                                   (filtered (map (lambda (entry)
                                                    (cons (car entry)
                                                          (delete g
(cdr entry))))
accidental-grobs)))
                              (ly:grob-set-object! placement
'accidental-grobs filtered)))))
                      (when (eq? 'AmbitusLine (grob::name g))
                        (ly:grob-suicide! g)))
                    elts))
                  ((1)
                   (let* ((head-up (if (< p1 p2)
                                       head2
                                       head1))
                          (ext (ly:grob-extent head-up head-up X))
                          (len (interval-length ext)))
                     (ly:grob-translate-axis! head-up len X)))))))))
  }
}

\layout {
  \context {
    \Staff
    \consists Ambitus_engraver
  }
}


{ s }
{ c' }
{ cis' }
{ c' d' }
{ cis' dis' }
{ c' c'' }
{ cis' cis'' }


reply via email to

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