de la bonne façon de créer un divisi de violons

Bonjour,

Après avoir lu la page http://lilypond.org/doc/v2.23/Documentation/notation/modifying-single-staves#index-divisi_002c-portees (trouvée grâce à l'index que m'a signalé Jean et qui était trop en dessous du bas de mon écran pour que je le trouve tout seul), j'ai conclu que la façon la plus simple de lancer le divisi était de créer une portée d'ossia sur la période voulue.
Ca a très bien marché pour les premiers violons.

Je fais la même chose avec les seconds violons, qui partent en divisi au même endroit que les premiers et là, surprise:
Le divisi des premiers apparaît sous la portée des seconds (divisi du haut), suivi en dessous par le divisi bas des seconds.

A la réflexion, ce n'est pas étonnant puisque le \new Staff des divisi apparaît après la création des portées "simples" des deux pupitres de violons.

Je viens d'essayer de mettre chaque pupitre de violons dans un GrandStafff pour lui tout seul, mais le divisi enjambe quand même le voisin.

Là, je sèche...

Olivier

Bonjour,

Après avoir lu la page
http://lilypond.org/doc/v2.23/Documentation/notation/modifying-single-staves#index-divisi_002c-portees
(trouvée grâce à l'index que m'a signalé Jean et qui était trop en
dessous du bas de mon écran pour que je le trouve tout seul), j'ai
conclu que la façon la plus simple de lancer le divisi était de créer
une portée d'ossia sur la période voulue.

Bonjour,

Je n'arrive pas à la même conclusion et utilise pour mes divisi.le Keep_alive_together_engraver avec remove-layer et la propriété keepAliveInterfaces comme expliqué sur cette même page.
Le résultat est juste parfait.

Ca a très bien marché pour les premiers violons.

Je fais la même chose avec les seconds violons, qui partent en divisi au
même endroit que les premiers et là, surprise:
Le divisi des premiers apparaît sous la portée des seconds (divisi du
haut), suivi en dessous par le divisi bas des seconds.

Difficile de suivre sans exemple de code minimal.
Vous utilisez alignAboveContext (ou alignBelowContext) comme montré dans certains exemples sur cette même page ?

Cordialement,
Xavier

···

On Mon, 19 Dec 2022 at 16:54, Olivier CHARADE <****@****> wrote:

--
Xavier Scheuer <****@****>

Merci Xavier,

J'avais commencé par essayer cette méthode mais je n'étais arrivé à rien, sans doute parce que j'ai voulu l'appliquer directement à ma partition au lieu de commencer par recopier l'exemple pour jouer avec.

En partant de l'exemple, ça commence à ressembler et je comprends un peu plus ce que font les diverses commandes; je me demande quand même si ça peut vraiment répondre à ce que je veux faire.

Dans la "variation" ci-dessous sur l'exemple proposé, je vois que la portée supplémentaire du divisi apparaît dès le début du système où le divisi commence, alors que les mesures sont vides. Et ajouter un \break juste avant peut mal tomber selon ce qui précède.
A l'inverse, je voudrais que cette portée disparaisse de la même façon quand le pupitre redevient uni.
C'est ce qui m'avait fait basculer vers la portée d'ossia, avant que je ne rajoute le reste du quatuor en dessous. Je trouvais également plus intuitif de gérer deux portées au lieu de jouer à cache cache avec trois.

Je prends toutes les propositions

Olivier

\version "2.23.8"
\layout {
   short-indent = 2\cm
   indent = 3\cm
   \context {
     \Staff
     keepAliveInterfaces = #'()
   }
}

