Subject: inclure un nouveau fichier .scm

From: Philippe Hezaine <[email-masked]>
Date: Fri, 12 Feb 2010 22:57:49 +0100

Bonsoir,

Quelqu'un peut-il me confirmer qu'il n'existe pas d'autres moyens pour
inclure un nouveau fichier midi.scm?

%%%%%%%%%%%%%%
...vous renommerez (avec root) le fichier source d'origine
/usr/share/lilypond/2.12.<votre version>/scm/midi.scm
en
/usr/share/lilypond/2.12.<votre version>/scm/midi.scm-old
et vous copierez
/YOUR... /PATH... /Drummer-s-Gigsaw/Le-grenier/midi.scm
vers
/usr/share/lilypond/2.12.<votre version>/scm/

ATTENTION! ATTENTION! ATTENTION!

Quand vous mettez à jour Lilypond vous devez refaire cette substitution.
%%%%%%%%%%%%%%

Ayez du bonheur.
-- 
   Phil.

---

From: Nicolas Sceaux <[email-masked]>
Date: Sat, 13 Feb 2010 12:19:57 +0100

> inclure un nouveau fichier midi.scm?

Il est tout à fait possible de charger un fichier .scm sans avoir à
modifier les fichiers originaux.  Mais il faut faire attention à quel
est le module guile courant dans ce fichier.

A priori, le module courant dans le fichier scm/midi.scm original est
le module (lily).  Il faut donc dans ton propre fichier midi.scm se
positionner dans ce module, avec :
  (define-module (lily))
Alors, tu peux mettre les définitions de fonctions que tu as modifiées
(inutile de répéter les fonctions inchangées).  Un fichier est chargé
par exemple avec la fonction load-from-path, éventuellement il faut
ajouter le répertoire qui le contient dans la variable %load-path. Voir
  <http://www.gnu.org/software/guile/manual/html_node/Loading.html>

Une autre posibilité est de mettre tes modifications dans un fichier
midi.ly, alors \include "midi.ly" peut être plus pratique que
load-from-path.

Nicolas

---

From: Philippe Hezaine <[email-masked]>
Date: Sat, 13 Feb 2010 18:03:47 +0100

> midi.ly, alors \include "midi.ly" peut être plus pratique que

Hi Nicolas,

Je n'ai ni compris ni trouvé comment me servir de load-from-path.
Par contre avec un \include j'ai eu une totale réussite jusqu'à ce
que je décommente:
      #(set-global-staff-size 16) % Pour changer la taille des portées.
dans mon fichier .ly à compiler.
Alors la console affiche: (GNU LilyPond 2.12.2)

/MA-BASE/MY-SONG.ly:28:2: Erreur : GUILE a signalé une erreur pour
l'expression débutant ici
      #
       (set-global-staff-size 16) % Pour changer la taille des portées.
Wrong type argument in position 1 (expecting Lily_parser): #f

Je joins le midi-scm.ly à inclure. Il est plus que fortement probable
qu'il y ait une erreur quelque part vu mes compétences en Scheme.
Ce qui m'étonne encore plus c'est que j'ai
     #(ly:set-option 'delete-intermediate-files #t)
qui ne bronche pas quant à lui.
Amicalement.
-- 
       Phil.

%;;;; midi.scm -- scm midi variables and functions
%;;;;
%;;;;  source file of the GNU LilyPond music typesetter
%;;;; 
%;;;; (c) 2000--2007 Jan Nieuwenhuizen <[email-masked]>

%;;;;;;;;;;;;;;;;;;
%;;; TODO:

%;; this is broken: we should not ever export variables from Scheme.

%;; define factor of total volume per dynamic marking

#(define-module (lily))
#(define-public absolute-volume-alist '(
(set! absolute-volume-alist
      (append 
      '(
	("sf" . 1.00)
	("fffff" . 0.95)
	("ffff" . 0.91)
	("fff" . 0.83)
	("ff" . 0.75)
	("f" . 0.67)
	("mf" . 0.60)
	("mp" . 0.53)
	("p" . 0.46)
	("pp" . 0.39)
	("ppp" . 0.32)
	("pppp" . 0.25)
	("ppppp" . 0.12)
	)
      absolute-volume-alist))
	))
#(define-public (default-dynamic-absolute-volume s)
  (let ((entry (assoc s absolute-volume-alist)))
    (if entry
	(cdr entry))))

---

From: Philippe Hezaine <[email-masked]>
Date: Sat, 13 Feb 2010 18:25:09 +0100

Philippe Hezaine a écrit :

> que je décommente: ...

Non! Je me gourre! Les vélocités midi ne sont pas prises en compte dans 
le Puzzle avec cet \include.
-- 
   Phil.

---

From: Nicolas Sceaux <[email-masked]>
Date: Sun, 14 Feb 2010 11:07:59 +0100

> (set! absolute-volume-alist

Ah, s'il s'agit simplement de changer les volumes associés aux
indications de nuance, alors il y a plus simple : il suffit de
modifier la variable dynamicAbsoluteVolumeFunction dans le
context Score.  Cette variable donne la fonction qui calcule le
volume.

%% Note : je n'ai pas testé si les volumes sont corrects dans le
%% fichier midi produit :
#(define my-dynamic-absolute-volume
   (let ((absolute-volume-alist '(("sf" . 1.00)
                                  ("fffff" . 0.95)
                                  ("ffff" . 0.91)
                                  ("fff" . 0.83)
                                  ("ff" . 0.75)
                                  ("f" . 0.67)
                                  ("mf" . 0.60)
                                  ("mp" . 0.53)
                                  ("p" . 0.46)
                                  ("pp" . 0.39)
                                  ("ppp" . 0.32)
                                  ("pppp" . 0.25)
                                  ("ppppp" . 0.12))))
     (lambda (s)
       (let ((entry (assoc s absolute-volume-alist)))
         (if entry
             (cdr entry))))))

\layout {
  \context {
    \Score
    dynamicAbsoluteVolumeFunction = #my-dynamic-absolute-volume
  }
}

\score {
  { c' \f d' \mp e' \pp }
  \layout {}
  \midi {}
}

---

From: Philippe Hezaine <[email-masked]>
Date: Sun, 14 Feb 2010 16:03:50 +0100

>     dynamicAbsoluteVolumeFunction = #my-dynamic-absolute-volume

Ah! Quel bonheur d'avoir un développeur sur la liste. Cela va tout
simplement éliminer cette manipulation pour l'installation du Puzzle.
Un simple \include et le tour est joué.
Un petit détail pour que tout soit parfait: je mets le \context dans le
bloc \midi au lieu du \layout

   \midi {
     \context {
       \Score

Avec midicomp je sais tout de la sortie midi de Lilypond.
Et c'est gagné! Je n'aurai jamais trouvé cela tout seul.
Un grand merci à toi, Nicolas.
-- 
   Phil.

---

From: Nicolas Sceaux <[email-masked]>
Date: Sun, 14 Feb 2010 16:48:16 +0100

> Un grand merci à toi, Nicolas.

De rien.  En fait j'ai juste cherché où était utilisée cette fonction
global-dynamic-absolute-volume que tu surchargeais.

Nicolas