Subject: pitch-semitone et notation absolute

From: Daniel Cartron <[email-masked]>
Date: Mon, 13 Apr 2015 08:00:10 +0200

Bonjour,

Si je saisis ma musique en  \relative je n'ai aucun pb pour récupérer et 
traiter le pitch-semitone, mais si je la note en absolute j'ai une erreur.

music = \relative g' {   g } fonctionne sans pb.

music =  {   g' }
me fait l'erreur suivante :

In procedure ly:music-property in expression (ly:music-property relativeMusic 
(quote elements)):

 Wrong type argument in position 1 (expecting Music): ()

Qqun peut m'expliquer pourquoi et comment faire fonctionner pitch-semitone 
autant en absolu qu'en relatif ?

-- 
Cordialement, Daniel Cartron
« Tomber est permis ; se relever est obligatoire. »
Proverbe russe

---

From: Gilles THIBAULT <[email-masked]>
Date: Mon, 13 Apr 2015 15:05:39 +0200

> traiter le pitch-semitone, mais si je la note en absolute j'ai une erreur.

ly:pitch-semitones ?

%%%%%%%%%%%%%%%%%%
%music = \relative c' { c d e f g c e }
music = { c' d' e' f' g' c'' e''}

#(let ((pitches (map (lambda(x)(ly:music-property x 'pitch))
                     (extract-named-music music 'NoteEvent))))
   (display "Nombre de 1/2 tons à partir du do central :\n")
   (for-each
    (lambda(x)
      (format #t "~a\t -> ~2,' d\n" x (ly:pitch-semitones x)))
    pitches))
%%%%%%%%%%%%%%%%%%%

-- 
Gilles

---

From: Daniel Cartron <[email-masked]>
Date: Mon, 13 Apr 2015 16:09:20 +0200

> ly:pitch-semitones ?

OK si ça marche comme ça c'est que j'ai qq chose de pas correct dans ma 
fonction à moi. J'essaye de c omprendre sinon j'envoie un exemple minimaliste.

Merci.

-- 
Cordialement, Daniel Cartron
« On a beau avoir une santé de fer, on finit toujours par rouiller. »
Jacques Prévert

---

From: Daniel Cartron <[email-masked]>
Date: Mon, 13 Apr 2015 17:50:03 +0200

> fonction à moi. J'essaye de c omprendre sinon j'envoie un exemple

Je suis décidément peu doué pour piger ces finctions scheme mmusicales... J'ai 
pas réussi à adapter ma fonction à la tienne ni l'inverse, mm le fichier 
minimaliste ci-dessous ne marche pas, j'ai dû retirer un truc de trop ou pas 
aseez...

De tte façon ce que j'utilise c'est du code pompé qq part ailleurs et que j'ai 
essayé d'adapter, créer un truc comme ça à moi tout seul, pas possible...

En fait ce que je cherche à faire c'est :
- récupérer la métrique s'il y en a (et à chaque changement) ;
- pour chaque note, récupérer le semitones et les articulations (ensuite je 
sais traiter pour ce que je veux faire) ;
- si c'est un accord, il faut que je puisse traiter aussi mais il faudra que 
je récupère les mm infos pour chacune des notes que pour une note isolée ;
- ajouter un markup (mettons pour simplifier la valeur de semitones) à chaque 
note.

C'est certainement tout simple pour plein d'entre vous qui connaissez le 
scheme mais moi qu'est-ce que je galère !...

\version "2.16.0"

#(define (parse-music mus-elt)
  (let 
    (
      (semi-tone (ly:pitch-semitones (ly:music-property mus-elt 'pitch)))
      (articulations (ly:music-property mus-elt 'articulations))
    )
    (set! note-refs (cdr(assoc (- semi-tone semitone-offset) kbdOut)))
    (for-each 
      (lambda (arti)
        (if (eq? (ly:music-property arti 'name) 'ArticulationEvent)
          (display (ly:music-property arti 'articulation-type))
        )
        (if (eq? (ly:music-property arti 'name) 'FingeringEvent)
          (display (ly:music-property arti 'articulation-type))
        )
      )
       articulations
       (display semi-tone)
     )
     mus-elt
   )
)

makeTab = #(define-music-function (parser location mus) (ly:music?)
   (let* (
          (relativeMusic (ly:music-property mus 'element) )
          (music-list (ly:music-property relativeMusic 'elements))
         )
     (for-each (lambda (mus-elt)
           (if (eq? (ly:music-property mus-elt 'name) 'NoteEvent)
               (parse-music mus-elt)
           )
       )
       music-list
     )
   mus
   )
)

music = \relative c' { c d e f g c e }
%music = { c' d' e' f' g' c'' e''}

#(display (makeTab music))

-- 
Cordialement, Daniel Cartron
« Bien-être : état d'esprit produit par la contemplation des ennuis d'autrui. 
»
Ambrose Bierce

---

From: Gilles THIBAULT <[email-masked]>
Date: Mon, 13 Apr 2015 23:39:29 +0200

> [...]

Telle que définie, makeTab est une fonction Lilypond et non schème : il faut l' 
appeler par \makeTab \music

%%%%%%%%%%%%%%%%
#(define (parse-music mus-elt)
  (let 
    ((semi-tone (ly:pitch-semitones (ly:music-property mus-elt 'pitch)))
     (articulations (ly:music-property mus-elt 'articulations)))
    (for-each 
      (lambda (arti)
        (if (eq? (ly:music-property arti 'name) 'ArticulationEvent)
          (format #t "Articulation : ~a\n" 
                    (ly:music-property arti 'articulation-type)))
        (if (eq? (ly:music-property arti 'name) 'FingeringEvent)
          (format #t "Digit : ~a\n" 
                    (ly:music-property arti 'digit))))
       articulations)
     ;(display-scheme-music mus-elt)
     (format #t "Semitone : ~a\n-------------\n" semi-tone))
     mus-elt)

makeTab = #(define-music-function (parser location mus) (ly:music?)
(let ((notes (extract-named-music mus 'NoteEvent)))
   (for-each parse-music notes)
   mus))

music = \relative c' { c d-> e f g c-1 e }
%music = { c' d' e' f' g' c'' e''}

 { \makeTab \music }

-- 
Gilles