violIa = {
   \repeat unfold 48 { d'4 }
   \unset Staff.keepAliveInterfaces
   <d' g''>2
   \repeat unfold 14 { d'4 }
   \set Staff.keepAliveInterfaces = #'()
   \repeat unfold 24 { d'4 }
   \bar "|."
}

violIb = {
   \repeat unfold 48 { s4 }
   <g d'>2
   \repeat unfold 14 { g4 }
   \repeat unfold 24 { s4 }
   \bar "|."
}

\new StaffGroup \with { \consists Keep_alive_together_engraver } <<
   \new Staff \with {
     instrumentName = "Violins I"
     shortInstrumentName = "V I"
     \override VerticalAxisGroup.remove-layer = 2
   } \violIa
   \new Staff \with {
     instrumentName = "Violin I"
     shortInstrumentName = "V I"
     \RemoveAllEmptyStaves
     \override VerticalAxisGroup.remove-layer = 1
   } \violIa
   \new Staff \with {
     instrumentName = "Violin I"
     shortInstrumentName = "V I"
     \RemoveAllEmptyStaves
     \override VerticalAxisGroup.remove-layer = 1
   } \violIb

···

Le 19/12/2022 à 21:16, Xavier Scheuer a écrit :

On Mon, 19 Dec 2022 at 16:54, Olivier CHARADE <****@**** > <mailto:****@****>> wrote:
>
> Bonjour,
>
> Après avoir lu la page
> GNU LilyPond – Manuel de notation: 1.6.2 Modification de portées individuelles
> (trouvée grâce à l'index que m'a signalé Jean et qui était trop en
> dessous du bas de mon écran pour que je le trouve tout seul), j'ai
> conclu que la façon la plus simple de lancer le divisi était de créer
> une portée d'ossia sur la période voulue.

Bonjour,

Je n'arrive pas à la même conclusion et utilise pour mes divisi.le Keep_alive_together_engraver avec remove-layer et la propriété keepAliveInterfaces comme expliqué sur cette même page.
Le résultat est juste parfait.

> Ca a très bien marché pour les premiers violons.
>
> Je fais la même chose avec les seconds violons, qui partent en divisi au
> même endroit que les premiers et là, surprise:
> Le divisi des premiers apparaît sous la portée des seconds (divisi du
> haut), suivi en dessous par le divisi bas des seconds.

Difficile de suivre sans exemple de code minimal.
Vous utilisez alignAboveContext (ou alignBelowContext) comme montré dans certains exemples sur cette même page ?

Cordialement,
Xavier

--
Xavier Scheuer <****@**** <mailto:****@****>>

--
Olivier Charade
Directeur adjoint de la Division Technique de l'INSU pour le site de Meudon
Coordinateur technique RESIF
Responsable technique des parcs géophysiques de l'INSU
Division Technique de l'INSU
UAR 855 du CNRS
1 place Aristide Briand
92195 Meudon Cedex
France
téléphone: +33(0)1 45 07 51 82
cellulaire: +33(0)6 11 39 09 59
télécopie: +33(0)1 45 07 51 40

http://gpscope.dt.insu.cnrs.fr/

Merci Xavier,

J'avais commencé par essayer cette méthode mais je n'étais arrivé à
rien, sans doute parce que j'ai voulu l'appliquer directement à ma
partition au lieu de commencer par recopier l'exemple pour jouer avec.

En partant de l'exemple, ça commence à ressembler et je comprends un peu
plus ce que font les diverses commandes; je me demande quand même si ça
peut vraiment répondre à ce que je veux faire.

Dans la "variation" ci-dessous sur l'exemple proposé, je vois que la
portée supplémentaire du divisi apparaît dès le début du système où le
divisi commence, alors que les mesures sont vides. Et ajouter un \break

juste avant peut mal tomber selon ce qui précède.

Salut,

Oui mais non.
violIb doit contenir également les notes communes avec violIa (voir votre exemple adapté ci-dessous).
Si vous indiquez des silences invisibles (s4) la portée apparaîtra effectivement comme vide avant le divisi.

Pour moi il faut vraiment s'imaginer les musiciens dans l'orchestre : qui joue quoi.
Ainsi violIa reprend toutes les notes jouées par les musiciens assis à droite au pupitre de premier violon, violIb toutes les notes jouées par les musiciens assis à gauche au pupitre de premier violon.
Et les \unset Staff.keepAliveInterfaces et \set Staff.keepAliveInterfaces = #'() permettent juste de dire "ici c'est divisi (différentes portées)" ou "ici c'est unison (une seule portée)" et LilyPond se charge de compléter les débuts et fins de ligne avant et après le passage divisi.

A l'inverse, je voudrais que cette portée disparaisse de la même façon
quand le pupitre redevient uni.
C'est ce qui m'avait fait basculer vers la portée d'ossia, avant que je
ne rajoute le reste du quatuor en dessous. Je trouvais également plus
intuitif de gérer deux portées au lieu de jouer à cache cache avec trois.

Maintenant si on veut avoir des portées qui apparaissent en cours de ligne (mais je n'ai jamais vu cela dans une "vraie partition") on peut utiliser les portées d'ossia (avec alignAboveContext ou alignBelowContext comme dit précédemment).

%%%%
\layout {
short-indent = 2\cm
indent = 3\cm
\context {
\Staff
keepAliveInterfaces = #'()
}
}

violIa = {
\repeat unfold 48 { d'4 }
\unset Staff.keepAliveInterfaces
<d' g''>2
\set Staff.keepAliveInterfaces = #'()
\repeat unfold 14 { d'4 }
\repeat unfold 24 { d'4 }
\bar "|."
}

violIb = {
\repeat unfold 48 { d'4 }
\unset Staff.keepAliveInterfaces
<g d'>2
\set Staff.keepAliveInterfaces = #'()
\repeat unfold 14 { d'4 }
\repeat unfold 24 { d'4 }
\bar "|."
}

\score {
\new StaffGroup = "violinOneStaffgroup" \with {
\consists Keep_alive_together_engraver
} <<
\new Staff = "violinOneStaff" \with {
instrumentName = "Violins I"
shortInstrumentName = "V I"
\override VerticalAxisGroup.remove-layer = 2
} {
\violIa
}
\new Staff = "violinOneUpStaff" \with {
instrumentName = "Violin Ia"
shortInstrumentName = "V Ia"
\RemoveAllEmptyStaves
\override VerticalAxisGroup.remove-layer = 1
} {
\violIa
}
\new Staff = "violinOneDownStaff" \with {
instrumentName = "Violin Ib"
shortInstrumentName = "V Ib"
\RemoveAllEmptyStaves
\override VerticalAxisGroup.remove-layer = 1
} {
\violIb
}

}

%%%%

Cordialement,
Xavier

···

On Tue, 20 Dec 2022 at 09:04, Olivier Charade <****@****> wrote:

--

Xavier Scheuer <****@****>

Encore merci Xavier.
J'ai réussi à obtenir la présentation que je voulais et j'ai compris ce que faisait la solution proposée dans la documentation.
Suite à vos remarques j'ai exploré tout ce qui traînait comme conducteur chez moi et effectivement, la séparation en deux portées fait toujours toute la largeur de la page même si les voix sont identiques sur une partie de la ligne.
Du coup je bascule sur cette présentation-là.
Content d'avoir encore appris quelque chose.
Bonnes fêtes à tous,
Olivier

Bonsoir,
Il y a trois ans j'avais compris et aujourd'hui, en ayant l'impression de faire exactement pareil, ça ne fonctionne plus.
J'ai des divisi de violons 1 et de violoncelles. Mais au résultat, à part sur la première page, toutes les parties ont disparu (bois, cuivres, percu). Seules les parties de violon 1 et de violoncelles en divisi apparaissent. Celles non divisi sont absentes également.
J'arrive à faire réapparaître, partie par partie, les autres instrument en rajoutant le même \unset Staff.keepAliveInterfaces en début de voix, mais ça ne me paraît pas la meilleure idée.
Si quelqu'un a une idée...
Olivier

Bonjour
sans exemple c'est difficile de répondre
SI j'ai bien compris c'est un genre d'ossia que vous souhaitez ?
https://lsr.di.unimi.it/LSR/Item?id=125

%d'apres le message de décembre 2022
\version "2.23.8"
\paper  { systems-per-page = 3 }

\new StaffGroup
\with {
  % \remove "System_start_delimiter_engraver"
  \override SpanBar.glyph-name = #"!"
}
\relative c' {
  %  violIa
  \repeat unfold 9 { d4 d d d }
  <<
    {
      <d g'>2 d4 d
      \repeat unfold 3 {  d d d d }
    }
    % violIb (ossia)
    \new Staff \with {
      \remove "Time_signature_engraver"
      \remove "Clef_engraver"
    } 
    {
      <d g,>2 g,4 g
      \repeat unfold 3 {  g g g g  }
    } %fin %  violIb
  >>
  %  violIa suite
  \repeat unfold 6 { d' d d d  }
}

Cordialement

Non. Finalement j'avais opté pour votre première proposition dont j'avais effectivement constaté qu'elle était l'option prise dans les conducteurs que je possède.
Je viens de faire un extrait de la première pièce du book.
extrait.ly (11,3 Ko)
Je n'ai pas fini la mise au propre de l'import xml extrait de Logic mais ce problème m'empêche d'y voir clair pour continuer

1 « J'aime »

Bonjour, il faut mettre le réglage keepAliveInterfaces = #'() seulement dans les portées séparées du premier violon et du violoncelle, et pas globalement (ni même dans la portée des deux moitiés du premier violon ou violoncelle combinées). Ensuite, dans l'une des portées de violon, \unset Staff.keepAliveInterfaces (commande pour laquelle j'ai créé un raccourci \beginDivisi) pour démarrer une section en divisi et \set Staff.keepAliveInterfaces = #'() (\endDivisi) pour la terminer. extrait.ly (10,7 Ko)

Merci Jean, ça explique déjà pas mal de choses même si je ne comprends pas toute la magie qui se cache derrière les layers.
J'ai archivé votre version puis j'en ai introduit les éléments dans mon script d'origine. Là, rebelote, mes parties disparaissent après le endDivisi.
J'ai relu chaque ligne, changé les begin/endDivisi de partie, rien à faire.
J'ai voulu refaire un extrait de ma partition juste avec cette pièce et surprise, ça remarche.
J'ai alors remarqué que les exemples où ça marche, y compris votre version, n'utilisent pas vraiment le endDivisi car la dernière page commence sur la mesure avant ce dernier.
J'ai donc rajouté un score bidon derrière votre exemple, de façon à ce que le dernier système soit après le endDivisi, et le problème ré-apparaît:
divisi.ly (8,8 Ko)
J'ai loupé un truc ou il y a effectivement un problème?

Pour l'anecdote amusante, en jetant un œil distrait à ce titre, j'ai commencé par croire une seconde que c'était un verset de la Bible (évangile selon Saint Jean chapitre 26 verset 5071) avant de lire le texte…

Pour en revenir au sujet, il y a effectivement un problème, que je ne comprends pas bien (j'essaierai de m'y pencher demain). Au moins, en enlevant le \RemoveEmptyStaves dans le \context { \Staff ... } global vers le début, les portées supprimées à tort reviennent — le hic étant que les portées supprimées à raison car elles ne contiennent que des silences reviennent aussi.

Effectivement, en voulant incorporer un morceau d'explication à l'exemple que j'archivais, je me suis aperçu, en indiquant la source, du "parfum" biblique qu'ajoutait votre prénom; je me suis alors permis de le renforcer en utilisant le chiffre romain pour le mois.
Quand j'ai commencé ma carrière on parlait des gourous Unix, puis des moines Perl. Je n'ai pas entendu d'équivalent dans la sphère Lilypond. Cependant votre niveau de connaissance en la matière légitime cette marque de respect lorsqu'on vous cite :wink: