Eviter la gravure des signatures et tonalités redondantes.

Bonsoir,

Je suis sur l'écriture d'une partition qui mixe plusieurs morceaux. Pour tester les arrangements sans devoir dérouler tout le morceau, j'ai chacun des morceaux du medley dans une partition dédiée, donc intégralement gravable en standalone.
Lorsque je veux tester le morceau en entier (et pour la gravure finale), j'ai un fichier maître qui se contente d'appeler par \include dans l'ordre les fichier de chaque morceau, et je construis donc la partition finale par "append" successifs.

Après avoir tâtonné pour trouver un fonctionnement adéquat, ça marche plutôt pas mal (si cela peut aider d'autres, je peux partager le concept), à une exception près (pour le moment, hein, je trouverai certainement d'autres peaux de banane plus tard): lorsque je passe d'un morceau à l'autre en version medley, Lilypond me regrave le contenu du global de chacun des morceaux, y compris si la signature et l'armure ne changent pas.

Je pense que je peux m'en sortir en définissant une constante
#(define engrave-mode "Medley")
ou
#(define engrave-mode "Standalone")

et en incluant ou excluant les commandes \key et \time selon la valeur de engrave-mode et ma connaissance des tonalités et signatures précédentes.

Le problème est que ça veut dire que je ne peux plus chaîner les morceaux à ma convenance, puisque je dois savoir si tonalité/signature change ou pas. Si je décide d'intervertir deux parties dans le fil du morceau, je dois reprendre et réadapter le chaînage des tonalités/signatures
Il serait plus satisfaisant, d'un point de vue conception, de pouvoir juste chaîner les morceaux et laisser le graveur encapsuler cette tâche.

D'où ma question: est-ce qu'il y a quelque part un mécanisme qui permet à Lilypond de n'afficher un changement de \key ou \time, même explicitement donné?
Comme ce mécanisme fonctionne très bien pour les accords (\set chordChanges), je me dis que, par cohérence, c'est peut-être le cas avec d'autres objets?

Merci, bonne soirée à tous!
Emmanuel

Bonjour,

Est-ce que quelqu'un a une idée?

Merci, bon après-midi,
Emmanuel

Bonsoir,
difficile de répondre sans des fichiers d'exemples .
quelques lignes suffirait plus 2 fichiers à inclure.

Cordialement

Voici 3 fichiers:
Le master qui inclut les 2 autres
Chaque fichier dependency[12].ly qui contient la structure et la voix d'un instrument témoin.

Le master agrège la voix instrumentale et la structure par l'inclusion successive des 2 fichiers.
Le résultat est donné dans l'image jointe.
Tout est à l'envers: :wink:

  • Le changement d'armure ne se fait pas (je sais qu'on est dans un Devnull mais bon, le résultat est ce qu'il est)
  • Le tempo est répété alors qu'il est identique
  • La signature est répétée alors qu'elle ne change pas.

Donc preneur d'idées s'il y en a.

Merci!

dependency1.ly (450 Octets)
dependency2.ly (465 Octets)
Example_Master.ly (311 Octets)

Ça n'existe pas, ça peut sûrement se faire en Scheme mais je n'en ai pas le temps, par contre si vous en avez vraiment besoin vous pourriez peut-être demander sur la liste anglophone.

Bonjour,

J'y arrive mais avec des compromis:

En mettant le \global dans instrument plutôt que dans structure, l'affichage du changement de l'armure se fait, mais cela oblige à mettre le global et autres changements d'armure dans toutes les voix.

Avec une simple condition scheme qui encadre le chiffrage et le tempo, on peut avec une variable déclencher ou non l'affichage de ces instructions, comme par exemple:

 #( if (not (defined? 'instrument)) #{\time 4/4 \tempo 4=100#} )

Mais ce n'est pas dynamique, il faut se poser la question avant chaque appel de dependency dans le master, si l'on veut ou non l'affichage de ces instructions.

Au plaisir,

Ben

ha je le torturais la tête sans parvenir à une solution potable.
Merci d'avoir répondu Jean !

Je mets cette réponse pour complétion pour ceux qui tomberaient dessus plus tard (j'ai déjà été aidé par des réponses passées, et j'ai apprécié les commentaires même postérieurs à la résolution elle-même)

Merci à tous pour votre réponse.

  • J'ai bien noté que la fonctionnalité n'existe pas de base. Pour autant je voudrais éviter d'avoir à me résoudre à multiplier le code. Je vais donc tenter l'approche suivante:
  • Vu que les fichiers que je crée peuvent exister soit en standalone soit en medley, je vais définir une variable globale time-tempo (@jeanas, je me suis repris pour écrire time-tempo plutôt que timeTempo :wink: ), voire deux variables (time et tempo si je veux être plus fin), et comparer l'état courant du morceau avec ce que je veux mettre.
    • Si elle est vide ou différente de ce que je veux faire, alors j'écris l'instruction.
    • Si elle contient déjà la valeur de ce que je veux mettre, je la saute (ce ne sera sans doute pas souvent, mais bon ce sera sans doute mieux que rien).
  • Et sans doute passerai-je par une fonction.

Qu'en pensez-vous?

Cela amènerait effectivement assez facilement le côté dynamique.

A noter que je trouve aussi très pratique de mettre une condition scheme avec l'instruction score dans chaque partie: cela permet de travailler directement sur la partie de manière autonome, et ensuite, quand elle est appelée dans une autre partition par un include, d'éviter que chaque partie continue de générer son score.

Au plaisir,

Ben