Bouclage du canal MIDI

Bonjour,

Je suis en train de saisir une partition de chœur à 8 voix, afin de
faire des fichiers MIDI pour l'apprentissage.

Lors de la compilation, je reçois les messages suivants :
Avertissement : Bouclage du canal MIDI
Avertissement : réaffectation modulo 16

En lisant

je découvre la chose suivante :
« La limite des 16 canaux s’applique au nombre total de portées augmenté
des contextes de paroles même si les paroles MIDI n’occupent pas de
canal MIDI. »

D'où ma question : comment exclure les contextes de paroles dans la
génération des fichiers MIDI ? J'ai essayé d'ajouter un \tag devant
le \addlyrics mais je n'ai pas réussi à trouver une syntaxe que
LilyPond accepte.

Cela dit, peut-être que mon idée d'exclure les contextes de paroles
n'est pas la bonne. Alors je reformule ma question : comment résoudre
le problème ?

Je ne donne pas mon fichier complet qui est très gros, mais en voici une
partie :

========================================================================
structurePart = \new Devnull \structure

choirPart = \new ChoirStaff <<
\new Staff \with {
midiInstrument = "choir aahs"
instrumentName = "SOPRANO 1"
shortInstrumentName = "S 1"
\RemoveAllEmptyStaves
} { \sopranoOne }
\addlyrics { \sopranoOneVerse }
\new Staff \with {
midiInstrument = "choir aahs"
instrumentName = "SOPRANO 2"
shortInstrumentName = "S 2"
\RemoveAllEmptyStaves
} { \sopranoTwo }
\addlyrics { \sopranoTwoVerse }

% (+ 6 autres voix et paroles)

\score {
<<
\structurePart
\choirPart

\layout { }
\midi {
\tempo 2=80
}
}

Cordialement,

Olivier Miakinen

Bonjour,
je n'ai pas encore testé mais as-tu essayé la séparations des canaux ainsi :

\midi {
    \context {
      \Staff
      \remove "Staff_performer"
    }
    \context {
      \Voice
      \consists "Staff_performer"
    }
  }

ha ben testé et non ça n'a aucun effet sur l'affectation, avec les Lyrics

Le 25/09/2026 à 17:21, MartialR a écrit :

ha ben testé et non ça n'a aucun effet sur l'affectation, avec les Lyrics

Je n'avais pas testé, merci de l'avoir fait pour moi. Au pire je
dupliquerai le fichier pour supprimer les lyrics dans la version
MIDI mais je suis toujours preneur d'une solution plus élégante.

Par exemple, est-ce qu'on peut forcer le canal MIDI de chaque partie
séparément ? Auquel cas je m'arrangerai pour que les canaux 0 à 7
soient attribués à la musique, le canal 10 allant à l'un des lyrics.

cette solution supprime le WARNING :
mais pas la réaffectation et bouclage réel dans le fichier midi.

#(ly:expect-warning "Bouclage du canal MIDI")
#(ly:expect-warning "réaffectation modulo 16")

\score {
  <<
  \new Staff { c'1 }
   \addlyrics { do }
  \new Staff { c'1 }
     \addlyrics { do }
    

  \new Staff { c'1 }
     \addlyrics { do }
  \new Staff { c'1 }
     \addlyrics { do }
      
  \new Staff { c'1 }
     \addlyrics { do }
  \new Staff { c'1 }
     \addlyrics { do }
      
  \new Staff { c'1 }
     \addlyrics { do }
  \new Staff { c'1 }
     \addlyrics { do }

 \new Staff { c'1 }
  \addlyrics { do }
  \new Staff { c'1 }
  \addlyrics { do }


  >>
  \layout { }
  \midi { }
}

A moins d'entrer dans le dur du code Lilypond
la solution est effectivement de supprimer les paroles dans la sortie midi

\score { %affichage partition pdf 
  <<
    \new Staff { c'1 }
    \addlyrics { do }
    \new Staff { c'1 }
    \addlyrics { do }


    \new Staff { c'1 }
    \addlyrics { do }
    \new Staff { c'1 }
    \addlyrics { do }

    \new Staff { c'1 }
    \addlyrics { do }
    \new Staff { c'1 }
    \addlyrics { do }

    \new Staff { c'1 }
    \addlyrics { do }
    \new Staff { c'1 }
    \addlyrics { do }

    \new Staff { c'1 }
    \addlyrics { do }
    \new Staff { c'1 }
    \addlyrics { do }
  >>
  \layout { }
}


\score { %sortie midi  
  <<
    \new Staff { c'1 }
    %\addlyrics { do }
    \new Staff { c'1 }
   % \addlyrics { do }


    \new Staff { c'1 }
   %\addlyrics { do }
    \new Staff { c'1 }
   % \addlyrics { do }

    \new Staff { c'1 }
    %\addlyrics { do }
    \new Staff { c'1 }
    %\addlyrics { do }

    \new Staff { c'1 }
    %\addlyrics { do }
    \new Staff { c'1 }
   % \addlyrics { do }

    \new Staff { c'1 }
   %\addlyrics { do }
    \new Staff { c'1 }
   % \addlyrics { do }
  >>
  \midi { }
}

Finalement ça semble fonctionner sans supprimer les \addlyrics, en
mettant juste un \tag à l'intérieur de chaque \addlyrics :

choirPart = \new ChoirStaff <<
  \new Staff \with {
    midiInstrument = "choir aahs"
    instrumentName = "SOPRANO 1"
    shortInstrumentName = "S 1"
    \RemoveAllEmptyStaves
  } { \sopranoOne }
  \addlyrics { \tag #'lyrics \sopranoOneVerse }

et :

\score {
  <<
    \structurePart
    \choirPart
  >>
  \layout { }
}

\score {
  <<
    \structurePart
    \removeWithTag #'lyrics \choirPart
  >>
  \midi {
    \tempo 2=80
  }
}

Je ne m'y attendais pas, parce que je pensais que cela créerait quand
même les 8 contextes de lyrics bien que vides.

ha ok j'avais testé le #tag mais mis bêtement avant

  \tag #'lyrics { \addlyrics {\sopranoOneVerse } }

Le 25/09/2026 à 18:35, MartialR a écrit :

ha ok j'avais testé le #tag mais mis bêtement avant

  \tag #'lyrics { \addlyrics {\sopranoOneVerse } }

Justement ce n'était pas bête du tout ! Ça me semblait le plus sûr moyen
de ne pas allouer un canal MIDI pour un \addlyrics, fût-il vide.

Mais en effet ça ne fonctionne pas.