inclure un nouveau fichier .scm

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.

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&gt;

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

···

Le 12 févr. 2010 à 22:57, Philippe Hezaine a écrit :

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.
%%%%%%%%%%%%%%

Nicolas Sceaux a écrit :

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&gt;

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

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

midi-scm.ly (833 Bytes)

···

#
       (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.

Philippe Hezaine a écrit :

Par contre avec un \include j'ai eu une totale réussite jusqu'à ce
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.

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 {}
}

···

Le 13 févr. 2010 à 18:03, Philippe Hezaine a écrit :

#(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))
  ))

Nicolas Sceaux a écrit :

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 {}
}

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
        dynamicAbsoluteVolumeFunction = #my-dynamic-absolute-volume
       }
  }

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.

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

Nicolas

···

Le 14 févr. 2010 à 16:03, Philippe Hezaine a écrit :

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
      dynamicAbsoluteVolumeFunction = #my-dynamic-absolute-volume
       }
  }

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.