Subject: Re: Une fonction pour saisir plus simplement certain rythmes

From: Martial <[email-masked]>
Date: Tue, 12 Feb 2008 20:54:49 +0100

> Je voudrais pouvoir saisir quelque chose comme
> \truc 8 { do do do re | mi re mi re |}
> Et  interprété comme :
> do8. do16 do8. re16 | mi8. re16 mi8. re16

Aïe !
rien n'est impossible en scheme
mais si je comprends certaines choses pour bidouiller
je ne sais pas encore comment faire ça.

--
Martial

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Wed, 13 Feb 2008 22:38:50 +0100

> do8. do16 do8. re16 | mi8. re16 mi8. re16

Ceci a l'air de marché :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.11.37" %%devrait marcher aussi pour la 2.10
#(define isOdd #f)

#(define (transformEachNote music)
( let ((dur (ly:music-property music 'duration)))
 (if (ly:duration? dur)
  (begin
   (if isOdd
    (set! (ly:music-property music 'duration) (ly:make-duration 3 1 1 1)) 
%% croche pointée
    (set! (ly:music-property music 'duration) (ly:make-duration 4 0 1 1)) 
%% double
   )
   (set! isOdd (not isOdd))
  ))
 music
))

MakeChrochePointeDouble = #(define-music-function (parser location m) 
(ly:music?)
(begin
 (set! isOdd #t)
 (music-map (lambda (x) (transformEachNote x)) m)
))

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

{ \new Staff \relative{
  \MakeChrochePointeDouble {c d e f g f e d}
  c1
}}

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

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Wed, 13 Feb 2008 23:34:19 +0100

> Ceci a l'air de marché :
Bon ben, il y a l'ortographe qui ne marche pas trop par contre chez moi :-)

Gilles

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Thu, 14 Feb 2008 10:41:51 +0100

Cette version fonctionne aussi pour les accords ...

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

#(define isOdd #f)

#(define (transformEachNote chordElt)
( let ((dur (ly:music-property chordElt 'duration)))
 (if (ly:duration? dur)
  (if isOdd
   (set! (ly:music-property chordElt 'duration) (ly:make-duration 3 1 1 1)) 
;; croche pointée
   (set! (ly:music-property chordElt 'duration) (ly:make-duration 4 0 1 1)) 
;; double
  )
 )
 chordElt
))

#(define (getChords musicElt)
(begin
 (if (eq? 'EventChord (ly:music-property musicElt 'name))
  (begin
   (map transformEachNote (ly:music-property musicElt 'elements))
   (set! isOdd (not isOdd))
  )
 )
 musicElt
))

 (music-map getChords  m)
))

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

{ \new Staff \relative{
  \MakeChrochePointeDouble {c d e f g f e d <c e> <d f> <e g> <d f> }
  <c e>2
}}

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

---

From: "Nicolas Klutchnikoff" <[email-masked]>
Date: Thu, 14 Feb 2008 11:54:26 +0100

Génial, c'est exactement ce qu'il me fallait !

Merci beaucoup.

J'ai d'ailleurs une question qui n'a presque rien à voir.
Bien entendu si l'on veut faire du double-pointée-triple, il suffit de
remplacer le 3 par un 4 et le 4 par un 5. C'est élémentaire. Mais, pour
quelle raison la notation des durées change-t-elle ? Pourquoi 3 au lieu de
8, 4 au lieu de 16. Bien sûr 8=2^3, 16=2^4, etc. Mais il y a comme un manque
d'uniformité, non ?

--
Nicolas.

P.S. : pour info, où as tu trouvé ce code ? Sur le LSR ? C'est un truc perso
? Encore merci en tout cas. Et effectivement ça fonctionne avec 2.10.x

---

From: Martial <[email-masked]>
Date: Thu, 14 Feb 2008 13:15:27 +0100

Ha oui merci
Je ne sais pas si cela me serviras tout de suite , mais je le range dans 
mes tiroirs "utile.ly"

-- 
Martial

---

From: "Valentin Villenave" <[email-masked]>
Date: Thu, 14 Feb 2008 16:49:11 +0100

> ? Encore merci en tout cas. Et effectivement ça fonctionne avec 2.10.x

Ça m'évoque http://lsr.dsi.unimi.it/LSR/Item?id=302

Gilles, as-tu changé certains trucs ? Peux-tu poster ta version sur le LSR ?

Cordialement,
Valentin

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Thu, 14 Feb 2008 23:01:05 +0100

> Gilles, as-tu changé certains trucs ? Peux-tu poster ta version sur le LSR 

J'aurai bien voulu rendre la chose beaucoup plus modulable et extensible 
mais pour le moment je laisse comme ça :

http://lsr.dsi.unimi.it/LSR/Item?u=1&id=386

Gilles

---

From: "Valentin Villenave" <[email-masked]>
Date: Fri, 15 Feb 2008 10:55:47 +0100

>  mais pour le moment je laisse comme ça :

Très bien et merci beaucoup. Je l'ai validé  -- après avoir ajouté
quelques "h" à "rhythm" ;-)

Cordialement,
Valentin

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Sun, 17 Feb 2008 00:50:57 +0100

> mais pour le moment je laisse comme ça :

Ben en fait, j'ai trouvé plus rapidement que prévu une solution.
Ci-joint un fichier "rhythm.ly" (contenant les fonctions schèmes) et un 
fichier "test.ly" (avec un \include du fichier précédent).Ils sont à mettre 
dans un même répertoire.

On utilise ici une fonction \makeRhythm.
Dans l'exemple des croches pointées double qui nous occupaient, la syntaxe 
serait
    \makeRhythm music "8. 16"

Si on veut éviter d'avoir à écrire le 2ème paramètre il suffit de se créer 
une fonction très simple genre:
    makeCrochePointeeDouble = #(define-music-function (parser location 
music) (ly:music?)
    #{
         \makeRhythm $music "8. 16"
    #})

Et la syntaxe devient alors
   \makeCrochePointeeDouble music.

On peut mettre, à la place de "8. 16", le rythme que l'on veut en séparant 
chaque valeur par un espace.
(Dans le test, il y a "8 16 16" , "4 8 8. 16 8" par exemple).

Merci de tester un peu cette fonction pour voir si je peux éventuellement 
mettre à jour le LSR

Gilles

---

From: Martial <[email-masked]>
Date: Sun, 17 Feb 2008 10:16:08 +0100

Bonjour,

Alors là Bravo !
Et Merci

je vais utiliser tout de suite sur un morceau avec ritournelle rythmique

> Merci de tester un peu cette fonction pour voir si je peux 
> éventuellement mettre à jour le LSR

1er essai impécable
\makeRhythm $music "4 8 8 4 8 8 4 8 8 4 8 8 4 8 8 4 8 8 8 8 8 8 8 8 4"

Attention cependant :
il faut séparer les temps par un espace un et un seul
sinon :

rhythm.ly:38:22: Wrong type argument in position 1(expecting number): #f

-- 
Martial

---

From: "Valentin Villenave" <[email-masked]>
Date: Sun, 17 Feb 2008 11:44:02 +0100

> Merci de tester un peu cette fonction pour voir si je peux éventuellement

Pas de problème, fonce (et n'oublie pas le tag "correction-wanted").

Cordialement,
Valentin

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Sun, 17 Feb 2008 14:27:55 +0100

> il faut séparer les temps par un espace un et un seul
Effectivement.
J'ai apporté les corrections necessaires (voir fichier ci-joint).
Les espaces en trop, au début, en fin, et entre les nombres ne devraient
plus créer de problèmes :
        \makeRhythm    music  "     8.       16          "
fonctionne.

Gilles

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Sun, 17 Feb 2008 15:00:27 +0100

> Pas de problème, fonce (et n'oublie pas le tag "correction-wanted").
Euh je ne peux plus modifier le snippet ( 
http://lsr.dsi.unimi.it/LSR/Item?u=1&id=386 ).
Il est en lecture seule ...

Gilles

---

From: "Valentin Villenave" <[email-masked]>
Date: Sun, 17 Feb 2008 16:58:40 +0100

> Il est en lecture seule ...

Oui ; il faut poster un nouveau snippet, et le tagger comme
"correction". Ou bien tu peux ajouter "[correction]" dans le titre.

Valentin

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Sun, 17 Feb 2008 18:45:19 +0100

> "correction". Ou bien tu peux ajouter "[correction]" dans le titre.

Bon j'ai créer un nouveau snippet :
http://lsr.dsi.unimi.it/LSR/Snippet?id=390

L'autre ( http://lsr.dsi.unimi.it/LSR/Item?u=1&id=386 ) est obsolète.

J'ai essayer de m'appliquer pour bien m'exprimer, mais la langue de 
Shakespeare ne m'est pas trop naturelle.
J'ai mis quelques commentaires dans le code aussi, si tu peux verifier ...

Bonne fin de Week-end à tous.

Gilles

---

From: "Nicolas Klutchnikoff" <[email-masked]>
Date: Sun, 17 Feb 2008 23:06:04 +0100

Bonsoir,

Je viens de faire quelques tests et tout à l'air de très bien fonctionner.

Joli travail ! C'est vraiment un outil que je vais utiliser très
régulièrement je crois... si, à l'usage, je trouve un petit bug j'envoie un
email sur la liste.

Nicolas.

---

From: "Gilles THIBAULT" <[email-masked]>
Date: Sun, 17 Feb 2008 23:08:43 +0100

>Bon j'ai créé un nouveau snippet :

J'ai vraiment du mal:  la veritable adresse c'est
http://lsr.dsi.unimi.it/LSR/Item?u=1&id=390

:-)

Gilles

---

From: "Valentin Villenave" <[email-masked]>
Date: Tue, 19 Feb 2008 10:37:49 +0100

> http://lsr.dsi.unimi.it/LSR/Item?u=1&id=390

Pas grave ; le nombre suffisait :)

Merci beaucoup ; c'est en effet beaucoup plus pédagogique.

Cordialement,
Valentin