On Tue, 2014-05-20 at 06:41 -0700, Knute Snortum wrote: > (Note: the above code still emits a warning: Programming error: > impossible or ambiguous (de) crescendo)
That's true - sorry, I was really commenting only on the "unspecified starting volume" warning. > One of the things I really liked about LilyPond was the ability to > compile sheet music and MIDI from the same source. That's exactly the same thought that I had when I started learning to use LilyPond - the idea of producing multiple different kinds of output for different purposes from the same source feels very attractive. > It seems to me that this behavior is getting away from that value. I > would think that in piano and choral music if you create a temporary > voice, not only do you want the original dynamic to carry over into > the temporary, you want any dynamic mark to carry over back into the > original after the temporary is over. I've often wondered the same thing - the default behavior of having a separate dynamic performer per every Voice context probably works well in cases where a Staff never contains more than a single Voice, but especially with piano music, where it's convenient to use temporary polyphony with new Voice contexts to achieve the intended layout, the default behavior of Voices can easily give unsatisfactory (or even surprising, if one doesn't know what's going on) results for MIDI unless extra care is taken to work around this behavior. > If I understand you correctly, the only way to set a dynamic change > while temporary voices are active is to set the mark on one voice, set > and omit it on the other(s), and set and omit it on the original voice > once the temporary voices are done. This seems unnecessarily complex > for a situation that I would think happens many times. This is indeed a cumbersome solution, but at least it'll likely do the job... An alternative might be to try to remove the dynamic performer from all Voice contexts, and add one to the Staff containing the voices instead (this example still uses tags to reset the MIDI velocity level from \sf to \mf to avoid the warnings): \version "2.18.2" \language "english" upper = \relative c'''' \new Voice \with { \remove "Dynamic_performer" } { | gf16-. \f ef-. df-. cf-. bf ( \sf df cf af ) gf-. \sf ef-. df-. cf-. bf ( \sf df cf af ) | << \new Voice \with { \remove "Dynamic_performer" } { bf4 -\tag #'midi \mf -\< a16 ( \sf gf' f ef ) bf4 -\tag #'midi \mf \< a16 ( \sf gf' f ef ) } \new Voice \with { \remove "Dynamic_performer" } { <af, f>16 q q q a4 <af f>16 q q q a4 } >> } \score { \new Staff = "up" { \clef treble \keepWithTag #'layout \upper } \layout { } } \score { \new Staff = "up" \with { \consists "Dynamic_performer" } { \keepWithTag #'midi \upper } \midi { \tempo 4 = 120 } } However, I'm not entirely sure how reliably this is guaranteed to work (if at all) since I believe that at least some of the MIDI-related performers are targeted to work correctly only within a particular type of context and therefore cannot really be moved entirely freely between different contexts. With this particular example, however, the end result sounds to me as if the dynamic changes would get applied to all Voices in the parallel music expression. -- Heikki Tauriainen _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user