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

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

Re: Détection d'une propriété de 'NoteEvent par scheme


From: Gilles THIBAULT
Subject: Re: Détection d'une propriété de 'NoteEvent par scheme
Date: Tue, 24 Feb 2015 01:30:51 +0100
User-agent: KMail/4.12.5 (Linux/3.14.32-desktop-1.mga4; KDE/4.12.5; x86_64; ; )

> > 
> > \displayMusic c4\startGroup
> > j'obtiens :
> > (make-music
> > 
> >   'NoteEvent
> >   'articulations
> >   (list (make-music
> >   
> >           'NoteGroupingEvent
> >           'span-direction
> >           -1))
> >   
> >   'duration
> >   (ly:make-duration 2 0 1)
> >   'pitch
> >   (ly:make-pitch -1 0 0))

> > Problème : je ne trouve pas la fonction scheme qui corresponde à "est
> > présent dans"... J'ai essayé successivement "memq", "memv" et "member",
> > sans résultat...

Euh en fait, aucunes de ces fonctions ne peuvent convenir car la propriété 
'articulations contient des "music", et  'NoteGroupingEvent est un symbole. Il 
n'y a aucun symbole dans la liste des articulations.
On doit d'abord extraire le nom (propriété 'name) de chaque musique de la 
liste et le comparer avec 'NoteGroupingEvent. 
On compare 2 symboles avec eq?

%%%%%%%%%

maFonction = #(define-music-function (parser location music)(ly:music?)
(music-map
  (lambda (evt)
    (let ((artis (ly:music-property evt 'articulations)))
      (if (pair? artis)
        (for-each 
           (lambda(m)
             (if (eq? 'NoteGroupingEvent (ly:music-property m 'name))
               (begin
                 (display "\n**** Ça marche !!! ****\n\n")
                 ;; faire qqchose avec m
               )))
           artis))
      evt))
  music))


\maFonction { c4\startGroup }


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


Il existe dans les dossiers Lilypond une fonction (non documenté) qui peut 
simplifier ça :
(extract-named-music music liste-de-nom) 
Elle renvoie la liste de music, dont les noms sont contenus dans liste-de-nom.
Avec 
music = { c4\startGroup }
on écrirait
(extract-named-music music '(NoteGroupingEvent)) 
On obtiendrait une liste avec 1 seul élément :
 (make-music 'NoteGroupingEvent ...)

-- 
Gilles



reply via email to

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