Timline pour musique de film

Bonjour,
Quelqu'un a-t-il déjà ajouté une time line (ou conductor stave) à son conducteur avec Lilypond?
J'avais déjà failli poser la question il y a un an quand j'avais découvert des conducteurs manuscrits de BO. A l'époque c'était pour le plaisir d'esthète et je n'ai pas voulu encombrer la liste avec ça. Aujourd’hui ça m'est imposé sur le conducteur que je dois éventuellement rendre.
Il s'agit donc d'inscrire sur une ligne les times codes (hh:mm:ss.ss) alignés sur les barres de mesures correspondantes en fonction du tempo indiqué. C'est souvent à chaque mesure mais l'espacement peut varier et ça peut n'être qu'à certains moments où la synchro est particulièrement importante.
Il faut aussi pouvoir réinitialiser la valeur calculée en cours de route (après un point d'orgue, un ralenti, etc.).
Et mettre de temps en temps une description sommaire de la scène au milieu de certaines mesures.
Je joins un exemple du règlement du concours que j'envisage de présenter si j'en ai le temps. Ca ressemble beaucoup à une ligne de percussion (je préfère de tirets verticaux sur les temps aux notes dessinées ici). Toute la difficulté est dans le calcul continu du temps écoulé en fonction du tempo.

Bonjour,
juste pour que vous ne vous sentez pas abandonné,
Il faudrait automatiser les changements de tempo, et avoir le temps 00.00.00
c'est un début de piste. Je sèche un peu sur le scheme.
Bon courage !

\version "2.24"
tQuatreVingt= #(/ 60.00 80.00)

Time =  #(+ 0.0400 (* 0.04 tQuatreVingt))

theTimeCode = #(number->string Time)
  
mTime= ^\markup\center-align \etc
TimeB=  #(+ 0.07 (* 0.07  tQuatreVingt))
theTimeCodeB = #(number->string TimeB)

rhytMic = {
  \clef percussion
  \hide TabNoteHead
  \hide NoteHead
  \override NoteHead.no-ledgers = ##t
  \override StaffSymbol.line-count = #1
  \stemDown
}



structure = {
 \tempo 4= 60 r1 \bar"||" 
  \tempo 4=80 
  r1 r1 
  r1 r1 
}

<<
  \new RhythmicStaff \with {  } {
    
    \new Voice = "myRhythm" \relative {
      \time 4/4
       \rhytMic
      
    <>\mTime"0.00" c4 c c c 
    
    c\mTime"0.04" c c c 
    c\mTime\theTimeCode
    c c c c 
    c\mTime\theTimeCodeB
    }
  }
  \new Staff { 
   R1 R1 R1 R1 
   
  }
 \new Devnull \structure
>>

J’avais vu passer ce thread intéressant sur la liste anglophone, mais peut-être que vous l’avez vu aussi?
A ce que je comprends cette approche est plutôt basée sur le midi

Bonjour,
Mais c'est parfait pour mesurer le temps
Merci Jean

#(define (Custom_engraver!! context)
   (define (format-time seconds)
     (let* ((minutes (euclidean-quotient seconds 60))
            (rest (euclidean-remainder seconds 60))
            (seconds (euclidean-quotient rest 1))
            (rest (euclidean-remainder rest 1)))
       (string-append (if (zero? minutes) "" (format #f "~a:" minutes))
                      (format #f "~a:~a" seconds (round (* rest 24))))))
   (let ((wholes-per-minute 15)
         (last-time ZERO-MOMENT)
         (total-time 0)
         (marks '()))
     (make-engraver
      ((process-music engraver)
       (let* ((new-time (ly:context-current-moment context))
              (time-delta (ly:moment-main (ly:moment-sub new-time last-time)))
              (new-wholes-per-minute
               (and=> (ly:context-property context 'tempoWholesPerMinute #f)
                      ly:moment-main)))
         (set! total-time
               (+ total-time (* 60 (/ time-delta wholes-per-minute))))
         (set! last-time new-time)
         (when new-wholes-per-minute
           (set! wholes-per-minute new-wholes-per-minute))))
      (acknowledgers
       ((text-mark-interface engraver grob source-engraver)
        (set! marks (cons grob marks))))
      ((process-acknowledged engraver)
       (for-each (lambda (grob)
                   (when (assq-ref (ly:grob-property grob 'details) 'time-mark)
                     (ly:grob-set-property! grob 'text (format-time
                                                        total-time))))
                 marks)
       (set! marks '())))))

\layout {
  \context {
    \Score
    \consists #Custom_engraver!!
  }
}

timeMark = \tweak details.time-mark ##t \tweak color "red" \textEndMark
"Abracadabra"

{
  \tempo 4 = 80 
  c' c' c' c'
  \timeMark
     \tempo 4 = 180 
  c' c' c' c'
  \timeMark
  \tempo 4 = 60
  \repeat unfold 60 c'4
  \timeMark
 
}

Houlà!
Je m'attendais à ce que la réponse ne soit pas simple mais là, il faut le niveau Champollion pour tout déchiffrer.
Déjà merci beaucoup, c'est super : même sans comprendre j'obtiens un affichage qui s'approche de ce que je cherche.
Je cherche à comprendre en me basant sur les langages que je connais.
Déjà le format n'est pas exactement comme en C, mais je pense que je dois pouvoir ajouter l'heure devant (les time codes commencent classiquement à 1:00:00.00; on m'a dit une fois que le premier chiffre correspondait historiquement au numéro de bobine).
Mais comment force-t-on la valeur du temps, que ce soit au début ou en cours de morceau? Je n'ai pas compris d'où sortait ZERO-MOMENT.
Ensuite, je comprends qu'il y a un tempo par défaut dans Lilypond à 60 à la noire puisqu'il arrive à sortir un time code en fin de première mesure avant toute indication de tempo?
Comment j'habille \timeMark (box autour, centré sur barre de mesure, etc.)?

Bonjour
plus proche du modèle :

\version "2.24"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%la fonction pour afficher le temps d'après Jean
#(define (Custom_engraver!! context)
   (define (format-time seconds)
     (let* ((minutes (euclidean-quotient seconds 60))
            (rest (euclidean-remainder seconds 60))
            (seconds (euclidean-quotient rest 1))
            (rest (euclidean-remainder rest 1)))
       (string-append (if (zero? minutes) "" (format #f "~a:" minutes))
                      (format #f "~a:~a" seconds (round (* rest 24))))))
   (let ((wholes-per-minute 15)
         (last-time ZERO-MOMENT)
         (total-time 0)
         (marks '()))
     (make-engraver
      ((process-music engraver)
       (let* ((new-time (ly:context-current-moment context))
              (time-delta (ly:moment-main (ly:moment-sub new-time last-time)))
              (new-wholes-per-minute
               (and=> (ly:context-property context 'tempoWholesPerMinute #f)
                      ly:moment-main)))
         (set! total-time
               (+ total-time (* 60 (/ time-delta wholes-per-minute))))
         (set! last-time new-time)
         (when new-wholes-per-minute
           (set! wholes-per-minute new-wholes-per-minute))))
      (acknowledgers
       ((text-mark-interface engraver grob source-engraver)
        (set! marks (cons grob marks))))
      ((process-acknowledged engraver)
       (for-each (lambda (grob)
                   (when (assq-ref (ly:grob-property grob 'details) 'time-mark)
                     (ly:grob-set-property! grob 'text (format-time
                                                        total-time))))
                 marks)
       (set! marks '())))))

\layout {
  \context {
    \Score
    \consists #Custom_engraver!!
  }
}


timeMark = \tweak details.time-mark ##t \tweak color "red" \textEndMark 
"Abracadabra"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% le format 
rhytMic = {
   \override Score.MetronomeMark.padding = #4
  \clef percussion
  \hide TabNoteHead
  \hide NoteHead
  \override NoteHead.no-ledgers = ##t
  \override StaffSymbol.line-count = #1
  \numericTimeSignature
  \stemDown
}



structure = {

 
 \tempo 4= 60 
  r1 \bar"||" 
  r1 \timeMark r1 
 % \tempo 4=120
  \timeMark
  r1 
  \time 3/4
   R2.
  \timeMark
  \tempo 4 = 180
  \time 4/4
  r1 r1
  \timeMark
}


<<
  \new RhythmicStaff
  \with {   } {
    
    \new Voice = "myRhythm" \relative {
      \rhytMic
     \time 4/4
    \tweak color "red" \textMark "0.0"
   \repeat unfold 8 {  c4  c c c  }

    }
  }
  \new Staff \relative { 
   R1 R1 R1 R1 
   R2. 
   R1 R1 R1
  }
 \new Devnull \structure
>>

Je n'arrive pas à mettre une position fixe du timeMark
mais ça approche un peu plus du modèle.

\version "2.24"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%la fonction pour afficher le temps d'après Jean
#(define (Custom_engraver!! context)
   (define (format-time seconds)
     (let* ((minutes (euclidean-quotient seconds 60))
            (rest (euclidean-remainder seconds 60))
            (seconds (euclidean-quotient rest 1))
            (rest (euclidean-remainder rest 1)))
       (string-append (if (zero? minutes) "" (format #f "~a:" minutes))
                      (format #f "~a:~a" seconds (round (* rest 24))))))
   (let ((wholes-per-minute 15)
         (last-time ZERO-MOMENT)
         (total-time 0)
         (marks '()))
     (make-engraver
      ((process-music engraver)
       (let* ((new-time (ly:context-current-moment context))
              (time-delta (ly:moment-main (ly:moment-sub new-time last-time)))
              (new-wholes-per-minute
               (and=> (ly:context-property context 'tempoWholesPerMinute #f)
                      ly:moment-main)))
         (set! total-time
               (+ total-time (* 60 (/ time-delta wholes-per-minute))))
         (set! last-time new-time)
         (when new-wholes-per-minute
           (set! wholes-per-minute new-wholes-per-minute))))
      (acknowledgers
       ((text-mark-interface engraver grob source-engraver)
        (set! marks (cons grob marks))))
      ((process-acknowledged engraver)
       (for-each (lambda (grob)
                   (when (assq-ref (ly:grob-property grob 'details) 'time-mark)
                     (ly:grob-set-property! grob 'text (format-time
                                                        total-time))))
                 marks)
       (set! marks '())))))

\layout {
  \context {
    \Score
    \consists #Custom_engraver!!
  }
}


timeMark =  {
  \tweak X-offset #-1.5
  \tweak details.time-mark ##t \tweak color "red"
  \textMark
  "Abracadabra" \mark \default
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\header {  }
\paper {
  top-margin = 20
  indent =  20
}
%mise en forme générale
\layout {
  \context {
    \Score
    \override MetronomeMark.padding = #14
    \override RehearsalMark.padding = #10
    % \override StaffGrouper.staff-staff-spacing.basic-distance = #15
  }
  \context {
    \Voice
    \override StaffGrouper.
    staffgroup-staff-spacing.basic-distance = #15
  }

}

% le format
rhytMicForme = {
  \clef percussion
  \hide TabNoteHead
  \hide NoteHead
  \override NoteHead.no-ledgers = ##t
  \override StaffSymbol.line-count = #1
  \numericTimeSignature
  \stemDown
}

Flute = \relative {
  R1 R1 R1 R1
  R2.
  R1 R1 R1
}

structure = {
  \set Score.rehearsalMarkFormatter = #format-mark-circle-numbers
  \tempo 4=72
  r1 \timeMark
  \bar"||"
  r1 \timeMark
  r1 \timeMark
  % \tempo 4=120
  r1  \timeMark
  \time 3/4
  R2. \timeMark
  \tempo 4 = 180
  \time 4/4
  r1 \timeMark
  r1 \timeMark
}

rythmBarre =\relative {
  \rhytMicForme
  \time 4/4
  \tweak color "red" \textMark "0.0"
  c4 c c c
  \repeat unfold 2 {  c4  c c c  }
  c c  c
  \repeat unfold 4 {  c4  c c c  }
}

descriptionText = {
  r1  \textMark\markup\bold\column{ \box"Underwater Scene"  \normal-text "X" }
  r1 r1 r1
  r4 r4
  \textMark\markup\bold\column{ \box"Landscape"  \normal-text "X" }
}

\score {
  <<
    \new RhythmicStaff
    \with { instrumentName = \markup\column{ "Hitpoints" "Click Track" }  }
    \new Voice = "myRhythm" \rythmBarre
        \new Lyrics { \descriptionText }
        \new  Devnull{ \structure }
    \new Staff \with { instrumentName = "Flute" }
    { \Flute }
  >>
  \layout { }
}
1 « J'aime »

C'est vrai qu'on approche.
Au niveau style, j'ai finalement opté pour laisser les têtes de notes avec
drumStyleTable = #percussion-style
et des mesures du genre
{\timeMark cab4 4 4 4}
que je multiplie avec unfold sauf si il faut une description de scène dedans

J'ai trouvé comment afficher mon time code en commençant par l'heure.

Il ne me manque plus que trouver comment forcer la valeur du premier moment et la reforcer en cours de route. Là, ça me dépasse totalement.

En implantant le code dans la "vraie" partition, je m'aperçois que le "Abracadabra" est nécessaire alors que je prenais ça pour un private joke.
Je veux bien qu'on m'explique.

la fonction textMark attends un du texte
textMark = \mark \markup "texte"

on peut mettre "?" à la place "Abracadabra"
Jean est joueur :slight_smile:

timeMark =  {
  \tweak X-offset #-1.5
  \tweak details.time-mark ##t \tweak color "red"
  \textMark
  "?"  \mark \default
}

OK. Donc il y a quelque part une astuce en langue de magicien pour remplacer ce texte par la valeur du time code.
Je me rends compte que j'ai un problème de priorité entre le time code et les reharsal marks. Il faudrait le time code au-dessus.

moi aussi je n'ai pas encore trouvé ;

Effectivement RehearsalMark a une valeur plus élevée de outside-staff-priority que TextMark (cf NR A.18), donc en cas de collision il se placera au-dessus.

Ajouter un \tweak outside-staff-priority #1600 dans le timeMark juste avant la commande \textMark.
Attention dans le code proposé par Martial il y a \override RehearsalMark.padding dans le bloc \layout qui court-circuite outside-staff-priority. Je remplacerais ces padding par outside-staff-padding (et une autre valeur).

Cordialement,
Xavier

ha je n'avais pas été au-dessus de 1000
je testerai demain
bonne nuit

Bonjour,
obtiens ceci maintenant.
Tout est aligné verticalement.

\version "2.24"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%la fonction pour afficher le temps d'après Jean
#(define (Custom_engraver!! context)
   (define (format-time seconds)
     (let* ((minutes (euclidean-quotient seconds 60))
            (rest (euclidean-remainder seconds 60))
            (seconds (euclidean-quotient rest 1))
            (rest (euclidean-remainder rest 1)))
       (string-append (if (zero? minutes) "" (format #f "~a:" minutes))
                      (format #f "~a:~a" seconds (round (* rest 24))))))
   (let ((wholes-per-minute 15)
         (last-time ZERO-MOMENT)
         (total-time 0)
         (marks '()))
     (make-engraver
      ((process-music engraver)
       (let* ((new-time (ly:context-current-moment context))
              (time-delta (ly:moment-main (ly:moment-sub new-time last-time)))
              (new-wholes-per-minute
               (and=> (ly:context-property context 'tempoWholesPerMinute #f)
                      ly:moment-main)))
         (set! total-time
               (+ total-time (* 60 (/ time-delta wholes-per-minute))))
         (set! last-time new-time)
         (when new-wholes-per-minute
           (set! wholes-per-minute new-wholes-per-minute))))
      (acknowledgers
       ((text-mark-interface engraver grob source-engraver)
        (set! marks (cons grob marks))))
      ((process-acknowledged engraver)
       (for-each (lambda (grob)
                   (when (assq-ref (ly:grob-property grob 'details) 'time-mark)
                     (ly:grob-set-property! grob 'text (format-time
                                                        total-time))))
                 marks)
       (set! marks '())))))

\layout {
  \context {
    \Score
    \consists #Custom_engraver!!
  }
}


timeMark =  {
  \tweak outside-staff-priority #1600
  \tweak X-offset #-1.5
  \tweak Y-offset #12
  \tweak details.time-mark ##t \tweak color "red"
  \textMark
  "Abracadabra" \mark \default
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\header {  }
\paper {
  top-margin = 20
  indent =  20
}
%mise en forme générale
\layout {
  \context {
    \Score
    \override MetronomeMark.padding = #17
    \override RehearsalMark.padding =#8
    \override RehearsalMark.outside-staff-padding = #2
    \override StaffGrouper.staff-staff-spacing.padding = 0
    \override StaffGrouper.staff-staff-spacing.basic-distance = 10
  }

  \context {
    \Voice
    \override StaffGrouper.
    staffgroup-staff-spacing.basic-distance = #0
  }
  \context {
    \Lyrics
    \override LyricText.outside-staff-padding = #100
  }
}

% le format
rhytMicForme = {
  \clef percussion
  %\hide NoteHead
  \override NoteHead.style = #'cross
  \override NoteHead.no-ledgers = ##t
  \override StaffSymbol.line-count = #1
  \numericTimeSignature
  \stemDown
}

Flute = \relative {
  R1 R1 R1 R1
  R2.
  R1 R1 R1
}

structure = {
  \set Score.rehearsalMarkFormatter = #format-mark-circle-numbers
  %\override Score.RehearsalMark.padding =#0
  \tempo 4=72
  r1 \timeMark
  \bar"||"
  r1 \timeMark
  r1 \timeMark
  % \tempo 4=120
  r1  \timeMark
  \time 3/4
  R2. \timeMark
  \tempo 4 = 180
  \time 4/4
  r1 \timeMark
  r1 \timeMark
}

rythmBarre =\relative {
  \rhytMicForme
  \time 4/4
  \tweak Y-offset #13 \tweak color "red" \textMark "0.0"
  c4 c c c
  \repeat unfold 2 {  c4  c c c  }
  c c  c
  \repeat unfold 4 {  c4  c c c  }
}

descriptionText = {
  r1  \textMark\markup\bold\column{ \box"Underwater Scene"  \normal-text "X" }
  r1  r1 r1
  r4 r4
  \textMark\markup\bold\column{ \box"Landscape"  \normal-text "X" }
}

\score {
  \new StaffGroup \with {
    \override StaffGrouper
    .staffgroup-staff-spacing
    .basic-distance = 30
  } <<
    \new RhythmicStaff
    \with { instrumentName = \markup\column{ "Hitpoints" "Click Track" }  }
    \new Voice = "myRhythm" \rythmBarre
    \new Lyrics { \descriptionText }
    \new  Devnull{ \structure }
    \new Staff \with { instrumentName = "Flute" }
    { \Flute }
  >>
  \layout { }
}

Cordialement

Ah oui, c'est pas mal.
Pour compléter, la fonction de calcul du time code en commençant par l'heure:

 (define (format-time seconds)
     (let* ((heures (euclidean-quotient seconds 3600))
            (resta (euclidean-remainder seconds 3600))
            (minutes (euclidean-quotient resta 60))
            (restb (euclidean-remainder resta 60))
            (seconds (euclidean-quotient restb 1))
            (restc (euclidean-remainder restb 1)))
       (string-append (format #f "~2,'0d:" heures)
                      (format #f "~2,'0d:" minutes)
                       (format #f "~2,'0d.~2,'0d" seconds (round (* restc 24))))))

Il ne reste plus qu'à trouver comment forcer la valeur du temps écoulé (et pour moi à trouver la source de l'erreur mentionnée dans le fil d'après et qui m'empêche actuellement de voir quoi que ce soit).

Comme j'en suis à programmer en Scheme sans complètement comprendre ce que je fais, je sollicite un peu d'aide.
J'initialise mon décalage dans ma variable de synchro:

synchro_A = \drummode {
  #(define time-origin 1)
  s1 % décompte
  %%%%%%%%%%%%%
  \timeMark
  cab4^\markup\bold\column{ \box "Underwater Scene"  \normal-text "X" }
    4 4 4
  \repeat unfold 2 {cab4 4 4 4}
  \timeMark

Normalement, la valeur que je voulais mettre était 3606, mais comme j'obtenais n'importe quoi, j'ai mis 1 pour essayer de comprendre le calcul.

J'ai modifié la fonction de Jean sur une seule ligne (de toutes façons, quand j'ai essayé de le faire ailleurs ça plantait):

(set! total-time
               (+ total-time time-origin (* 60 (/ time-delta wholes-per-minute))))

Je croyais juste ajouter mon décalage, ici 1.
Or, en fin de première mesure au lieu d'être à 2 +1, soit 3, je suis à 4, et trois mesures plus loin, au lieu d'être à 8 +1, soit 9, je suis à 22, comme si chacune des mesures valait 6.
En gros j'ai une progression géométrique là où je croyais avoir une progression arithmétique.
Si quelqu'un comprend ce que j'ai écrit...

Je pense qu'il faut définir un Timecode start, et tant qu'à faire des images pas seconde aussi...
Malheureusement je ne sais comment régler le Timecode start à l'image prêt, ça fonctionne à la seconde prêt seulement...
Et pareil pour les images par seconde, il arrive pourtant qu'il y ait des formats du type 29,76 ips...

\version "2.24"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%la fonction pour afficher le temps d'après Jean
#(define (Custom_engraver!! context)
  (define (format-time seconds)
     (let* ((heures (euclidean-quotient seconds 3600))
            (resta (euclidean-remainder seconds 3600))
            (minutes (euclidean-quotient resta 60))
            (restb (euclidean-remainder resta 60))
            (seconds (euclidean-quotient restb 1))
            (restc (euclidean-remainder restb 1)))
       (string-append (format #f "~2,'0d:" heures)
                      (format #f "~2,'0d:" minutes)
                       (format #f "~2,'0d.~2,'0d" seconds (round (* restc ips))))))
   (let ((wholes-per-minute 15)
         (last-time ZERO-MOMENT)
         (total-time timecode-start)
         (marks '()))
     (make-engraver
      ((process-music engraver)
       (let* ((new-time (ly:context-current-moment context))
              (time-delta (ly:moment-main (ly:moment-sub new-time last-time)))
              (new-wholes-per-minute
               (and=> (ly:context-property context 'tempoWholesPerMinute #f)
                      ly:moment-main)))
         (set! total-time
               (+ total-time (* 60 (/ time-delta wholes-per-minute))))
         (set! last-time new-time)
         (when new-wholes-per-minute
           (set! wholes-per-minute new-wholes-per-minute))))
      (acknowledgers
       ((text-mark-interface engraver grob source-engraver)
        (set! marks (cons grob marks))))
      ((process-acknowledged engraver)
       (for-each (lambda (grob)
                   (when (assq-ref (ly:grob-property grob 'details) 'time-mark)
                     (ly:grob-set-property! grob 'text (format-time
                                                        total-time))))
                 marks)
       (set! marks '())))))

#(define ips 24)
#(define timecode-start 10)

\layout {
  \context {
    \Score
    \consists #Custom_engraver!!
  }
}


timeMark =  {
  \tweak outside-staff-priority #1600
  \tweak X-offset #-1.5
  \tweak Y-offset #12
  \tweak details.time-mark ##t \tweak color "red"
  \textMark
  "Abracadabra" \mark \default
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\header {  }
\paper {
  top-margin = 20
  indent =  20
}
%mise en forme générale
\layout {
  \context {
    \Score
    \override MetronomeMark.padding = #17
    \override RehearsalMark.padding =#8
    \override RehearsalMark.outside-staff-padding = #2
    \override StaffGrouper.staff-staff-spacing.padding = 0
    \override StaffGrouper.staff-staff-spacing.basic-distance = 10
  }

  \context {
    \Voice
    \override StaffGrouper.
    staffgroup-staff-spacing.basic-distance = #0
  }
  \context {
    \Lyrics
    \override LyricText.outside-staff-padding = #100
  }
}

% le format
rhytMicForme = {
  \clef percussion
  %\hide NoteHead
  \override NoteHead.style = #'cross
  \override NoteHead.no-ledgers = ##t
  \override StaffSymbol.line-count = #1
  \numericTimeSignature
  \stemDown
}

Flute = \relative {
  R1 R1 R1 R1
  R2.
  R1 R1 R1
}

structure = {
  \set Score.rehearsalMarkFormatter = #format-mark-circle-numbers
  %\override Score.RehearsalMark.padding =#0
  \tempo 4=72
  \timeMark
  r1 \timeMark
  \bar"||"
  r1 \timeMark
  r1 \timeMark
  % \tempo 4=120
  r1  \timeMark
  \time 3/4
  R2. \timeMark
  \tempo 4 = 180
  \time 4/4
  r1 \timeMark
  r1 \timeMark
}

rythmBarre =\relative {
  \rhytMicForme
  \time 4/4
  \tweak self-alignment-X #CENTER \tweak color "red" \textMark ""
  c4 c c c
  \repeat unfold 2 {  c4  c c c  }
  c c  c
  \repeat unfold 4 {  c4  c c c  }
}

descriptionText = {
  r1  \textMark\markup\bold\column{ \box"Underwater Scene"  \normal-text "X" }
  r1  r1 r1
  r4 r4
  \textMark\markup\bold\column{ \box"Landscape"  \normal-text "X" }
}

\score {
  \new StaffGroup \with {
    \override StaffGrouper
    .staffgroup-staff-spacing
    .basic-distance = 30
  } <<
    \new RhythmicStaff
    \with { instrumentName = \markup\column{ "Hitpoints" "Click Track" }  }
    \new Voice = "myRhythm" \rythmBarre
    \new Lyrics { \descriptionText }
    \new  Devnull{ \structure }
    \new Staff \with { instrumentName = "Flute" }
    { \Flute }
  >>
  \layout { }
}

Super! Ca marche.
Pas sûr de tout comprendre mais ça fait le travail.
Et je ne suis pas obligé de forcer le nouveau décalage en dehors d'une seconde ronde.

Question, car je suis loin de comprendre tout ce qui se passe dans la fonction de Jean.
Est-ce qu'il y a un suivi continu du temps écoulé en interne à Lilypond ou dois-je penser à mettre un \timeMark à chaque changement de tempo pour que celui-ci soit pris en compte?