Noms de fichiers de sortie

Bonsoir !

Je suis en train, télétravail oblige, d'écrire des exercices pour mes élèves…
Ils sont assez courts et pour chaque je crée un contexte
\score { \musique \layout{}}
et un
\score { \musique \midi{}}
dans le même fichier source,
afin d'avoir une partition accompagnée des différents fichiers midis que je convertis ensuite en .ogg pour envoyer le tout.

Les exercices sortent bien sûr en un seul pdf, et les .midi en plusieurs fichiers, et jusque là tout est parfait !

Mais voilà, je voudrais le gâteau avec la cerise dessus !

Et pour que je sois tout à fait heureux, plutôt que d'avoir des fichiers nommés :
exercice.midi, exercice-1.midi, exercice-2.midi, etc…,
j'aimerais obtenir :
exercice-1.midi, exercice-2.midi, exercice-3.midi…
c'est à dire commencer la numérotation des fichiers à 1, car généralement je nomme « 1 » le premier exercice !

Avez-vous une idée à ce sujet ?

Merci d'avance !

Olivier Geay

···

Voici un squelette de code :

\version "2.20.0"
\include "english.ly"

exI = \relative c'' {
\set Staff.instrumentName = #"I"
\key c \major
\time 3/4

c4 d e

}

%%% partition %%%

\score {
\exI
\layout{}
}

%%% midi %%%

\score {
\exI
\midi{}
}

\score {
\exI
\midi{}
}

\score {
\exI
\midi{}
}

En intégrant les scores dans des book avec des #(define output-suffix "x")

\version "2.20.0"
\include "english.ly"

exI = \relative c'' {
\set Staff.instrumentName = #"I"
\key c \major
\time 3/4

c4 d e

}

%%% partition %%%

\book {
\score {
\exI
}
}

%%% midi %%%

\book {
#(define output-suffix "1")
\score {
\exI
\midi{}
}
}

\book {
#(define output-suffix "2")
\score {
\exI
\midi{}
}
}

\book {
#(define output-suffix "3")
\score {
\exI
\midi{}
}
}

···

Le 03/04/2020 à 21:21, Olivier Geay a écrit :

Et pour que je sois tout à fait heureux, plutôt que d'avoir des
fichiers nommés :
exercice.midi, exercice-1.midi, exercice-2.midi, etc…,
j'aimerais obtenir :
exercice-1.midi, exercice-2.midi, exercice-3.midi…
c'est à dire commencer la numérotation des fichiers à 1, car
généralement je nomme « 1 » le premier exercice !

Avez-vous une idée à ce sujet ?

--
Vincent Gay
Envoyé depuis mon saxo-phone :slight_smile:
http://blog.vintherine.org/ - http://photos.vintherine.org/

Grmblbl ça devrait être 0, on n’est pas chez les romains ici… gmblblbl

Enfin, voici comment l’obtenir (il suffit en gros de recopier un gros
bout du fichier scm/lily-library.scm) :

%%%%

