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: Daniel Cartron
Subject: Re: Dégroupement de durées
Date: Wed, 04 Mar 2015 10:36:38 +0100
User-agent: KMail/4.13.3 (Linux/3.13.0-46-generic; KDE/4.13.3; x86_64; ; )

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



reply via email to

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