function pour changer le rythme d'un accord avec error mais ça marche 😅

Bonjour,
Je tâtonne dans le noire ici :

problème : j'aimerais bien écrire une fonction pour réutiliser un accord à plusieurs reprises mais avec différentes durations. example : au lieux d'écrire les notes à chaque fois 4 8, j'aimerais avoir une function avec les notes (qui seront toujours les mêmes) et pouvoir changer le rythme à volonté.

voici mon approche (qui marche, mais qui donne un error dans la console)

\version "2.24.3"
\language "english"


clusterA = #(define-music-function (dur) (ly:music?)
  #{ <c d e> #<>dur #} )

\relative c'{
r4 \clusterA8 r4 \clusterA2

}

voici l'erreur :

J'ai besoin de comprendre, d'apprendre comment m'en servir des fonctions. Merci de votre aide car la doc me semble assez crypté pour l'instant.

ps: je constate que mon code se copie autrement (supprimant les notes dans ma fonction scheme) voici une copie d'écran

belle journée à tous !

visiblement des problèmes apparaissent, example les liaisons de prolongations ne sont pas tenues en compte.

\version "2.24.3"
\language "english"


clusterA = #(define-music-function (dur) (ly:music?)
  #{ <c d e> #<>dur #} )

\relative c'{
r4 \clusterA8 r4 \clusterA4.~ 1

}

Bonjour Francisco,

Je ne sais pas pourquoi, mais il me semble que j'arrive au résultat avec ce code:

\version "2.24.3"
\language "english"

clusterA = #(define-music-function (void?)(ly:music?)
#{ <a c e> #} )

\relative c'{
r4 \clusterA 8 r4 \clusterA 2
}

Mais je vous conseillerais d'utiliser le scheme le moins possible, son intégration avec lilypond n'est pas assez documentée et le langage est difficile à lire, cela rend hasardeux la maintenance de votre code sur le long terme.

Vous pouvez éviter de trop taper des accords avec des structures \repeat unfold \alternative et aussi la note spéciale "s" qui répète le dernier accord sans le saisir.

bonjour Ben,
merci pour la réponse, votre solution marche bien (ne produits pas d'erreur dans la console) MAIS ne me permets pas de faire des liaisons de prolongation, ni rajouter des articulations. des solutions ?

Je crois que vous vouliez dire q.

Comme ça, ça devrait marcher :

\version "2.24.4"

clusterA =
#(define-music-function (d) (ly:duration?)
   #{ \absolute <c' d' e'>$d #})

{ \clusterA4 \clusterA8( \clusterA8 \clusterA4 \clusterA16-. \clusterA8.^-) }

J'ai rajouté \absolute au passage pour que la hauteur du cluster ne soit pas influencée par un \relative environnant.

mille merci ! :pray: :blush: :heart_eyes: :star_struck: c'était juste ce qu'il fallait.
alors, comment avez vous réussi à avoir ce niveau lilypond avec scheme? y-a-t'il des tutos quelque part ?
bonne journée,
fu

Oups, en effet, je voulais dire q.

Merci pour le code final.

Jean est le spécialiste mondial du scheme, encore plus fort que l'IA.

chatgpt n'a mas pas du tout aidé, j'ai promté pendant une heure avant écrire ici

Moi, j'ai appris sans guide parce qu'il n'y en avait pas à l'époque, mais depuis j'en ai écrit un :slight_smile: (que vous pouvez retrouver parmi les liens dans la barre latérale à gauche de ce forum).

Grok a conclu

La solution de Jeanas, avec \absolute, est meilleure [que celle de Grok], car elle garantit des hauteurs fixes, évitant les modifications dues à un contexte \relative.

proposition de Grok sur la base des messages antérieurs à la réponse de Jean

  • Définition : clusterA = #(define-music-function (dur) (ly:duration?) { dur <a c e> })

  • Utilisation proposée : \relative c' { r4 \clusterA 8 ~ \clusterA 8 -\staccato r4 \clusterA 2 }

Proposition qui ne fonctionne pas (la syntaxe n'est pas du tout correcte) — d'où l'intérêt de vérifier par soi-même les réponses d'une IA :wink:

Au fait, j'oubliais :

Il faut le mettre entre ``` comme ceci :

```
écrire le code ici
```

(j'ai édité votre message initial pour rajouter ces ```).

1 « J'aime »