Subject: [LilyPond] Scheme : Musikalisches Würfelspiel

From: Olivier Miakinen via LilyPond <[email-masked]>
Date: Sat, 03 Jan 2026 20:46:10 +0000

Bonjour,

Je cherche à réaliser avec Lilypond des morceaux de musique suivant
les règles de « jeux de dés musicaux », par exemple celui-ci :

<https://imslp.org/wiki/Musikalisches_W%C3%BCrfelspiel,_K.516f_(Mozart,_Wolfgang_Amadeus)>
<https://imslp.eu/files/imglnks/euimg/e/ed/IMSLP985911-PMLP47543-Mozart_Musikalisches_W%C3%BCrfelspiel_KV_516f.pdf>

J'ai déjà créé les 176 mesures (en 352 variables, main droite et
main gauche), et aussi leur correspondance (en 352 autres variables)
selon le numéro de mesure et le tirage de dés de 2 à 12.

Par exemple, si on tire un 2 pour la toute première mesure, je trouve
dans la première colonne et la deuxième ligne le numéro 96, et donc
j'ai dans mes fichiers :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 "r96" = \relative do'' { mi8 do sol }
 "l96" = \relative do { do4 r8 }
 "A2r" = \"r96"
 "A2l" = \"l96"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

J'ai aussi défini des valeurs par défaut en supposant que le tirage
de dés donne 7 à chaque fois, puis des variables à utiliser dans mon
\score pour faire la partition complète :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 Ar = \"A7r" Al = \"A7l"
 Br = \"B7r" Bl = \"B7l"
 Cr = \"C7r" Cl = \"C7l"
 Dr = \"D7r" Dl = \"D7l"
 Er = \"E7r" El = \"E7l"
 Fr = \"F7r" Fl = \"F7l"
 Gr = \"G7r" Gl = \"G7l"
 Hr = \"H7r" Hl = \"H7l"

 ar = \"a7r" al = \"a7l"
 br = \"b7r" bl = \"b7l"
 cr = \"c7r" cl = \"c7l"
 dr = \"d7r" dl = \"d7l"
 er = \"e7r" el = \"e7l"
 fr = \"f7r" fl = \"f7l"
 gr = \"g7r" gl = \"g7l"
 hr = \"h7r" hl = \"h7l"

 rightI = { \Ar \Br \Cr \Dr \Er \Fr \Gr \Hr }
 rightII = { \ar \br \cr \dr \er \fr \gr \hr }
 leftI = { \Al \Bl \Cl \Dl \El \Fl \Gl \Hl }
 leftII = { \al \bl \cl \dl \el \fl \gl \hl }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Il ne me reste plus qu'à remplacer tous ces « 7 » par des nombres
aléatoires entre 2 et 12. Je sais comment générer un nombre aléatoire
en Scheme, je sais même former une chaîne en concaténant une lettre
(A à H en majuscule ou minuscule) avec ce nombre puis la lettre "r"
ou "l", mais je n'arrive pas à transformer ces chaînes en noms de
variables.

Par exemple, si pour la lettre F le tirage donne 11, je voudrais
pouvoir générer quelque chose comme :
 (define Fr F11r)
 (define Fl F11l)
ou en syntaxe lilypond :
  Fr = \"F11r"
  Fl = \"F11l"

Est-ce que quelqu'un pourrait m'aider ?

Cordialement,
-- 
Olivier Miakinen

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/scheme-musikalisches-wurfelspiel/6060/1).

Pour créer un nouveau sujet, écrivez à [[email-masked]](mailto:[email-masked]) ou visitez la [page d'accueil de lilypond.community](https://lilypond.community).

---

From: Olivier Miakinen via LilyPond <[email-masked]>
Date: Sun, 04 Jan 2026 14:37:54 +0000

Bonjour,

Je m'aperçois qu'en voulant être exhaustif j'ai écrit un très long
message qui pourrait décourager les lecteurs. Alors voici un résumé.

Le 03/01/2026 à 21:46, Olivier Miakinen via LilyPond a écrit :
> [...]

Pour simplifier, supposons que j'aie le code suivant :

 (define colonne "F")
 (define ligne (number->string (+ (random 11) 2)))  ; par exemple "11"
 (define ori (string-append colonne ligne "r"))     ; donc "F11r"
 (define dest (string-append colonne "r"))          ; donc "Fr"

Je voudrais pouvoir faire :

 (define « contenu de dest » « contenu de ori »)

c'est-à-dire, étant entendu que ori="F11r" et dest="Fr" :

 (define Fr F11r)

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/scheme-musikalisches-wurfelspiel/6060/2).

---

From: Olivier Miakinen via LilyPond <[email-masked]>
Date: Sun, 04 Jan 2026 14:58:00 +0000

Eurêka !

En cherchant sur la toile des exemples en lisp vu que je ne trouvais
rien avec Scheme ou Guile, j'ai vu (eval ...) qui ne fonctionne pas
comme ça en Scheme, mais qui m'a permis de trouver (eval-string ...).

>  (define « contenu de dest » « contenu de ori »)

Et donc :
 (eval-string (string-append "(define " dest " " ori ")"))

Cela dit, il y a peut-être plus élégant. Je suis toujours preneur de
vos avis.

Cordialement,
-- 
Olivier Miakinen

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/scheme-musikalisches-wurfelspiel/6060/3).

---

From: MartialR via LilyPond <[email-masked]>
Date: Mon, 05 Jan 2026 22:27:47 +0000

je suis impressionné !

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/scheme-musikalisches-wurfelspiel/6060/7).

---

From: Jean Abou Samra via LilyPond <[email-masked]>
Date: Wed, 07 Jan 2026 14:48:22 +0000

[quote="omiak, post:6, topic:6060"]
En revanche, cela ne fonctionne pas bien en MIDI car la 8e mesure
(qui est toujours la même) ne fait pas la distinction entre première
et deuxième fois.
[/quote]

Tu as raison. J'ai corrigé ce problème, simplifié le code, converti les noms des notes en néerlandais et mis le tout sur le wiki LilyPond :

https://wiki.lilypond.community/wiki/Mozart%27s_Musikalisches_W%C3%BCrfelspiel

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/scheme-musikalisches-wurfelspiel/6060/9).

---

From: Olivier Miakinen via LilyPond <[email-masked]>
Date: Wed, 07 Jan 2026 16:39:00 +0000

> https://wiki.lilypond.community/wiki/Mozart%27s_Musikalisches_W%C3%BCrfelspiel

Bravo ! En plus j'allais te signaler que tu avais interverti les volta 1
et 2 mais je vois que tu l'as déjà corrigé. :-)

---
Pour poster dans ce sujet, visitez la [page du sujet](https://lilypond.community/t/scheme-musikalisches-wurfelspiel/6060/10).