Subject: Fonctions d'attente

From: Ben <[email-masked]>
Date: Tue, 14 Feb 2023 09:45:32 +0100

Bonjour, 

Il y a deux nouvelles fonctions que je trouverais très intéressantes d'avoir nativement (ou même en scheme…), ce seraient des fonctions de saut basées sur des syllabes ou sur des valeurs rythmiques, avec pour noms \skiplyrics et \skiprythmic.

L'idée est la suivante:

ParolesStrophe = \lyricmode { Dans la fo -- rêt loin -- tai -- ne, }

ParolesRefrain = \lyricmode { \skiplyrics { \ParolesStrophe } on en -- tend -- le cou -- cou. }

L'expression \skiplyrics { \ParolesStrophe } serait alors remplacée par un \repeat unfold 7 { \skip 1 } correspondant aux 7 syllabes de ParolesStrophe. 

Et de même: 

NotesStrophe = \relative do' { do4 fa fa fa la fa2 }

NotesRefrain = \relative do' { \skiprythmic { \NotesStrophe } do'4 la la la  }

L'expression \skiprythmic { \NotesStrophe } serait alors remplacée par \skip 4*7 correspondant à la valeur rythmique de NotesStrophe. 

Si cela inspire les développeurs…

Ben

---

From: Jean Abou Samra <[email-masked]>
Date: Sat, 25 Feb 2023 13:54:14 +0100

Bonjour,

Votre fonction `\skiprhythmic` existe déjà, elle s'appelle tout simplement `\skip` (c'est une nouveauté de la 2.24, `\skip` peut désormais prendre une expression musicale, et pas seulement une simple durée comme dans `\skip 4.`).

Concernant les paroles, il y a eu plusieurs discussions à ce sujet, et je pense que tous les développeurs sont d'accord pour dire que `\skip 1` est problématique : dans la musique, cela saute une ronde (durée `1`), mais dans les paroles, cela saute une syllabe, comme d'ailleurs `\skip 4` qui dans la musique saute une noire, mais dans les paroles saute toujours une syllabe. Dans l'idéal, il faudrait changer ce comportement pour que `\skip` se comporte dans les paroles de la même manière que dans la musique, mais malheureusement, il y a beaucoup de partitions existantes qui utilisent `\skip 1`, donc c'est une question compliquée.

Cordialement,

Jean

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Sat, 25 Feb 2023 14:19:14 +0100

Bonjour Ben, bonjour Jean,
@Ben, basiquement on peut faire :

\version "2.24.1"

void = #(define-music-function (arg)(integer?)
         #{ \repeat unfold #arg \skip 1 #})

music = \fixed c' { c4 4 4 4 d4 4 4 4 }

paroles_un = \lyricmode { la la la la }

paroles_deux = \lyricmode { \void 4 lé lé lé lé }

<<
  \new Voice \music
  \addlyrics \paroles_un
  \addlyrics \paroles_deux

HTH, cordialement,
Pierre

Le sam. 25 févr. 2023 à 13:54, Jean Abou Samra <[email-masked]> a
écrit :

> Il y a deux nouvelles fonctions que je trouverais très intéressantes
> d'avoir nativement (ou même en scheme…), ce seraient des fonctions de saut
> basées sur des syllabes ou sur des valeurs rythmiques, avec pour noms
> \skiplyrics et \skiprythmic.
>
> L'idée est la suivante:
>
> L'expression \skiplyrics { \ParolesStrophe } serait alors remplacée par un
> \repeat unfold 7 { \skip 1 } correspondant aux 7 syllabes de ParolesStrophe.
>
> Et de même:
>
> L'expression \skiprythmic { \NotesStrophe } serait alors remplacée par
> \skip 4*7 correspondant à la valeur rythmique de NotesStrophe.
>
> Votre fonction \skiprhythmic existe déjà, elle s'appelle tout simplement
> \skip (c'est une nouveauté de la 2.24, \skip peut désormais prendre une
> expression musicale, et pas seulement une simple durée comme dans \skip 4.
> ).
>
> Concernant les paroles, il y a eu plusieurs discussions à ce sujet, et je
> pense que tous les développeurs sont d'accord pour dire que \skip 1 est
> problématique : dans la musique, cela saute une ronde (durée 1), mais
> dans les paroles, cela saute une syllabe, comme d'ailleurs \skip 4 qui
> dans la musique saute une noire, mais dans les paroles saute toujours une
> syllabe. Dans l'idéal, il faudrait changer ce comportement pour que \skip
> se comporte dans les paroles de la même manière que dans la musique, mais
> malheureusement, il y a beaucoup de partitions existantes qui utilisent \skip
> 1, donc c'est une question compliquée.
>
> Cordialement,
>
> Jean
>