#(define (my-print-book-with book process-procedure)
   (define (get-current-filename book)
     (or (paper-variable book 'output-filename)
         (ly:parser-output-name)))
   (define (get-current-suffix book)
     (let ((book-output-suffix (paper-variable book 'output-suffix)))
       (if (not (string? book-output-suffix))
           (ly:parser-lookup 'output-suffix)
           book-output-suffix)))
   (define (get-outfile-name book)
     (let* ((base-name (get-current-filename book))
            (output-suffix (get-current-suffix book))
            (alist-key (format #f "~a~a" base-name output-suffix))
            (counter-alist (ly:parser-lookup 'counter-alist))
            (output-count (assoc-get alist-key counter-alist 1)) ; 0))
            (result base-name))
       (if (string? output-suffix)
           (set! result
                 (format #f "~a-~a"
                         result
                         (string-regexp-substitute
                          "[^-[:alnum:]]" "_"
                          output-suffix))))
       ; (if (> output-count 0)
       (set! result (format #f "~a-~a" result output-count)); )

       (ly:parser-define! 'counter-alist
                          (assoc-set! counter-alist alist-key (1+
output-count)))
       (set! current-outfile-name result)
       result)) :wink:
   (let* ((paper (ly:parser-lookup '$defaultpaper))
          (layout (ly:parser-lookup '$defaultlayout))
          (outfile-name (get-outfile-name book)))
     (process-procedure book paper layout outfile-name)))

#(define-public (print-book-with-my-defaults book)
   (my-print-book-with book ly:book-process))

#(define toplevel-book-handler print-book-with-my-defaults)

%%%%

Bon courage !

V.

···

On 4/3/20, Olivier Geay <****@****> wrote:

c'est à dire commencer la numérotation des fichiers à 1, car
généralement je nomme « 1 » le premier exercice !

Il y a plus simple, on a la commande \bookOuputSuffix qui fait ça :
http://lilypond.org/doc/latest/Documentation/notation/output-file-names.fr.html
(mais c’est moins marrant que mon gros pâté de Scheme, qui fait tout
automatiquement :slight_smile:

V.

···

On 4/3/20, Vincent Gay <****@****> wrote:

En intégrant les scores dans des book avec des #(define output-suffix "x")

C'est vrai que la page de Scheme, ça déchire grave !!!
Mais pour moi qui aime maîtriser les outils que j'utilise, me voilà
carrément à la ramasse !

Et à la sortie j'ai :
exercice-1.midi
exercice-1-1.midi
exercice-1-2.midi

Et là, si je plonge dans le scheme, je vais droit en réanimation, ce qui
n'est pas conseillé en ce moment…

La solution de Vincent, bien que manuelle, me semble plus raisonnable et
accessible !

Sinon j'ai tenté aussi le

\bookOuputSuffix

Mais ça ne veut pas faire :

Erreur : chaîne d'échappement inconnue : « \bookOuputSuffix »
\bookOuputSuffix "1"

C'est grave docteur ?

···

Le 03/04/2020 à 23:19, Valentin Villenave a écrit :

On 4/3/20, Vincent Gay <****@****> wrote:

En intégrant les scores dans des book avec des #(define output-suffix "x")

Il y a plus simple, on a la commande \bookOuputSuffix qui fait ça :
http://lilypond.org/doc/latest/Documentation/notation/output-file-names.fr.html
(mais c’est moins marrant que mon gros pâté de Scheme, qui fait tout
automatiquement :slight_smile:

V.

Et à la sortie j'ai :
exercice-1.midi
exercice-1-1.midi
exercice-1-2.midi

Ça, ça doit vouloir dire que vous avez plusieurs \score mais pas
plusieurs \book pour les fixhiers midi.

Erreur : chaîne d'échappement inconnue : « \bookOuputSuffix »
   \bookOuputSuffix "1"

Il manque un t…

V.

···

On 4/3/20, Olivier Geay <****@****> wrote:

… Et ça vient de moi. Allez, dodo le pépé vévé.

V.

···

On 4/3/20, Valentin Villenave <****@****> wrote:

Il manque un t…

Euh…

Effectivement, il manquait les \book, mais une fois rajoutés c'est
retour à la case départ avec
exercice.midi
exercice-1.midi
exercice-2.midi

Quant au \bookOutputSuffix, effectivement, avec un t, c'est mieux !

Sur quoi je vais aussi me mettre à l' \horizonale…

Merci beaucoup !

Olivier Geay

···

Le 03/04/2020 à 23:38, Olivier Geay a écrit :

C'est vrai que la page de Scheme, ça déchire grave !!!
Mais pour moi qui aime maîtriser les outils que j'utilise, me voilà
carrément à la ramasse !

Et à la sortie j'ai :
exercice-1.midi
exercice-1-1.midi
exercice-1-2.midi

Et là, si je plonge dans le scheme, je vais droit en réanimation, ce qui
n'est pas conseillé en ce moment…

La solution de Vincent, bien que manuelle, me semble plus raisonnable et
accessible !

Sinon j'ai tenté aussi le

\bookOuputSuffix

Mais ça ne veut pas faire :

Erreur : chaîne d'échappement inconnue : « \bookOuputSuffix »
\bookOuputSuffix "1"

C'est grave docteur ?

Le 03/04/2020 à 23:19, Valentin Villenave a écrit :

On 4/3/20, Vincent Gay <****@****> wrote:

En intégrant les scores dans des book avec des #(define
output-suffix "x")

Il y a plus simple, on a la commande \bookOuputSuffix qui fait ça :
http://lilypond.org/doc/latest/Documentation/notation/output-file-names.fr.html

(mais c’est moins marrant que mon gros pâté de Scheme, qui fait tout
automatiquement :slight_smile:

V.

Pourtant chez moi j’obtiens bien -1.midi, -2.midi etc:

%%%%

#(define (my-print-book-with book process-procedure)
   (define (get-current-filename book)
     (or (paper-variable book 'output-filename)
         (ly:parser-output-name)))
   (define (get-current-suffix book)
     (let ((book-output-suffix (paper-variable book
                                               'output-suffix)))
       (if (not (string? book-output-suffix))
           (ly:parser-lookup 'output-suffix)
           book-output-suffix)))
   (define (get-outfile-name book)
     (let* ((base-name (get-current-filename book))
            (output-suffix (get-current-suffix book))
            (alist-key (format #f "~a~a" base-name output-suffix))
            (counter-alist (ly:parser-lookup 'counter-alist))
            (output-count (assoc-get alist-key
                                     counter-alist 1)) ; 0))
            (result base-name))
       (if (string? output-suffix)
           (set! result
                 (format #f "~a-~a"
                         result
                         (string-regexp-substitute
                          "[^-[:alnum:]]"
                          "_"
                          output-suffix))))
       ; (if (> output-count 0)
       (set! result (format #f "~a-~a" result output-count)); )

       (ly:parser-define! 'counter-alist
                          (assoc-set! counter-alist alist-key
                                      (1+ output-count)))
       (set! current-outfile-name result)
       result)) :wink:
   (let* ((paper (ly:parser-lookup '$defaultpaper))
          (layout (ly:parser-lookup '$defaultlayout))
          (outfile-name (get-outfile-name book)))
     (process-procedure book paper layout outfile-name)))

#(define-public (print-book-with-my-defaults book)
   (my-print-book-with book ly:book-process))

#(define toplevel-book-handler print-book-with-my-defaults)

\book {
  \score { b1 \midi {} }
}
\book {
  \score { b1 \midi {} }
}
\book {
  \score { b1 \midi {} }
}
\book {
  \score { b1 \midi {} }
}
\book {
  \score { b1 \midi {} }
}
\book {
  \score { b1 \midi {} }
}
\book {
  \score { b1 \midi {} }
}
\book {
  \score { b1 \midi {} }
}

%%%%

V.

···

On 4/3/20, Olivier Geay <****@****> wrote:

Effectivement, il manquait les \book, mais une fois rajoutés c'est
retour à la case départ avec