Subject: EasyHeads avec chiffrage (simple) des intervalles

From: Odalric-Ambrym Maillard <[email-masked]>
Date: Sat, 6 Oct 2012 20:40:47 +0200

Bonjour,

Voilà, j'aimerais créer un graveur de notes de musiques à la maniere du
mode easyHeads (ce mode affiche pour les debutants le nom d'une note à
l'interieur du dessin de sa tete)
mais qui puisse afficher, à l'interieur de la note, l'intervalle entre la
note courante et une note de référence.
De plus,  j'aimerais que la note de reference ait pour valeur par defaut la
fondamentale correspondant a l'armure courante (ex: La en La majeur),
mais puisse etre modifiee. L'idee est de suivre une grille (comme en Jazz).
Pour une progression II V I en La par exemple, j'aimerais pouvoir specifier
que la note de reference est un Si, puis un Mi puis un La.
Ensuite, les intervalles seraient chiffrées par rapport a cette note de
reference.

Par exemple, au lieu de voir s'afficher (dsl, j'ai pas de dessin...)
(La)   La Si Do Re Mi Fa# Sol,
on aurait par exemple, en choisissant La comme reference (bon, peu importe
la notation, du moment que ca reste lisible et explicite)
(La) La(1) Si(2) Do(3-) Re(4) Mi(5) Fa#(6) Sol(7-)

J'espère que la question est suffisamment claire.

Cote solutions, pour l'instant j'ai trouve ici(
http://lilypond.org/doc/v2.17/Documentation/notation/note-heads.fr.html)
un graveur chiffre indiquant le degre de la note (mais pas le chiffrage de
l intervalle) dans la gamme:

Code
#(define Ez_numbers_engraver
   (make-engraver
    (acknowledgers
     ((note-head-interface engraver grob source-engraver)
      (let* ((context (ly:translator-context engraver))
         (tonic-pitch (ly:context-property context 'tonic))
         (tonic-name (ly:pitch-notename tonic-pitch))
         (grob-pitch
          (ly:event-property (event-cause grob) 'pitch))
         (grob-name (ly:pitch-notename grob-pitch))
         (delta (modulo (- grob-name tonic-name) 7))
         (note-names
          (make-vector 7 (number->string (1+ delta)))))
    (ly:grob-set-property! grob 'note-names note-names))))))

#(set-global-staff-size 26)

\layout {
  ragged-right = ##t
  \context {
    \Voice
    \consists \Ez_numbers_engraver
  }
}

\relative c' {
  \easyHeadsOn
  c4 d e f
  g4 a b c \break

  \key a \major
  a,4 b cis d
  e4 fis gis a \break

  \key d \dorian
  d,4 e f g
  a4 b c d
}

C'est bien sur un bon debut, notamment je pense que le changement de note
de reference se fait deja ici automatiquement lors du changement de grille
(cf. \key d \dorian),
mais ca ne fait pas completement ce que je veux pour le chiffrage des
intervalles, et surtout, je ne sais pas du tout comment modifier ce graveur
(si je peux comprendre a peu pres la syntaxe, je n'ai strictement aucune
idee de la signification des differents noms de proprietes/fonctions).
J'imagine qu'une modification mineure et tres simple pour la plupart
d'entre vous permet de faire ce que je veux :)

Pouvez-vous me donner un petit coup de main ?
(Autre pb mineur, le code precedent ne compile pas chez moi ... )

Bonne soirée.