Subject: fonction scheme numérique

From: Daniel Cartron <[email-masked]>
Date: Fri, 05 Jun 2015 16:05:17 +0200

Bonjour,

Le titre n'est pas clair mais je ne sais pas bien expliquer ça simplement.

J'ai une fonction qui interprète mon expression musicale et lui ajoute des 
markups en fonction de la valeur d'un paramètre nommé coup. On peut voir le 
code ici :
http://cartron.xyz/des-partitions-pour-vielle-a-roue-avec-lilypond/#Les_fonctions_d8217hurdyTab

Je voudrais pouvoir modifier ce paramètre en cours d'interprétation. J'avais 
imaginé d'écrire un #(define coup 4) en cours de morceau mais apparemment c'est 
lu avant la fonction d'interprétation de la musique et du coup seul la 
dernière valeur est passée en paramètre. Donc je pense qu'il faut plutôt une 
fonction du genre \setCoup 4 que je mettrai au milieu de mon expression 
musicale. Mon pb est que je ne vois pas comment écrire ça.

Je peux mettre ça qq part dans 
hurdyWheel = #(define-music-function (parser location mus) 
               (ly:music?)
  "Convert a melody into a hurdy-gurdy tablature"
  "Convertit une mélodie en tablature de vielle à roue"
  (map-some-music
    (lambda(evt)
      (let((name (ly:music-property evt 'name)))
        (cond
          ( (eq? name 'NoteEvent)
            (make-arrows evt)
            evt)
          (else #f)
        )
      )
    )
    mus
  )
)

ou il faut faire autrement ?

Et est-ce qu'il faudra mettre les notes concernées par la nouvelle valeur de 
paramètre entre {} ou pas ? Est-ce que si on fait comme ça l'ancienne valeur 
éventuelle sera restaurée ?

Autant de questions qui se posent à mon esprit en moins de temps qu'il n 'en 
faut pour y répondre :-D

Merci d'avance.

-- 
Cordialement, Daniel Cartron
« Un cocu ? Un entier qui partage sa moitié avec un tiers. »
Alphonse Allais

---

From: Daniel Cartron <[email-masked]>
Date: Sat, 06 Jun 2015 06:43 +0200

J'ai utilisé define-void-function et apparemment ça marche. C'est la bonne 
méthode ?

-- 
Cordialement, Daniel Cartron
« La première chose qui frappe l'odorat du voyageur arrivant à Venise, c'est 
l'absence totale de parfum de crottin de cheval. »
Alphonse Allais

---

From: Daniel Cartron <[email-masked]>
Date: Sat, 06 Jun 2015 06:53:41 +0200

> J'ai utilisé define-void-function et apparemment ça marche. C'est la bonne

Un ou deux tests plus loin non ça ne marche pas.

Je veux pouvoir écrire en cours de musique

a4 b c d
\setCoup 4

et à ce moment là la valeur de coup = 4

puis plus loin 

g4 a b c
\setCoup 3

et coup =3 et uniquement à partir ce de moment là

Si j'écris

setCoup = #(define-void-function (parser location nb) (number?)
   (set! coup nb)
)

mm si \setCoup 3 est écrit en fin de morceau coup=3 dès le début.

Je continue à chercher mais si qqun a la solution je suis preneur.

-- 
Cordialement, Daniel Cartron
« Pour entrer chez vous, une seule adresse : la vôtre! »
Francis Blanche