Eclater un conducteur en bouclant sur la liste d'instruments

Bonjour,

Je n'ai pas trouvé dans la documentation la réponse à mon problème; d'un autre côté, je suis surpris que ce point n'ait jamais été évoqué, donc désolé par avance si la réponse existe déjà:

J'aimerais, à partir d'une liste d'instruments, pouvoir boucler sur cette liste pour générer les books pour chaque instrument.
Ma liste d'instruments a une taxonomie systématique: chaque partie d'instrument se termine par Part, et chaque instrument est toujours nommé de la même manière. Donc tous les voyants sont aux verts au cas où je devrais passer par du Scheme. :wink:
Les options possibles pour moi seraient:

  1. De récupérer les variables lilypond qui se terminent par Part, boucler dessus en strippant le Part
  2. D'avoir une liste ad hoc d'instruments et de boucler dessus.

À partir de là, générer en boucle la chose suivante (je suppose que la liste est dans instrumentNamesList et qu'à chaque occurence de la boucle, le nom de l'instrument est stocké dans currentInstrumentName, et j'ai une variable globale pieceName qui donne le nom du morceau, commun à tous):

*Foreach* currentInstrumentName in instrumentNamesList *Do*
	\book {
		\bookOutputName #(string-append pieceName "_" (string-capitalize currentInstrumentName))
		\score {
			<<
				\structurePart
				\compressFullBarRests \{currentInstrumentName}Part
				\{currentInstrumentName}Dynamics
			>>
			\layout { }
			\midi {
				\context {
					\Score midiChannelMapping = #'instrument
				}
				\tempo 4=68
			}
		}
	}
*Done*

Encore une fois, je suis vraiment étonné que ça n'ait pas encore été fait.
Mais dans le cas contraire, est-ce que des Schemeurs pourraient me mettre sur la voie?

Merci, beaucoup, bon après-midi à tous,
Emmanuel

Salut,

Perso j'utilise un fichier par instrument pour les notes, un fichier pour le conducteur et un fichier par instrument pour les parties séparées (voir ici). Et je ne suis pas le seul. Donc pas de besoin de ce genre si on crée les fichiers soi-même.

Cordialement,
Xavier

Bonjour,

si on fait
instrumentA.ily et que
dans le fichier ily on fait des parties (A et B)
A_partA = { ma_musique1}
A_partB = { ma_musique2 }
etc.
idem avec instrumentB.ily

puis dans un fichier mes_compos .ly

\include "instrumentA.ily"  
\include "instrumentB.ily"   %etc. 

\bookpart  {  %ou book si on veux des fichiers séparés)
\bookOuputName = "Ma_Compos"
\header { title "conducteur"}
score {
<<
\new Staff {  \A_part1 \A_part2    }
\new Staff {  \B_part1 \B_part2   }
>>
}
}

\bookpart { %boucle sur la partie 2 du 2e instrument (B)
\header { title "B"}
\score {
\new Staff {  \B_part2  \B_part2 } 
}
}

etc. à sa convenance.
j'imagine qu'on peut effectivement faire des appels des parties en Scheme mais ça dépasse mes compétences.
une piste peut-être ici
https://lsr.di.unimi.it/LSR/Item?id=493

Cordialement

Merci beaucoup pour vos réponses et vos partages d'expérience! :slight_smile: C'est très intéressant.
Pour reprendre les mots de Xavier dans sa réponse en lien:

J'ai envie de répondre « fais ce qui t'arrange le mieux ».

