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

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

Re: Bonjour, Je suis nouveau et je m'interesse à Lilypond


From: Jean Abou Samra
Subject: Re: Bonjour, Je suis nouveau et je m'interesse à Lilypond
Date: Thu, 6 May 2021 14:14:01 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1


Le 06/05/2021 à 13:26, Vincent Gay a écrit :
Le 06/05/2021 à 10:14, Imperatrice Sissi a écrit :

Je vais donc répartir chaque système (nombre de mesures pas ligne) comme ça :

etc... Pur réflexe de jazzeux. Mais je suis d'accord, pour que ça tourne rond faut que ce soit carré !

en matière de répartitions des mesures par système il y a globalement 2,5 solutions ;
le \layout qui va bien :
\layout {
    \context {
      \Score
      \override NonMusicalPaperColumn #'line-break-permission = 
##f
      \override NonMusicalPaperColumn #'page-break-permission = 
##f
    }
  }

Dans tous les cas une bonne solution est de gérer les sauts de ligne et les sauts de page dans une voix séparée remplie de silences invisible. Pour plus d'info voir cette page
http://lilypond.org/doc/v2.22/Documentation/notation/explicit-staff-and-system-positioning

Pour ma part je suis même franchement plus extrémiste que toi. Sauf exception un phrase musicale de jazz fait 8 mesures (4 pour le blues). Du reste la forme AABA est souvent appelée Anatole 32. Le bloc de 4 marque alors la respiration naturelle du morceaux, comme la césure dans une poésie en alexandrins. Aussi bien dans l'interprétation du thème que pendant les chorus. Une ligne de portée doit donc correspondre à un bloc de 4 et s'il y a des reprises alternatives (ce que tu appelles des portes) elles doivent être sur la même ligne. Ce qui donnera par exemple :

| A | A | A | A |
          1------- 2------
| A | A | A | A :|| A | A||
| B | B | B | B |
| B | B | B | B ||
| A | A | A | A |
| A | A | A | A ||

S'il faut faire un choix entre ce principe ou tout tenir sur une seule page je privilégie sans hésiter le bloc de 4


Tu sais, il y a aussi ce bout de code posté un
jour par David Nalesnik :

\version "2.22.0"

#(define (expand-repetitions arg)
;; 4*5 --> 4 4 4 4 4
;; (at any level of nesting)
  (fold-right
    (lambda (elem prev)
            (cond ((pair? elem)
                   (cons (expand-repetitions elem) prev))
                  ((symbol? elem)
                   (let* ((str (symbol->string elem))
                          (split (string-split str #\*))
                          (split (map (lambda (elem) (string->number elem)) split)))
                     (append (make-list (cadr split) (car split))
                             prev)))
                  (else (cons elem prev))))
    '()
    arg))

#(define ((bars-per-line-systems-per-page-engraver lst) ctx)
  (let* ((bars-and-systems? (any pair? lst))
         (working-copy (expand-repetitions lst))
         (systems-per-page
           (if bars-and-systems?
               (car working-copy)
               #f))
         (last-measure-seen (ly:context-property ctx 'currentBarNumber))
         (last-measure-seen (if (null? last-measure-seen)
                                0
                                (1- last-measure-seen)))
         (total
           (if systems-per-page
               (+ (car systems-per-page) last-measure-seen 1)
               (+ (car working-copy) last-measure-seen 1))))
  `((stop-translation-timestep
      . ,(lambda (trans)
          (let ((internal-bar (ly:context-property ctx 'internalBarNumber))
                (current-col (ly:context-property ctx 'currentCommandColumn)))
            ;; we are only interested in the first NonMusicalPaperColumn of
            ;; each measure
            (if (and (> internal-bar last-measure-seen)
                     (= (remainder internal-bar total) 0)
                     (pair? working-copy))
                (begin
                  (set! (ly:grob-property current-col 'line-break-permission) 'force)
                  (set! last-measure-seen internal-bar)
                  (if bars-and-systems?
                      (begin
                        (if (null? (cdr systems-per-page))
                            (begin
                              (set! (ly:grob-property current-col 'page-break-permission) 'force)
                              (if (pair? (cdr working-copy))
                                  (begin
                                    (set! working-copy (cdr working-copy))
                                    (set! systems-per-page (car working-copy)))
                                  (set! working-copy '())))
                            (set! systems-per-page (cdr systems-per-page)))
                        (set! total (+ total (car systems-per-page))))
                      (begin
                        (if (null? (cdr working-copy))
                            (set! working-copy lst)
                            (begin
                              (set! working-copy (cdr working-copy))))
                              (set! total (+ total (car working-copy)))))))))))))

\layout {
  \context {
    \Score
    \consists #(bars-per-line-systems-per-page-engraver '((5*3) (20 10 20 10)))
  }
}

\repeat unfold 75 { c'1 }

Comme le montre la ligne du \consists, il suffit de
spécifier la liste des pages, avec pour chaque page
la liste du nombre de mesure que doit comporter chaque
système (et une syntaxe pratique), et le graveur fait le reste.

LilyPond peut effectivement insérer un retour supplémentaire
si elle juge que la musique est trop tassée, on peut
l'en empêcher avec le \override dont tu parles.

Par ailleurs, un outil plus général est l'Edition engraver
de Jan-Peter Voigt, qui permet d'insérer des commandes
n'importe où dans une partition en donnant un numéro
de mesure :

https://github.com/openlilylib/edition-engraver

Cordialement,
Jean


reply via email to

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