lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Dégroupement de durées


From: Pierre Perol-Schneider
Subject: Re: Dégroupement de durées
Date: Wed, 4 Mar 2015 21:27:57 +0100

Désolé Daniel, je t'ai un peu oublié.
Donc voilà :

\version "2.16.2"

degroupement =
#(define-music-function
    (parser location dur mus)
    (number? ly:music?)
    (music-map
      (lambda (x)
      (let (
          (dd (ly:music-property x 'duration))
          (pp (ly:music-property x 'pitch')))
        (set! (ly:music-property x 'duration)
        (ly:make-duration (log2 dur) 0 1))
          #{
              \unfoldRepeats { \repeat tremolo $(/ dur 2) $x }
          #}))
    mus))

\relative c' {
  \degroupement 8 { c2 d4 e4 }
}


Avec mention spécial à Nicolas qui a eu l'idée géniale d'utiliser le trémolo (j'avoue humblement ne pas y avoir du tout pensé).

Cordialement,
Pierre


Le 4 mars 2015 10:36, Daniel Cartron <address@hidden> a écrit :
Le mercredi 4 mars 2015 10:23:00, vous avez écrit :
> Je me suis un peu penché sur le sujet il y a deux jours et je n'ai rien
> trouvé de magique.
> Désolé,

Merci qd mm d'avoir pris le tps de chercher. J'ai eu une autre réponse en
privé de Nicolas, mais je remet sur la liste.

************************
\version « 2.18.2 »

degroupement =
        #(define-music-function
                (parser location dur mus)
                (number? ly:music?)
                (music-map
                        (lambda (x)
                                (let (
                                        (dd (ly:music-property x 'duration))
                                        (pp (ly:music-property x 'pitch'))
                                        )
                                        (set! (ly:music-property x 'duration)
(ly:make-duration (log2 dur) 0 1))
                                        #{
                                                \unfoldRepeats { \repeat
tremolo #(/ dur 2) $x }
                                        #}
                                )
                        )
                        mus
                )
        )

\relative c' {
        \degroupement 8 {c2 d4 e4}
}

************************

Il subsiste deux problèmes :

1)
A l’endroit \unfoldRepeats { \repeat tremolo #(/ dur 2) $x }
il faudrait remplacer le 2 par la durée de la note dans l’_expression_ musicale.
Pour \degroupement 8 {c2 d4 e4} c’est 2 puis 4 et encore 4.
Dans mon exemple cette durée est dans la variable dd. Malheureusement c’est
une varibale de type « duration » et je ne sais pas comment la convertir en «
number » pour pouvoir faire la division. Dans l’autre sens conversion "number"
-> « duration » j’ai fait
(ly:make-duration (log2 dur) 0 1)

2) Plus grave : le résultat n’est pas tout-à-fait le résultat escompté…
puisque l’ensemble de l’_expression_ musicale est lui-même répété un certain
nombre de fois.

Ma solution pour la durée :
- extraire les deux premiers chiffres de duration (avec un car ou cdr ou je ne
sais plus bien quelle syntaxe) - appelons le premier l et le second d  ;
- exemples :
    -  une blanche (2) aura une "duration" égaale à (1 0 1), on calcule 2^1=2
et c'est la durée  ;
    -  une ronde (1) aura une "duration" égaale à (0 0 1), on calcule 2^0=1  ;
    - une noire (4) :  (2 0 1) ->2^2=4.
On divise 8 par la durée et on a le nb de notes à écrire.

Et si j'ai des notes pointées (le nb de points est ce que j'ai nommé d) on
multiplie nbnotes par (2-1/(2^nbpoints)).

Ceci dit j'ai un message d'erreur sur \unfoldRepeats { \repeat tremolo #(/ dur
2) $x }, est-ce dû à ma version 2.16.2 ?

--
Cordialement, Daniel Cartron
« Les absents ont toujours tort de revenir. »
Jules Renard

_______________________________________________
lilypond-user mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/lilypond-user


reply via email to

[Prev in Thread] Current Thread [Next in Thread]