\partcombine ou \voiceThree

Bonjour,
Je souhaite obtenir différents layouts à partir de la même musique ; c'est-à-dire réutiliser les même variables contenant la définition des notes voix par voix, pour deux présentations différentes :
1 : SA / TB
2 : SAT / B (en fait : S1,S2,A / B où les T chantent avec les S)
Dans la version 2, il faut que les hampes de S et A (en fait : S1 et S2) soient vers le haut.
Quelle est la manière simple d'y parvenir ?
(j'ai essayé \voiceOne, \voiceThree et \voiceTwo dans la première \staff, de même que \partcombine, sans succès)
La manière compliquée serait d'écrire une fonction qui produirait, à partir de deux variables musicales, une nouvelle variable musicale, composée d'une suite d'accords de deux sons (ce que j'ai fait manuellement dans l'exemple "version 3"), et de l'utiliser en \voiceOne. Le challenge tente-t-il quelqu'un ?

Merci,
Germain

pj : "test-partcombine.ly" et "test-partcombine.png"

ps : j'ai volontairement laissé dans le source des paroles, des \transpose et une voix muette (\IBars) destinée à placer les barres de mesures (car "en vrai" j'utilise le snippet "free meter" de Rune Zedeler), pour rester au plus proche de mon projet.

pps : dans mon exemple, les deux voix ont le même rythme. Mais ce n'est pas forcément toujours le cas.

test-partcombine.ly (3.39 KB)

En remplaçant dans la version 2

\new Voice = "one" { \partcombine
\transpose c f \INotesDiscantus
\transpose c f \INotesCantus
}
\new Voice { \voiceTwo \transpose c f \INotesFiller }

par

\new Voice = "one" {\voiceOne <<
\transpose c f \INotesDiscantus
\transpose c f \INotesCantus >>
}
\new Voice { \voiceTwo \transpose c f \INotesFiller }

on obtient pareil que ton exemple 3.
J'ai essayé aussi avec

\new Voice = "one" { <<
{\voiceOne\transpose c f \INotesDiscantus }
{\voiceThree \transpose c f \INotesCantus} >>
}
\new Voice { \voiceTwo \transpose c f \INotesFiller }

ça marche aussi.

Gilles

Bonsoir

Un truc simple comme ça fonctionne

LilyPond hurle un peu :
Avertissement : trop de notes se chevauchent. On fera au mieux.

Mais ça passe

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.11.46"
\include "english.ly"
#(set-default-paper-size "a5")
%%===========================================================
IWords = \lyricmode { BI BA BI BE BO BE BU1.__ }
IGlobal = { \key c \major }

VoixA = \new Voice = "one" \relative c'{ \stemUp g'4 a g f e d c b c1 }
    
VoixB = \new Voice = "two" \relative c'{ \stemUp e4 f e d c b a gs a1 }

VoixC = \new Voice = "three" \relative c'{\stemDown c4 c c b c g a e a1}