---

From: Jean Abou Samra <[email-masked]>
Date: Sat, 25 Feb 2023 14:22:41 +0100

> paroles_deux = \lyricmode { \void 4 lé lé lé lé }  

Absolument. J'éviterais juste le nom `\void`, qui est déjà le nom d'une fonction prédéfinie par LilyPond.

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Sat, 25 Feb 2023 14:26:45 +0100

Le sam. 25 févr. 2023 à 14:22, Jean Abou Samra <[email-masked]> a
écrit :
...

> J'éviterais juste le nom \void, qui est déjà le nom d'une fonction
> prédéfinie par LilyPond.
>
Hum, celle-là je la sentait venir au moment où j'ai appuyé sur "enter",
lol.

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Sat, 25 Feb 2023 14:27:56 +0100

*sentais (oups).

---

From: Ben <[email-masked]>
Date: Sat, 25 Feb 2023 14:48:26 +0100

Merci pour ces réponses! 

J'étais passé à côté de l'évolution du \skip pour les notes, merci pour l'info!

Pour les paroles, j'utilise déjà une fonction scheme de ce genre, mais j'aurais voulu pouvoir lui passer des notes en paramètre et que le nombre de syllabes à sauter puisse être calculé dynamiquement par la fonction. 

Pour reprendre l'exemple: 

\version "2.24.1"

musicintro =  \fixed c' { c4 4 4 4 }

music = \fixed c' { \musicintro d4 4 4 4 }

paroles_un = \lyricmode { \skip \musicintro la la la la }

paroles_deux = \lyricmode { \skip \musicintro lé lé lé lé }

<<
  \new Voice \music
  \addlyrics \paroles_un
  \addlyrics \paroles_deux

