> On 9 Sep 2024, at 23:10, Morten Lemvigh <morten.lemv...@gmail.com> wrote: > > Hi, > > I am experimenting with a system to create choir rehearsal midi files. A part > of that is to unfold repeats. I have a function that accepts a score and > creates a new score. The steps are: > 1. Extract the music from the score > 2. Unfold the repeats > 3. Make a new score > > For some reason only the first note of the score is repeated and I get a > "programming error: Moment is not increasing. Aborting interpretation." > > When I try to display-scheme-music of the unfolded music it looks like > everything is there, but it is not included in the final score. > I have tried to create a minimal example that reproduces the issue. It is > pasted below. > > So the question is: what have I misunderstood? :-) > > Best regards, > Morten > > \version "2.24.2" > > choirScore = \score { > \new Staff { > \relative c' { > \repeat volta 2 { > c d e f > } > } > } > } > > make-rehearsal = > #(define-scheme-function > (the-score) > (ly:score?) > (ly:make-score (unfold-repeats-fully (ly:score-music the-score)))) > > new-score = #(make-rehearsal choirScore) > \new-score
What I found very useful in my case for the rehearsal tracks is the rehearsalMidi function from the openlilylib gridly grit-templates include, which I’ve been using stand-alone in my own (historically grown and improved) choir arrangements. https://github.com/openlilylib/snippets/blob/master/ly/gridly/grid-templates.ily As an inspiration here’s how I’ve organised things in my system (which no doubt could be improved): A folder <songname> per song Variables for each of the voices’ notes (sopMusic, altMusic etc) and each of the voices lyrics (sopWords, altWords etc) each defined in a file named after the voice (soprano.ily, alto.ily etc) The main composition file bringing it all together <songname>.ly ``` \version "2.19.3" \header { … } \paper { first-page-number = 1 } global = { % defines tempo, initial key, time signature } \include "soprano.ily" \include "alto.ily" \include "tenor.ily" \include "basso.ily" \include "../temlates/SATB.ily" ``` Include-files to setup a staff per voice in a templates folder e.g. for Soprano (soprano.ily): ``` \version "2.22.0" soprano_Staff = { \new Staff = soprano \with { instrumentName = "Soprano" shortInstrumentName = "S" }<< \new Voice = "soprano" { \clef "treble" \global \sopMusic } \tag #'lyrics {\new Lyrics \with {alignBelowContext=sopStaff} \lyricsto soprano \sopWords} >> } ``` Include-file for an entire arrangement layout that includes the relevant per-voice templates and then goes on to defined the overall music as the allMusic variable ``` allMusic = { << \metronome \new ChoirStaff << \soprano_Staff \alto_Staff \tenor_Staff \basso_Staff >> % end of ChoirStaff >> % end of full system } ``` Which is then used both to create a full SATB-score sheet music as per ``` \book { \bookOutputSuffix "lilypond" \score { \removeWithTag #'metronome \allMusic \layout {} } } ``` A tutti-track with all music at regular volume: ``` \book { \bookOutputSuffix "tutti" \score { \unfoldRepeats { \removeWithTag #'lyrics \allMusic } \midi { \context { \Score dynamicAbsoluteVolumeFunction = #hatikwaDynamics } } } } ``` And per-voice highlighted tracks (using the rehearsal-midi function, which, among others, unfolds the music and lowers the volume of all voices except the voice given as its argument) e.g. for the soprano group: ``` \rehearsalMidi { \removeWithTag #'lyrics \allMusic } "soprano" ```