Subject: Séparation automatique de voix sur plusieurs portées

From: Édouard Gilbert <[email-masked]>
Date: Tue, 10 Feb 2009 14:07:47 +0100

Bonjour,

Je m’amuse en ce moment à retranscrire des partitions d’orchestre de  
violoncelle pour saxophone. Certains passages de la partition  
originale comprennent trois et quatre voix, mais une ou deux sont la  
norme. Les partitions originales règlent le problème de l’occupation  
de la place de la manière suivante :

Si le passage compte une seule voix, ou deux voix très semblables  
(appelons ceci le mode A), les deux sont en général réunies en une  
seule portée.

Si le passage compte trois ou quatre voix, ou éventuellement deux  
voix fort distinctes (appelons ceci le mode B), elles sont réparties  
sur deux portées réunies par une accolade ou un symbole semblable.

Le nombre de portées n’est séparé qu’aux sauts de lignes. Ces sauts  
ne se font pas pour autant à des passages de mode A vers mode B. Il  
est possible par exemple de sauter de ligne un peu avant qu’un mode  
B, le mode A étant alors dupliqué sur deux portées.

Je me demandais s’il était possible d’automatiser un comportement  
similaire avec Lilypond, en précisant à la main les passages à  
répartir nécessairement sur deux portées mais en lui laissant la  
possibilité de dupliquer les voix si cela s’avère préférable pour le  
calcul des portées.

D’avance merci pour vos réponses éclairées,
Édouard

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Wed, 11 Feb 2009 00:57:53 +0100

>possibilité de dupliquer les voix si cela s’avère préférable pour le

Si ce sont des accords (genre : <c e g>), tu as la fonction : extractNote
donnée par ce snippet :
http://lsr.dsi.unimi.it/LSR/Item?id=545

Si ce sont des voix séparées, (genre :  music = << musicA \\ musicB>> ), 
j'utilise une fonction : extractVoice,
 que je n'ai pas encore mis sur le LSR, mais dont le code se trouve dans le 
fichier joint.
\extractVoice #1 \music  te donnera \musicA et
\extractVoice #2 \music  te donnera \musicB

Tu peux combiner ces 2 fonctions pour extraire par exemple toute la voix 
supérieure ou toute la voix inférieure, comme cela a été fait dans les 
fonctions
\extractPartUpper et \extractPartLower, ci-jointes également.
(Note : ces 2 fonctions supposent que les notes des accords ont été écrites 
de la plus grave à la plus aigu.
Si ce n'est pas le cas il faut réecrire ces fonctions).

Au pire tu peux diviser ta musique en tranche selon qu'il y a des accords ou 
des voix séparées, en utilisant
http://lsr.dsi.unimi.it/LSR/Item?u=1&id=542
(C'est la mise à jour de la fonction de la fonction \extractMusic de 
http://lsr.dsi.unimi.it/LSR/Item?id=531,  mais qui n'a pas été validée 
encore.
Pourtant elle est plus courte et marche dans plus de cas...)

Bonne découverte.

Gilles

---

From: Édouard Gilbert <[email-masked]>
Date: Thu, 12 Feb 2009 18:50:15 +0100

Le 11 févr. 09 à 00:57, Gilles THIBAULT a écrit :

> Si ce sont des voix séparées, (genre :  music = << musicA \\  
> musicB>> ), j'utilise une fonction : extractVoice,
> que je n'ai pas encore mis sur le LSR, mais dont le code se trouve  
> dans le fichier joint.
> Tu peux combiner ces 2 fonctions pour extraire par exemple toute la  
> voix supérieure ou toute la voix inférieure, comme cela a été fait  
> dans les fonctions
> (Note : ces 2 fonctions supposent que les notes des accords ont été  
> écrites de la plus grave à la plus aigu.
> Au pire tu peux diviser ta musique en tranche selon qu'il y a des  
> accords ou des voix séparées, en utilisant
> (C'est la mise à jour de la fonction de la fonction \extractMusic  
> de http://lsr.dsi.unimi.it/LSR/Item?id=531,  mais qui n'a pas été  
> validée encore.

Merci, tout ça m’a l’air intéressant dans l’optique de ce que je veux  
faire, mais je doute que cela suffise. Comme mes propos sont loin  
d’être clairs, je vous renvoie vers une illustration de mes  
objectifs : la partition de violoncelle de Peer Gynt, Suite N1 Opus  
46 de Grieg. Le fichier ci-dessous est passé dans le domaine public  
d’après le site qui la propose. J’espère que c’est bien le cas.

http://imslp.info/files/imglnks/usimg/6/62/IMSLP26381-PMLP02533- 
Grieg_-_Peer_Gynt_Suite_No1_Op46__cello-part_a.pdf

Dans le deuxième mouvement, les lignes 4 et 5 sont doublées, les  
violoncelles jouant trois voix à ce moment.
À partir de A, vers le milieu de la portée 5, ils recommencent à  
jouer à l'unisson. Toutefois, les deux portées demeurent distinctes  
jusqu’à la fin de la ligne. Je pense pouvoir reproduire le même  
comportement à la main. Grâce aux fonctions vers lesquels tu me  
diriges, je dois même pouvoir écrire la musique d’une traite avant de  
devoir gérer ces problèmes.

Mais si je laisse LilyPond se charger des changement de lignes de  
façon automatique les deux portées fusionneront à A, même si A se  
situe au milieu d’une ligne. Je ne peux pas forcer le passage de une  
à deux portées au changement de ligne effectif avant le calcul de ces  
changements.

Dans le cas présent, une solution serait :
	1) de préciser les changements de nombre de portées aux endroits où  
la musique l’impose
	2) de laisser LilyPond calculer les changement de ligne
	3) de déplacer à la main les changements de nombres de portées pour  
coller aux changements de ligne proposés par LilyPond (\extractMusic  
sera utile ici)
	4) d'espèrer que ces modifications ne changent pas la mise en page  
de LilyPond. Ce n’est probablement pas trop en demander, vu que la  
place sera de toute façon disponible.

Je me demandais s'il était possible d'automatiser l'étape 3. Mieux,  
s’il était possible d’influer sur l’étape 2 pour que l’étape 4 ne  
pose jamais problème.

Dans le sens inverse, (une mesure où il serait préférable de scinder  
les portées, mais le changement de ligne se faisant peu après, on  
tolère une mesure moins lisible et laisse les voix regroupées  
temporairement), l’étape 4), par contre, risque d’être plus difficile  
à passer.

Peut-être devrais-je me concentrer sur les problèmes simples avant de  
m’attaquer aux problèmes compliqués ?

Merci de vos suggestions en tout cas,
Édouard