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

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

Re: Scheme : récupérer des valeurs de pro priété


From: Gilles THIBAULT
Subject: Re: Scheme : récupérer des valeurs de pro priété
Date: Thu, 23 Sep 2010 18:55:14 +0200

 
Merci pour cette réponse qui confirme ce que j'ai glané aujourd'hui dans la doc Notation... Le fait est que j'aimerais savoir où trouver ce type de renseignement... ça doit bien être qque part ! ;-)
Quand tu m'écris : "
Toutes les fonctions de pitch (sauf ly:make-pitch) commence par ly:pitch", en fait, j'aimerais avoir la liste de ces fonctions de pitch, parce que c'est pas évident à inventer! :-P
 
 
Pour la version 2.13 je sais pas.
 
 

%le pitch est une propriété appartenant au 'NoteEvent, de la forme (ly:make-pitch a b c)
%où a = n° d'octave (zéro pour c'), b = n° du degré (zéro pour le c), c = 1/2 (dièse) ou -1/2 (bémol)
%a=pitch-octave, b=pitch-notename, c=pitch-alteration

ajouteundegre = #(define-music-function
                      (parser location note)(ly:music?)
                      "augmente d'un degré une note en ajoutant 1 au pitch-notename"
                      (let     
                          (
                            (result-note (ly:music-deep-copy note))
                            (p (ly:music-property result-note 'pitch))
                            (o (ly:pitch-octave pitch))
                            (n (ly:pitch-octave pitch))
                            (a (ly:pitch-alteration pitch))
                          )
                          (set! p (ly:make-pitch o (+ 1 n) a))
                          (set! (ly:music-property result-note 'pitch) p)
                          result-note
                          )
                       )
\score{
\ajouteundegre c4
}


J'aurais pu mettre, à la place de la ligne en gras :
(ly:music-set-property! result-note 'pitch p)
ce qui aurait donné la même chose.

Bon d'abord, je reçois un message de Lily, pas content, qui me dit :


"While evaluating arguments to ly:music-property in _expression_ (ly:music-property result-note (quote pitch)): Unbound variable: result-note
interruption avec le code 1.


Je ne comprends pas pourquoi il trouve que ma belle variable locale result-note est unbound ?
Si ça se trouve, c'est une bête histoire de parenthèses : j'ai bcp de mal avec ces bouzins dans tous les sens !

Bonne fin de semaine à toute la troupe !

JMarc
 
Il y a 3 petites erreurs, dont 1 d'étourderie
1-
Si tu fais :
\ajouteundegre \displayMusic c4
 
tu obtiens :
(make-music
  'EventChord
  'elements
  (list (make-music
          'NoteEvent
          'duration
          (ly:make-duration 2 0 1 1)
          'pitch
          (ly:make-pitch -1 0 0))))
 
Tu n'obtiens pas une note ( 'NoteEvent ), mais un 'EventChord. Donc l'extraction du pitch est un peu moins direct
(voir ci-dessous )
 
2- l'erreur d'étourderie :
Tu appelles p le (ly:music-property result-note 'pitch), puis dans les lignes suivantes tu l'appelles pitch !
 
3-
En scheme, dans une instruction let, chaque "variable" doivent être indépendante les unes des autres. Si tu veux utiliser le resultat d'une ligne1 dans la ligne 2, tu dois utiliser let* à la place.
 
Donc ça donne un truc comme ça :
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ajouteundegre = #(define-music-function (parser location note)(ly:music?)
"augmente d'un degré une note en ajoutant 1 au pitch-notename"
(let*     
    (
      (result-chord (ly:music-deep-copy note))
      (result-note (car (ly:music-property result-chord 'elements)))
      (p (ly:music-property result-note 'pitch))
      (o (ly:pitch-octave p))
      (n (ly:pitch-octave p))
      (a (ly:pitch-alteration p))
    )
    (set! p (ly:make-pitch o (+ 1 n) a))
    (set! (ly:music-property result-note 'pitch) p)
    result-note
    )
 )
\score{
\ajouteundegre c'4
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Bon courage.
 
Gilles
 
 
 


reply via email to

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