Subject: Ecriture rythmique : note unique à ne pas transposer

From: Simon Martineau <[email-masked]>
Date: Mon, 6 Dec 2021 11:24:57 +0100

Bonjour à tous,

Je cherche à transposer une partition qui contient ponctuellement des \xNote pour des indications rythmiques.

D'habitude lorsque j'ai toute une portée de rythmes et que je souhaite que tous les rythmes soient placés sur la troisième ligne de la portée, j'utilise :

	\new Voice \with { \consists "Pitch_shash_engraver" }

Mais comment faire lorsqu'il n'y a qu'une note ponctuelle qui doit rester sur la troisième ligne, en particulier lorsque la portée entière doit être transposée pour d'autres instruments ?

Voilà mon exemple musical :

lead_ut = \relative c'' {
	\key c \major \numericTimeSignature \time 4/4
	c4 r8 \xNote b8 r2 c4 r8 \xNote b8 r2 fis'4 \tuplet 3/2 { f8 ees c } f ees c bes~bes2. r4
}

et je souhaiterais faire :

\score { <<
	{ \transpose c d \lead_ut }
	>> }

Sans que les notes marquées \xNote ne changent de ligne.

Est-ce que quelqu'un a la solution ?

Merci beaucoup !

Simon

-- 
https://www.simonmartineau.com/
+33 (0)6 17 94 06 72

---

From: "F. Moinard" <[email-masked]>
Date: Mon, 6 Dec 2021 18:31:57 +0400

Bonjour,

Proposition un peu lourdingue :

\version "2.23.5"

CroixSurSi = { \improvisationOn \xNote b8 \improvisationOff }

lead_ut = \relative c'' {
   \key c \major \numericTimeSignature \time 4/4
   c4 r8
   \CroixSurSi
   r2 c4 r8
   \CroixSurSi
   r2 fis'4 \tuplet 3/2 { f8 ees c } f ees c bes~bes2. r4
}

<<
   \new Staff  \new Voice \with {
     \consists "Pitch_squash_engraver"
   } { \lead_ut }

<<
   \new Staff  \new Voice \with {
     \consists "Pitch_squash_engraver"
   } { \transpose c e \lead_ut }

Cordialement,
Frédéric

On 06/12/2021 14:24, Simon Martineau wrote:
> D'habitude lorsque j'ai toute une portée de rythmes et que je souhaite 
> que tous les rythmes soient placés sur la troisième ligne de la 
> portée, j'utilise :
>
> Mais comment faire lorsqu'il n'y a qu'une note ponctuelle qui doit 
> rester sur la troisième ligne, en particulier lorsque la portée 
> entière doit être transposée pour d'autres instruments ?
>
>     >> }

---

From: Gilles Thibault <[email-masked]>
Date: Mon, 06 Dec 2021 15:38:03 +0100

> Sans que les notes marquées \xNote ne changent de ligne.

Bonjour.
Il y a une propriété 'untransposable qu'on peut mettre à #t
J'ai essayé sans succès avec \tweak, donc j'ai fait là de la manière où 
j'ai le plus l'habitude (en scheme) et en redéfinissant \xNote.

%%%%%%%%%%%%%

\version "2.22.0"

