Séparation automatique de voix sur plusieurs portées

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

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.

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

voiceUtil.ly (1.93 KB)

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

···

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

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.

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 \\ >> ), 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...)