Subject: \magnifyStaff non appliqué à Dynamics

From: Jean-Julien Fleck <[email-masked]>
Date: Tue, 19 Feb 2019 14:52:47 +0100

Bonjour,

Dans un précédent thread, on m'avait conseillé d'utiliser une variable
dédiée pour rajouter les nuances avec des silences invisibles (de
manière par exemple à reproduire les même nuances dans le fichier midi
sans qu'elles ne soient affichées). Je l'ai fait avec un "\new
Dynamics " stocké dans une variable qui est ajoutée à la ligne
courante via << ... >>. Le problème que j'observe à présent est qu'en
couplant cela avec \magnifyStaff pour rajouter le soliste sur la
partition piano, les nuances ne sont pas mise à l'échelle (voir mesure
2 de l'exemple) alors que si elles sont directement dans les notes,
elles le seraient (cf mesure 1).

Y a-t-il un moyen simple de circonvenir à ce problème sans sacrifier
la structure en variables séparées ?

Merci pour toute aide.

http://lilybin.com/si19fm/1

%%%%%%%%%%%%
\version "2.19.82"
\language "italiano"

solo = {do'1\p do'}

soloDyna   = \new Dynamics {s1 s1\f}

soloPart =   \new Staff \with {
    \magnifyStaff #5/7
  }
      <<\solo \soloDyna>>

 pianoPart = \new PianoStaff
   <<
     \new Staff \solo
     \new Staff {\clef bass \solo}

\score {
  <<
    \soloPart
    \pianoPart
}
%%%%%%%%%%%%%%%

-- 
JJ Fleck
Physique et Informatique
PCSI1 Lycée Kléber

---

From: Jean ABOU SAMRA <[email-masked]>
Date: Tue, 19 Feb 2019 18:33:26 +0100

Bonjour,
Tout le problème provient du \new Dynamics.
En écrivant
soloDyna = \new Dynamics { … }
et
soloPart = \new Staff << \… \soloDyna >>
vous avez l'impression que le contexte Dynamics est rattaché au contexte Staff.
En réalité, si je ne me trompe pas (des experts pourront confirmer), les deux contextes sont indépendants. Tout se passe comme si vous aviez écrit :
<<
	\new Staff { c'1 }
	\new Dynamics { s1 \p }
Les deux contextes ne sont donc pas reliés, l'un n'est pas inclus dans l'autre. En revanche, saisir les nuances directement dans la musique les rattache bien évidemment au contexte Staff en cours.
Donc, il n'y a aucune raison que le réglage \magnifyStaff du contexte Staff s'applique au contexte Dynamics. Démonstration : http://lilybin.com/r6sekl/2 <http://lilybin.com/r6sekl/2>
Le \dynamicUp ne s'applique bien qu'au contexte Staff car il est placé dans un \with accroché à la définition \new Staff.

Pour aligner les nuances, deux possibilités : les insérer au fil de la musique, ou les écrire à part dans un contexte Dynamics. La différence est que dans le deuxième cas, elles seront alignées sur leur propre ligne (http://lilypond.org/doc/v2.19/Documentation/notation/expressive-marks-attached-to-notes#dynamics <http://lilypond.org/doc/v2.19/Documentation/notation/expressive-marks-attached-to-notes#dynamics>).

La solution la plus évidente est donc de placer vos nuances dans Staff, comme vous l'avez fait pour le premier piano. Nul besoin de renoncer aux variables : ôtez simplement \new Dynamics et la variable sera une expression musicale. Ainsi le réglage est bien appliqué : http://lilybin.com/6yfxqd/2 <http://lilybin.com/6yfxqd/2>

Mais si vous tenez à l'alignement des nuances sur leur propre ligne… on est tenté d'écrire \new Dynamics \with { \magnifyStaff #5/7 } { … } mais cela ne fonctionne pas. Du travail pour les développeurs ?

Cordialement,
Jean Abou Samra.

> Le 19 févr. 2019 à 14:52, Jean-Julien Fleck <[email-masked]> a écrit :
> 
> Bonjour,
> 
> _______________________________________________
> liste de diffusion lilypond-user-fr
> [email-masked]
> https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

---

From: Valentin Villenave <[email-masked]>
Date: Tue, 19 Feb 2019 19:00:33 +0000

On 2/19/19, Jean-Julien Fleck <[email-masked]> wrote:
> en couplant cela avec \magnifyStaff pour rajouter le soliste sur la
> partition piano, les nuances ne sont pas mise à l'échelle

Comme son nom l’indique, la commande \magnifyStaff est destinée à
s’appliquer au contexte Staff. On peut d’ailleurs le voir dans la
définition de cette commande, dans le fichier
ly/music-functions-init.ly:
\set Staff.magnifyStaffValue = #mag

Du coup il faudrait réécrire cette fonction en lui demandant de
s’appliquer à un autre contexte, par exemple sous le nom
\magnifyDynamics. Ou encore, demander au contexte Dynamics d’appliquer
toutes les propriétés s’adressant au contexte Staff (par défaut, le
\alias pointe vers le contexte Voice, comme on peut le voir dans le
fichier ly/engraver-init.ly).

Ou bien (plus simple), on peut utiliser une autre fonction qui elle
s’applique à tous les contextes :

\new Dynamics \magnifyMusic #5/1 { s1 s1\f}

On 2/19/19, Jean ABOU SAMRA <[email-masked]> wrote:
> Les deux contextes ne sont donc pas reliés, l'un n'est pas inclus dans
> l'autre.

Ils pourraient l’être… si on le leur demande gentiment.

\layout {
  \context {
    \Staff
    \accepts Dynamics
  }
}

Par contre, du coup les Dynamics vont s’imprimer sur la portée (logiquement).

V.

---

From: Jean-Julien Fleck <[email-masked]>
Date: Wed, 20 Feb 2019 09:51:49 +0100

Merci Jean pour ces explications et Valentin pour les pointeurs vers
les définitions internes. Je comprends un peu mieux comment tout cela
fonctionne.
Ca manque encore un peu de pratique de ma part, mais c'est très
intéressant à découvrir.

Merci et à bientôt :o)

-- 
JJ Fleck
Physique et Informatique
PCSI1 Lycée Kléber