[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