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

From: Simon Froger <[email-masked]>
Date: Sun, 22 Feb 2015 11:18:51 +0100

Bonjour.

Je suis en train de construire une fonction musicale en scheme, dans 
laquelle j'ai besoin de détecter si la note traitée fait l'objet d'un 
départ de crochet d'analyse (\startGroup).

Cette fonction est de type :

maFonction = #(define-music-function

(parser location myNote)

(ly:music?)
[définition de ma fonction...]

)

Si je rentre :

\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))

Si j'ai bien compris, à l'intérieur de la liste : (ly:music-property 
myNote 'articulations)
je dois trouver l'élément : (make-music 'NoteGroupingEvent 
'span-direction -1)
pour avoir une fonction de type :  (if [monElement est présent dans 
maListe] [fais ceci] [sinon fais cela])
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...

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Mon, 23 Feb 2015 09:20:47 +0100

Bonjour Simon,

Malgré ces échecs je ne vois pas autre chose que :
(if (member monElement maListe) ...

Pierre

Le 22 février 2015 11:18, Simon Froger <[email-masked]> a écrit :

> je dois trouver l'élément : (make-music 'NoteGroupingEvent 'span-direction
> -1)
> _______________________________________________
> liste de diffusion lilypond-user-fr
> [email-masked]
> https://lists.gnu.org/mailman/listinfo/lilypond-user-fr
>

---

From: Gilles THIBAULT <[email-masked]>
Date: Tue, 24 Feb 2015 01:30:51 +0100

> > présent dans"... J'ai essayé successivement "memq", "memv" et "member",

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

---

From: Siphon <[email-masked]>
Date: Tue, 24 Feb 2015 06:34:29 -0700 (MST)

Gilles THIBAULT wrote
>  (make-music 'NoteGroupingEvent ...)

Merci, voilà qui m'avance déjà pas mal... Maintenant que j'ai filtré les
notes qui contiennent 'NoteGroupingEvent, si je veux sélectionner celles
dont 'span-direction = -1 (départ de crochet), est-ce que je peux utiliser
cette même fonction extract-named-music ?

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Detection-d-une-propriete-de-NoteEvent-par-scheme-tp7582272p7582286.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Gilles THIBAULT <[email-masked]>
Date: Tue, 24 Feb 2015 22:55:28 +0100

> cette même fonction extract-named-music ?
Il suffit de filtrer la liste obtenue
  (filter 
     (lambda(m)
         (= (ly:music-property m 'span-direction 0) -1))
      ma-liste-de-NoteGrouping)

-- 
Gilles

---

From: Siphon <[email-masked]>
Date: Thu, 26 Feb 2015 04:38:21 -0700 (MST)

Parfait, ça marche !

Maintenant, si je veux retourner la note sélectionnée en lui enlevant la
propriété 'NoteGroupingEvent de 'articulations (pour la mettre sur une autre
note)... J'ai essayé :

ainsi que :

mais ça marche pô...

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Detection-d-une-propriete-de-NoteEvent-par-scheme-tp7582272p7582295.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Siphon <[email-masked]>
Date: Fri, 27 Feb 2015 04:19:00 -0700 (MST)

Bon, finalement, j'ai trouvé (suffisait de chercher...) :

Un grand merci pour votre aide !

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Detection-d-une-propriete-de-NoteEvent-par-scheme-tp7582272p7582301.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.