lilypond-user-fr
[Top][All Lists]
Advanced

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

Re: Re: scheme : type d' arguments pour \transpose


From: christophe_cgy.godefroy
Subject: Re: Re: scheme : type d' arguments pour \transpose
Date: Sun, 02 Dec 2007 10:34:07 +0100
User-agent: Thunderbird 2.0.0.9 (Windows/20071031)

Salut à tous,

je suis sur le même travail  avec mes flûtistes. Mais je ne comprend
rien à a ce que vous avez écrit. est-ce que qqn peut faire une
explication de texte ?
Ou ce trouve le schéma de base, ou ce trouve le schéma transposé.
J'espère que l'un d'entre vous aura  le temps de faire un peut de formation.
Merci
Christophe

Gilles THIBAULT a écrit :
> <div class="moz-text-flowed" style="font-family: -moz-fixed">
> Ouf, merci beaucoup pour cette réponse conséquente.
> Je suis en fait, en train de faire un cahier de gammes pour mes élèves
> clarinettistes d'où ma tentative de faire une fonction qui utilise un
> canevas fixe et qui est transposé à souhait dans tous les tons.
> Au delà de l'aide ponctuelle apportée ici, on peut aussi recueillir
> beaucoup de
> renseignements sur la méthodologie à adopter pour écrire des
> fonctions schemes. En particulier, j'avais bien tenté de trouver dans les
> fichiers *.scm et *.ly du repertoire usr\share\lilypond\current,
> l'implémentation de \transpose, mais sans succès.
> Jamais je n'avais eu l'idée de rechercher dans les fichiers sources !
> Bref, je vais étudier tout ça et je transmettrai ici le résultat. (je
> pense
> que d'autres profs pourront éventuellement être interessés pour
> adapter ce
> cahier pour leur propre instrument).
>
> Un cahier de gammes, c'est les élèves qui vont être contents :-)
>
> Gilles
>
> -----------------------------------------------
> Nicolas Sceaux a écrit
> <
> En effet. Donc dans ce cas, il faut regarder ce que fait le parser
> quand il
> rencontre le mot clé \transpose dans le fichier source lily/parser.yy,
> et
> essayer de faire pareil.
>
> TRANSPOSE pitch_also_in_chords pitch_also_in_chords music {
> Pitch from =unsmob_pitch ($2);
> Pitch to =unsmob_pitch ($3);
> SCM pitch =itch_interval (from, to).smobbed_copy ();
> $$ =AKE_SYNTAX ("transpose-music", @$, pitch, $4);
>
> Le jeu de piste n'est pas terminé. Ici ça dit que l'on fabrique un objet
> avec "transpose-music", qui est défini dans le fichier source
> scm/ly-syntax-constructors.scm :
>
> (define-ly-syntax-simple (transpose-music pitch music)
>   (make-music 'TransposedMusic
>         'element (ly:music-transpose music pitch)))
>
> Donc on va essayer de faire comme le parser, à partir d'une note de
> départ,
> une note de destination, et la musique à transposer, de générer la
> transposition
> en utilisant ly:music-transpose.
>
> L'équivalent en Scheme de la fonction pitch_interval qu'on voit dans
> parser.yy
> est ly:pitch-diff (avec des arguments inversés). On va devoir écrire
> quelque chose
> comme :
>
>   (ly:music-transpose music (ly:pitch-diff to from))
>
> où to est le "pitch" de la note passée en argument, et from le pitch
> de la note c.
>
> Pour récupérer cette propriété pitch, il faut repérer où elle se loge
> dans
> l'expression musicale représentant une note :
>
>   \displayMusic g,
> =
>   (make-music 'EventChord
>     'elements (list (make-music 'NoteEvent
>                       'duration (ly:make-duration 2 0 1 1)
>                       'pitch    (ly:make-pitch -2 4 0))))
>
> Donc, à partir d'une note, on obtient sa propriété pitch en faisant :
>
>   (ly:music-property (car (ly:music-property note 'elements)) 'pitch)
>
> Le pitch de la note "c" est également obtenu en invoquant
> \displayMusic :
>
>   (ly:make-pitch -1 0 0)
>
> On a maintenant tous les éléments permettant de construire à la main une
> transposition.
>
>   mytranspose    #(define-music-function (parser location to-note music)
>                           (ly:music? ly:music?)
>      (let ((from (ly:make-pitch -1 0 0))
>            (to (ly:music-property (car (ly:music-property to-note
> 'elements))
>                                   'pitch)))
>        (ly:music-transpose music (ly:pitch-diff to from))))
>
>   \displayMusic \mytranspose g, a'
>   \displayMusic \transpose c g, a'
> =
>   (make-music 'EventChord
>     'elements (list (make-music 'NoteEvent
>                      'duration (ly:make-duration 2 0 1 1)
>                      'pitch (ly:make-pitch 0 2 0))))
>   (make-music 'TransposedMusic
>    'element (make-music 'EventChord
>               'elements (list (make-music 'NoteEvent
>                                 'duration (ly:make-duration 2 0 1 1)
>                                 'pitch (ly:make-pitch 0 2 0)))))
>
> Pour avoir un résultat identique au \transpose original il ne reste
> qu'à enrober
> le résultat de notre fonction dans (make-music 'TransposedMusic etc:
>
>   mytranspose    #(define-music-function (parser location to-note music)
>                           (ly:music? ly:music?)
>      (let ((from (ly:make-pitch -1 0 0))
>            (to (ly:music-property (car (ly:music-property to-note
> 'elements))
>                                   'pitch)))
>        (make-music 'TransposedMusic
>          'element (ly:music-transpose music (ly:pitch-diff to from)))))
>
> Adapter cette fonction pour faire la fonction accord que tu souhaites
> devrait
> être assez facile.
>
> nicolas
>>
>
>
>
>
>
> </div>

-- 
Christophe GODEFROY




reply via email to

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