xNote = #(define-music-function (music) (ly:music?)
    (ly:music-set-property! music 'untransposable #t)
    #{ \xNotesOn #music \xNotesOff #})

lead_ut = \relative c'' {
     \key c \major \numericTimeSignature \time 4/4
     c4 r8 \xNote b8 r2 c4 r8 \xNote b8 r2
     fis'4 \tuplet 3/2 { f8 ees c } f ees c bes~bes2. r4
}

\score { <<
     \new Voice
       { \lead_ut }
     \new Voice

%%%%%%%%%%%%

-- 
Gilles

---

From: Simon Martineau <[email-masked]>
Date: Mon, 6 Dec 2021 23:27:00 +0100

Bonsoir,

Merci beaucoup pour vos réponses, je vais garder la solution de Gilles qui me convient parfaitement !

Simon

On Mon, Dec 06, 2021 at 03:38:03PM +0100, Gilles Thibault wrote:
>J'ai essayé sans succès avec \tweak, donc j'ai fait là de la manière 
>où j'ai le plus l'habitude (en scheme) et en redéfinissant \xNote.
>
>%%%%%%%%%%%%%
>
>\version "2.22.0"
>

---

From: Jean Abou Samra <[email-masked]>
Date: Tue, 7 Dec 2021 12:51:46 +0100

Bonjour,

> Il y a une propriété 'untransposable qu'on peut mettre à #t

Bien vu ! Je ne connaissais pas du tout
cette propriété.

> où j'ai le plus l'habitude (en scheme) et en redéfinissant \xNote.

C'est normal que \tweak ne marche pas, car
\tweak définit les propriétés des objets graphiques,
et pas celles des expressions musicales, qui sont
modifiées quant à elles avec \withMusicProperty.
On pourrait donc réécrire le code ainsi :

xNote = \withMusicProperty untransposable ##t \xNote \etc

Cordialement,
Jean

---

From: Gilles Thibault <[email-masked]>
Date: Wed, 08 Dec 2021 02:59:49 +0100

> xNote = \withMusicProperty untransposable ##t \xNote \etc

Ah bravo, c'est à ce genre de concision que je voulais arriver... 
J'avais oublié cette commande \withMusicProperty !
Bon, j'avoue que c'est assez facile d'être perdu dans toutes ces 
commandes de changements de
propriétés :
   \override,
   \tweak,
   \overrideProperty,
   \propertyOverride (ben oui...),
   \propertyTweak
   \withMusicProperty
   (Bon j'en passe...)

Je vais résumer ce que j'ai compris pour l'instant, en me référant aux 3 
catégories d'objets décrites ici :

http://lilypond.org/doc/v2.22/Documentation/internals-big-page.html#top

Pour modifier une propriété d'un objet, il faut utiliser :
    1- music expression         : \withMusicProperty
    2- contexts                 : \set
    3- objets graphiques (grob) : \override ou \tweak ou même 
\overrideProperty pour certain objets comme NonMusicalPaperColumn (je 
n'ai pas trouvé la liste des autres grobs comme NonMusicalPaperColumn)

Dans l'exemple ci-dessous, untransposable fait partie des propriétés des 
objets de la 1ère catégorie, et la modification de propriété empêche 
bien le do d'être transposé car c'4 est un NoteEvent, objet appartenant 
à la 1ère catégorie. :

   \transpose c d {
     \withMusicProperty untransposable ##t
     c'4   }

Pour \propertyOverride et \propertyTweak, je n'ai pas trouvé d'exemple 
d'utilisation dans la doc. Probablement très peu utilisés.

Voilà
N'hésitez pas à modifier/compléter.
À bientôt.

-- 
Gilles

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 8 Dec 2021 09:25:38 +0100

Le 08/12/2021 à 02:59, Gilles Thibault a écrit :
> Je vais résumer ce que j'ai compris pour l'instant, en me référant aux 
> 3 catégories d'objets décrites ici :
>

Essentiellement NonMusicalPaperColumn et PaperColumn. La raison
en est technique. En général, les développeurs aujourd'hui
essaient de se débrouiller pour que \override fonctionne,
si bien que \overrideProperty n'est plus utile souvent à
part pour ces deux objets.

>
> Dans l'exemple ci-dessous, untransposable fait partie des propriétés 
> des objets de la 1ère catégorie, et la modification de propriété 
> empêche bien le do d'être transposé car c'4 est un NoteEvent, objet 
> appartenant à la 1ère catégorie. :
>
>   \transpose c d {

\propertyOverride fait exactement la même chose que
\override, il n'y a juste pas de signe « égale »
entre la propriété et la valeur. Cette fonction
est surtout utile en Scheme, appelée comme une
fonction Scheme ordinaire (par exemple :
« $(propertyOverride '(NoteHead color) "red") »).
En effet, \override ne peut pas être appelée de
cette manière car elle est implémentée comme un mot
réservé dans l'analyseur syntaxique et pas comme
une fonction musicale (justement à cause du signe
« = »). Il existe de même \propertyRevert, \propertySet
et \propertyUnset.

Enfin, \propertyTweak est souvent utilisée, mais
plutôt en interne : c'est la commande qui se cache
derrière un certain nombre d'autres commandes qui
prennent deux formes, par exemple \shape. On peut
écrire un \shape comme un \override :

   \shape #'(...) Tie
   c'1~

ou bien comme un \tweak :

   c'1\shape #'(...) ~

\propertyTweak fonctionne donc selon les deux syntaxes

   \propertyTweak propriété valeur [NomDuContext.NomDuGrob]

et

   \propertyTweak propriété valeur [expression musicale]

Elle se comporte comme un \override ou comme un
\tweak, selon la syntaxe.

J'espère que ceci clarifie les choses.

Cordialement,
Jean

---

From: Gilles Thibault <[email-masked]>
Date: Sat, 11 Dec 2021 13:08:21 +0100

> J'espère que ceci clarifie les choses.

Un grand merci Jean.
J'ai sauvegarder ton message pour pouvoir y revenir à tout moment.
Tout est effectivement beaucoup plus clair.
J'ai mis du temps à répondre car je me demandais s'il n'y avait pas lieu 
de clarifier aussi la doc.

Dans le chapitre 5 ("Modification des réglages prédéfinis") de la 
version 2.22
( lilypond.org/doc/v2.22/Documentation/notation-big-page.fr.html ), on 
peut lire :

"
Les commandes \set et \unset permettent de modifier les valeurs des 
propriétés de contexte. Les commandes \override et \revert permettent de 
modifier les valeurs des propriétés des objets graphiques.
"
On ne pourrait pas rajouter un mot ici sur \withMusicProperty pour les 
expressions musicales ? Il s'agit bien ici aussi, de modifier des 
réglages prédéfinis. À moins que je ne me trompe,  on ne parle de ce mot 
clef, que dans l'annexe (liste des fonctions).
Elle me semble aussi fondamentale que \set \override ou \tweak. Qu'est 
ce que vous en pensez ?

-- 
Gilles

---

From: Jean Abou Samra <[email-masked]>
Date: Sat, 11 Dec 2021 21:17:51 +0100

Bonjour Gilles,

Le 11/12/2021 à 13:08, Gilles Thibault a écrit :
> J'ai mis du temps à répondre car je me demandais s'il n'y avait pas 
> lieu de clarifier aussi la doc.
>
> propriétés de contexte. Les commandes \override et \revert permettent 
> de modifier les valeurs des propriétés des objets graphiques.
> "
> réglages prédéfinis. À moins que je ne me trompe, on ne parle de ce 
> mot clef, que dans l'annexe (liste des fonctions).

C'est vrai que la documentation pourrait mentionner
\withMusicProperty quelque part dans le texte principal.
D'ailleurs, toute cette section a besoin d'une cure
de jouvence, c'est l'objet de
https://gitlab.com/lilypond/lilypond/-/issues/5978

Il est certain que les propriétés des expressions
musicales sont fondamentales dans l'architecture
interne de LilyPond. Par contre, du point de vue
de l'utilisateur, \withMusicProperty m'a toujours
parue anecdotique. J'ai mis longtemps à la découvrir,
et je ne m'en suis pratiquement jamais servi
(tu me diras, je ne me sers pas souvent de LilyPond
si on exclut le développement, mais tout de même…).
Au cours du processus de compilation d'une partition,
LilyPond complexifie grandement l'entrée qui lui est
passée. Par exemple, elle ajoute des barres de
mesure, des clés automatiques, s'occupe de l'espacement,
etc. Il y a un grand nombre de paramètres associés
à cela, et il semble logique que \override soit
donc une commande importante car on ne va pas se
mettre à ajouter des fonctions dédiées pour toutes
les retouches possibles, \overrideNoteHeadGlyph,
\overrideClefColor, etc. Par contre, à la source
musicale, il n'y a pas tant d'information que cela.
Les objets musicaux ne sont pas vraiment l'endroit
où mettre des tas de retouches, plutôt une
représentation très directe de l'entrée de
l'utilisateur. En général, les propriétés des expressions
musicales sont réglées par les fonctions musicales,
il n'y a pas besoin de le faire soi-même.
En l'occurrence, untransposable est présente sur
le résultat de \relative ainsi que sur celui de
\override (qui n'est pas une fonction musicale
mais c'est tout comme).

Je ne sais pas si l'explication est claire ou
trop technique. En tous cas, je veux surtout dire
que les utilisateurs n'ont pas à se préoccuper de
\withMusicProperty en général. C'est parfois
utile pour écrire ses propres fonctions sans une
ligne de Scheme avec \etc, et utile aussi à des
fins de débogage.

Cordialement,
Jean