Vbasse = \new Voice \relative c' { r4 r r r R1 R1 }
%%===========================================================
\score
{
  \new ChoirStaff
  <<
    \new Staff
      <<
       \clef "G"
       \transpose c f
      << \IGlobal
          \VoixA
          \VoixB
          \VoixC
      >>
  >>
  
  \new Lyrics = thewords { s }
  
  \new Staff
  <<
  \clef "F" \transpose c f { \IGlobal \Vbasse } >>
  
  \context Lyrics = thewords \lyricsto "one" { \IWords }
  >>
  \layout{ }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

re-test-partcombine.ly (1.01 KB)

re-test-partcombine.png

···

--
Martial

<<
Merci
beaucoup !

Germain

···

----- Original Message -----
From: Gilles THIBAULT
To: Germain G. Ivanoff-Trinadtzaty ; Lilypond French users
Sent: Monday, May 26, 2008 10:36 PM
Subject: Re: \partcombine ou \voiceThree

En remplaçant dans la version 2

\new Voice = "one" { \partcombine
\transpose c f \INotesDiscantus
\transpose c f \INotesCantus
}
\new Voice { \voiceTwo \transpose c f \INotesFiller }

par

\new Voice = "one" {\voiceOne <<
\transpose c f \INotesDiscantus
\transpose c f \INotesCantus >>
}
\new Voice { \voiceTwo \transpose c f \INotesFiller }

on obtient pareil que ton exemple 3.
J'ai essayé aussi avec

\new Voice = "one" { <<
{\voiceOne\transpose c f \INotesDiscantus }
{\voiceThree \transpose c f \INotesCantus} >>
}
\new Voice { \voiceTwo \transpose c f \INotesFiller }

ça marche aussi.

Gilles

Merci ; c'est bien l'emploi des << >> qui me manquait.
Je note aussi qu'on peut factoriser les \transpose, et surtout : VoixA !!!
Contient la déclaration de contexte, plus les données ! VoixA semble donc être une "macro symbolique", comme le "#define" du langage C. Je pensais que la syntaxe : id = { ... } se référait à une variable, et ne pouvait contenir que des données. (le cas de : id = \lyricmode {...} n'était pas pour moi un contre exemple ; j'y voyais seulement une déclaration de type). Très éclairant, merci.
Germain

···

----- Original Message ----- From: "Martial" <****@****>
To: <lilypond-user-fr@gnu.org>
Sent: Monday, May 26, 2008 11:14 PM
Subject: Re: \partcombine ou \voiceThree

Bonsoir

Un truc simple comme ça fonctionne

LilyPond hurle un peu :
Avertissement : trop de notes se chevauchent. On fera au mieux.

Mais ça passe

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.11.46"
\include "english.ly"
#(set-default-paper-size "a5")
%%===========================================================
IWords = \lyricmode { BI BA BI BE BO BE BU1.__ }
IGlobal = { \key c \major }

VoixA = \new Voice = "one" \relative c'{ \stemUp g'4 a g f e d c b c1 }

VoixB = \new Voice = "two" \relative c'{ \stemUp e4 f e d c b a gs a1 }

VoixC = \new Voice = "three" \relative c'{\stemDown c4 c c b c g a e a1}

Vbasse = \new Voice \relative c' { r4 r r r R1 R1 }
%%===========================================================
\score
{
\new ChoirStaff
<<
\new Staff
<<
\clef "G"
\transpose c f
<< \IGlobal
  \VoixA
  \VoixB
  \VoixC

\new Lyrics = thewords { s }

\new Staff
<<
\clef "F" \transpose c f { \IGlobal \Vbasse } >>

\context Lyrics = thewords \lyricsto "one" { \IWords }

\layout{ }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

--
Martial

--------------------------------------------------------------------------------

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.11.46"
\include "english.ly"
#(set-default-paper-size "a5")
%%===========================================================
IWords = \lyricmode { BI BA BI BE BO BE BU1.__ }
IGlobal = { \key c \major }

VoixA = \new Voice = "one" \relative c'{ \stemUp g'4 a g f e d c b c1 }

VoixB = \new Voice = "two" \relative c'{ \stemUp e4 f e d c b a gs a1 }

VoixC = \new Voice = "three" \relative c' { \stemDown c4 c c b c g a e a1 }

