[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: midifile output name
From: |
Thomas Morley |
Subject: |
Re: midifile output name |
Date: |
Sat, 1 Oct 2016 02:35:18 +0200 |
2016-10-01 2:22 GMT+02:00 Thomas Morley <address@hidden>:
> 2016-09-29 20:19 GMT+02:00 bart deruyter <address@hidden>:
>> Hi all,
>>
>> I've got a collection of etudes for my students here, included in one file,
>> to create one pdf.
>> I've enabled midi, but now I've got a bunch of midi files which all have the
>> name of the lilypond document, like this:
>>
>> The .ly file with the collection is called "Study collection.ly"
>> The midi files then are named:
>> Study collection.midi
>> Study collection-1.midi
>> Study collection-2.midi,
>> etc.. (up to 30 for now).
>>
>> When I render one etude separately, the midi file gets the name of that
>> separate file (e.g. andante.ly gives andante.midi), but when rendered in the
>> collection file it would be named "Study collection-25.midi" because it is
>> the 25th included file.
>>
>> All etudes are in separate lilypond files with a "\score", so I was
>> wondering if there is a way to define a custom filename for the midi-file,
>> for each score, which gets passed through to the collection file.
>>
>> Is this possible?
>>
>> thx,
>>
>> Bart
>
>
>
> You could try the below.
>
> Please note:
> - it heavily messes with well hidden internals
> - it's not tested apart from the included example
> - there may be bleed over, while compiling multiple files (not tested)
> - the default behaviour is not longer available as long as these
> definitions are applied
>
>
> \version "2.19.48"
>
> %% c/p from midi.scm
> #(define (performance-name-from-header header)
> (define (metadata-lookup-output overridevar fallbackvar)
> (let* ((overrideval (ly:modules-lookup (list header) overridevar))
> (fallbackval (ly:modules-lookup (list header) fallbackvar))
> (val (if overrideval overrideval fallbackval)))
> (if val (ly:encode-string-for-pdf (markup->string val)) "")))
> (if (null? header)
> ""
> (metadata-lookup-output 'midititle 'title)))
>
%% safer to use:
%% taken from midi.scm and changed
#(define-public (write-performances-midis-alt performances basename . rest)
(let ((midi-ext (ly:get-option 'midi-extension)))
(let
loop
((perfs performances)
(count (if (null? rest) 0 (car rest))))
(if (pair? perfs)
(let ((perf (car perfs)))
(ly:performance-write
perf
(if (string-null?
(performance-name-from-header (ly:performance-header perf)))
(if (> count 0)
(format #f "~a-~a.~a" basename count midi-ext)
(format #f "~a.~a" basename midi-ext))
(format #f "~a.~a"
(performance-name-from-header (ly:performance-header perf))
midi-ext))
(performance-name-from-header (ly:performance-header perf)))
(loop (cdr perfs) (1+ count)))))))
> %% tell lily to use the changed definition
> #(module-set!
> (resolve-module '(lily))
> 'write-performances-midis
> write-performances-midis-alt)
>
>
> \book {
> \score {
> { \repeat unfold 10 c'4 }
> \header { midititle = "my-c-midi-name" }
> \layout {}
> \midi {}
> }
>
> \score {
> { \repeat unfold 10 d'4 }
> \header { midititle = "my-d-midi-name" }
> \layout {}
> \midi {}
> }
>
> \score {
> { \repeat unfold 10 e'4 }
> \header { midititle = "my-e-midi-name" }
> \layout {}
> \midi {}
> }
> }
>
Cheers,
Harm