Alors, prenant bonne note de cette suggestion, et pour enrichir la discussion, je partage ici la façon que j'ai de travailler:
1 J'ai un fichier pour ce que j'appelle les fragments: les parties qui se répètent (mélodie, contrechants, accompagnements, etc.), et que je peux distribuer à ma guise sur les voix.
2 Un fichier pour les notes, dans lequel je mets tous les instruments => J'aime avoir tout sous les yeux de ce point de vue. Je mets des repères (CTRL-B) pour naviguer rapidement.
3 Un fichier avec uniquement la dynamique de chacune des voix. À ce fichier j'adjoins un document tableur ("à la Excel/LibreOffice") dans lequel je positionne les éléments de dynamique: 1 ligne par voix, 1 colonne par mesure, une feuille de checks (qui vérifie que je mets bien le bon nombre de temps par mesure) et une feuille de "traduction" qui me sort les déclarations \new Dynamics de chaque instrument, au format Lilypond et que je ^C^V dans le fichier de dynamique. Cela permet de travailler d'une façon plus visuelle, sur la grille de mesures, avec le rendu pdf intermédiaire sur un autre écran.
4 Même chose pour les annotations: 1 fichier et une section dans mon tableur.
5 Un fichier dans lequel je déclare les parties et tout ce qui y est afférent: pour chaque instrument ou voix, je déclare une superposition des notes, de la dynamique et des annotations.
6 Enfin, j'ai un fichier-maître dans lequel j'ai:

  • Les définitions globales, les définitions de contexte propre à la partition, etc.
  • La partie de structure (celle qui va dans le DevNull)
  • Les includes
  • Les scores (ceux pour les partitions et/ou ceux pour le midi) => Notamment lorsque je dépasse 16 canaux sur une seule partition et que je me retrouve avec 2 instruments qui se marchent dessus, alors je crée 2 éléments score dans lesquels je distribue les voix pour faire 2 midi.

Je me suis fait un squelette qui reprend ces 6 fichiers, avec la liste des instruments, et des valeurs vides, que je peux donc instancier pour une nouvelle pièce.

J'essaye de donner à mes noms de variables une taxonomie systématique à laquelle je me tiens. Ce qui permet de faire des liens ou des tâches à partir de listes de clefs.

Je trouve personnellement ce système assez pratique pour travailler. Néanmoins, la génération des pdf est un peu fastidieuse, c'est pour cela que j'aimerais faire une fonction ad hoc pour boucler sur la liste des instruments et générer les fichiers à la volée.

C'est pour cela que si quelqu'un qui a joué au Petit Schemiste a une idée, je suis preneur!

Encore une fois, merci à vous pour la discussion et le partage de pratiques, c'est hyper intéressant!

Bonne soirée à tous,
Emmanuel

Le Scheme permet surtout de faire des fonctions qui manipulent directement le langage lilypond. Si vous cherchez plutôt à manipuler des fichiers ly et des compilations lilypond en pdf, il serait peut-être plus pertinent d'utiliser la ligne de commande lilypond dans un script système. Le script sera écrit dans un langage implémenté dans votre système et sera spécifique à votre organisation de vos fichiers.

Cépafô. :slight_smile:
Et en même temps, mon but est clairement de manipuler les éléments book de Lilypond. Donc je dirais que c'est à la frontière des 2, mais pouvoir l'avoir dans le source LP permet d'avoir tout au même endroit, et d'être agnostique sur l'OS utilisé (je suis sous W & Lx).

Vous avez des outils pour faire du shell-script sous windows, ce qui ferait du code portable.

Vous pouvez aussi le faire avec des scripts python, qui sont multi-plateformes. Et si vous utilisez frescobaldi, pas besoin d'installation supplémentaire de python, le code est directement interprété dans les fragments.

Si vous voulez du lilypond pur, il suffit de jongler avec variable et include:

Soit un fichier Notes.ly où le Staff de chaque instrument est enregistré dans une variable
Soit un fichier Graver.ly qui grave le staff d'une variable Partition avec un \bookpart

Vous écrivez le fichier Conducteur.ly ainsi:

\include "Notes.ly"
Partition = \PartitionViolonI \include "Graver.ly"
Partition = \PartitionViolonII \include "Graver.ly"
Partition = \PartitionViolonIII \include "Graver.ly"

\bookpart {
% Output pour le conducteur
}

Ce fichier Conducteur.ly affiche du coup également la liste de vos instruments avec juste un peu de code supplémentaire autour…

1 « J'aime »

Ah oui, c'est une très bonne idée, ça, merci! :+1:

J'ai trouvé une autre façon de m'en sortir, mais qui se complète très bien avec celle-ci: j'ajoute une feuille à mon tableur qui me génère automatiquement la liste des book, que je n'ai plus qu'à ^C^V dans mon source Lilypond.

Mais avec cette bonne idée, je peux aussi avoir quelques templates de book que je peux inclure à volonté.

Encore merci beaucoup! :pray:

Oui, c'est aussi une solution pratique: générer du code lilypond avec un outil que vous maitrisez.

Dans mon exemple, j'ai réalisé que j'ai oublié la variable du nom du pdf, si vous voulez un pdf par instrument:

Fichier = "Violon" Partition = \PartitionViolonI \include "Graver.ly http://graver.ly/"

1 « J'aime »