Vbasse = \new Voice \relative c' { r4 r r r R1 R1 }
%%===========================================================
\score
{
\new ChoirStaff
<<
\new Staff
<<
\clef "G"
\transpose c f
<< \IGlobal
  \VoixA
  \VoixB
  \VoixC
>>

\new Lyrics = thewords { s }

\new Staff
<<
\clef "F" \transpose c f { \IGlobal \Vbasse } >>

\context Lyrics = thewords \lyricsto "one" { \IWords }
>>
\layout{ }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

--------------------------------------------------------------------------------

_______________________________________________
liste de diffusion lilypond-user-fr
lilypond-user-fr@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-user-fr

Pour info, \lyricmode n'est pas une déclaration de type, pas plus que
VoixA est une macro symbolique ; les variables nommées id et VoixA dont
tu parles ont toutes les deux le même type Music (peut-être avec une
minuscule), qui est dans LilyPond un type Scheme tout comme string,
number, int... Pour t'en convaincre, tu peux tester si une variable
définie au préalable (attention à la lecture anticipée de l'analyseur
syntaxique) est du type Music avec la fonction Scheme ly:music?
et tu peux aussi voir comment peut-être construite cette musique en
Scheme. Voici un exemple qui rassemble tout (lorsque tu le compileras
avec LilyPond, tu n'auras pas de PDF, juste une sortie à l'écran ou dans
le fichier .log).

VoixA = \displayMusic \new Voice = "one" \relative c'{ \stemUp g'4 a g f e d c b c1 }
#0 %% idiotie permettant d'éviter un problème avec la lecture anticipée de l'analyseur
#(display (ly:music? VoixA))

Tu trouveras plus de détails dans l'essai sur la gravure, la
documentation, et surtout le code source !

Salutations lilyesques
John

···

Le mardi 27 mai 2008 à 00:12 +0200, Germain G. Ivanoff-Trinadtzaty a écrit :

Merci ; c'est bien l'emploi des << >> qui me manquait.
Je note aussi qu'on peut factoriser les \transpose, et surtout : VoixA !!!
Contient la déclaration de contexte, plus les données ! VoixA semble donc
être une "macro symbolique", comme le "#define" du langage C. Je pensais
que la syntaxe : id = { ... } se référait à une variable, et ne pouvait
contenir que des données. (le cas de : id = \lyricmode {...} n'était pas
pour moi un contre exemple ; j'y voyais seulement une déclaration de type).

Le mardi 27 mai 2008 à 00:12 +0200, Germain G. Ivanoff-Trinadtzaty a
écrit :

Merci ; c'est bien l'emploi des << >> qui me manquait.
Je note aussi qu'on peut factoriser les \transpose, et surtout : VoixA !!!
Contient la déclaration de contexte, plus les données ! VoixA semble donc
être une "macro symbolique", comme le "#define" du langage C. Je pensais
que la syntaxe : id = { ... } se référait à une variable, et ne pouvait
contenir que des données. (le cas de : id = \lyricmode {...} n'était pas
pour moi un contre exemple ; j'y voyais seulement une déclaration de type).

Pour info, \lyricmode n'est pas une déclaration de type, pas plus que
VoixA est une macro symbolique ; les variables nommées id et VoixA dont
tu parles ont toutes les deux le même type Music (peut-être avec une
minuscule), qui est dans LilyPond un type Scheme tout comme string,
number, int... Pour t'en convaincre, tu peux tester si une variable
définie au préalable (attention à la lecture anticipée de l'analyseur
syntaxique) est du type Music avec la fonction Scheme ly:music?
et tu peux aussi voir comment peut-être construite cette musique en
Scheme. Voici un exemple qui rassemble tout (lorsque tu le compileras
avec LilyPond, tu n'auras pas de PDF, juste une sortie à l'écran ou dans
le fichier .log).

Merci pour cette explication.

VoixA = \displayMusic \new Voice = "one" \relative c'{ \stemUp g'4 a g f e d c b c1 }
#0 %% idiotie permettant d'éviter un problème avec la lecture anticipée de l'analyseur
#(display (ly:music? VoixA))

Ooouiii... Je ne sais pas encore débrouiller tout le code que cela produit, mais j'entrevois que \displayMusic est un formidable outil pour apprivoiser scheme. La doc est succinte à ce sujet.

Merci,
Germain

···

----- Original Message ----- From: "John Mandereau" <****@****>