(Ce qui est marrant, c'est que si j'enlève le \skip, cela fonctionne, sauf que c'est un hasard, car apparemment il saute chaque note comme une syllabe.)

Ne pourrait-on pas utiliser convert-ly pour transformer les \skip 1 des paroles en \skip "1", cela permettrait une transition? 

Au plaisir, 

Ben

> Le 25 févr. 2023 à 14:22, Jean Abou Samra <[email-masked]> a écrit :
> 
> Absolument. J'éviterais juste le nom \void, qui est déjà le nom d'une fonction prédéfinie par LilyPond.
>

---

From: Jean Abou Samra <[email-masked]>
Date: Sat, 25 Feb 2023 14:56:33 +0100

> Ne pourrait-on pas utiliser convert-ly pour transformer les \skip 1 des paroles en \skip "1", cela permettrait une transition?

Compliqué. convert-ly n'a pas de connaissance profonde de la syntaxe des fichiers LilyPond, tout simplement parce que convert-ly est un outil qui fonctionne pour convertir des fichiers dans des syntaxes anciennes, alors que chaque version de LilyPond ne comprend que sa propre syntaxe. Pour des cas simples comme `\addlyrics { \skip 1 ... }`, ça pourrait fonctionner, mais si vous commencez à insérer les `\skip` à travers une fonction comme la fonction `\void` de Pierre, convert-ly va vite s'y perdre.

---

From: Ben <[email-masked]>
Date: Sat, 25 Feb 2023 15:03:25 +0100

Et si convert-ly remplace partout \skip 1 par \skip "1" et que c'est le compilateur lilypond qui arrive à déterminer que dans les notes \skip "1" est équivalent à \skip 1 et que dans les paroles \skip "1" est équivalent à une syllabe?  

> Le 25 févr. 2023 à 14:56, Jean Abou Samra <[email-masked]> a écrit :
> 
> Compliqué. convert-ly n'a pas de connaissance profonde de la syntaxe des fichiers LilyPond, tout simplement parce que convert-ly est un outil qui fonctionne pour convertir des fichiers dans des syntaxes anciennes, alors que chaque version de LilyPond ne comprend que sa propre syntaxe. Pour des cas simples comme \addlyrics { \skip 1 ... }, ça pourrait fonctionner, mais si vous commencez à insérer les \skip à travers une fonction comme la fonction \void de Pierre, convert-ly va vite s'y perdre.
>

---

From: Jacques Menu <[email-masked]>
Date: Sun, 26 Feb 2023 17:31:02 +0100

Ou alors ajouter une nouvelle commande \skipBis (nom à trouver) qui ait la nouvelle fonctionnalité?

JM

> Le 25 févr. 2023 à 15:03, Ben <[email-masked]> a écrit :
> 
>> Le 25 févr. 2023 à 14:56, Jean Abou Samra <[email-masked] <mailto:[email-masked]>> a écrit :
>>

---

From: Jean Abou Samra <[email-masked]>
Date: Tue, 28 Feb 2023 22:22:29 +0100

> Et si convert-ly remplace partout \skip 1 par \skip "1" et que c'est le compilateur lilypond qui arrive à déterminer que dans les notes \skip "1" est équivalent à \skip 1 et que dans les paroles \s…

Euh... oui. Par contre, les utilisateurs qui sautent la case `convert-ly` vont avoir des surprises. On préfère en général que la compilation avec une nouvelle version d'une syntaxe qui doit être changée donne une erreur, pas un résultat différent sans prévenir (ce n'est pas toujours le cas, mais `\skip` est une commande assez utilisée, donc il faut de la prudence).

Pour ma part, mon idée serait de généraliser, en ajoutant des commandes `\lyricSyncOn`/`\lyricSyncOff` qui permettraient de désactiver temporairement la synchronisation mélodie-paroles, ce qui permettrait non seulement

```
\lyricmode {
  ...
  \lyricSyncOff
  \skip 1*4
  \lyricSyncOff
  ...
}
```

mais aussi

```
\lyricmode {
  ...
  \lyricSyncOff
  aah4.
  \lyricSyncOn
}
```

s'il y a à cet endroit un mélisme qui se trouve être plus facile à entrer en donnant sa durée à la syllabe « aah ».

À vrai dire, je ne sais même pas si c'est implémentable (c'est une partie de LilyPond dans laquelle je n'ai jamais trop mis mon nez jusqu'ici).

---

From: Ben <[email-masked]>
Date: Tue, 28 Feb 2023 23:39:07 +0100

> Le 28 févr. 2023 à 22:22, Jean Abou Samra <[email-masked]> a écrit :
> 
> Euh... oui. Par contre, les utilisateurs qui sautent la case convert-ly vont avoir des surprises. On préfère en général que la compilation avec une nouvelle version d'une syntaxe qui doit être changée donne une erreur, pas un résultat différent sans prévenir (ce n'est pas toujours le cas, mais \skip est une commande assez utilisée, donc il faut de la prudence).
> 
> 

Oui, en effet…

> Pour ma part, mon idée serait de généraliser, en ajoutant des commandes \lyricSyncOn/\lyricSyncOff qui permettraient de désactiver temporairement la synchronisation mélodie-paroles, ce qui permettrait non seulement
> 
> \lyricmode {
>   ...
>   \lyricSyncOff
>   \skip 1*4
>   \lyricSyncOff
>   ...
> }
> mais aussi
> 
> \lyricmode {
>   ...
>   \lyricSyncOff
>   aah4.
>   \lyricSyncOn
> }
Oui, l'idée est aussi intéressant. Mais est-ce qu'en attendant une fonction scheme serait déjà capable de compter le nombre de syllabes dans une variable de notes pour les passer dans un \repeat unfold?