Re: brainstorming a really smart system engraver
Hi, 2014-08-28 1:40 GMT+02:00 Kieren MacMillan kieren_macmil...@sympatico.ca: Hi all, I think that issue 3518 (pushed recently) does just this: https://code.google.com/p/lilypond/issues/detail?id=3518 It doesn't do the automatic AI nightmare part. Yes, unfortunately... Yes, sorry - i should've trimmed quoted email better. However, it provides the low level machinery for pulling in the maximally required number of staves between automatic or manual line breaks, where the requirement is determined by working with keep-alive-interfaces and tags on the various staff variants. That could be helpful! I still need to wrap my head around how this framework/machinery works (or doesn’t) with true content-presentation separation; the example on the Google Code page has multiple \context Staff” calls buried in the \violins note definition, which to my mind mixes content with presentation in an unfortunate way. I think you looked at an earlier work-in-progress snippet - in the attachment you can find the final version. Instead of having music jump between staves, it typesets everything in two variants (divided and not) and specifies what should be visible at which times. Seems to be the right way to separate content and presentation. It's a solid framework for a solid part of the job. I’ll be interested in my testing to see what percentage of real-world scenarios this part represents. The important thing to note is that this framework does _not_ require manual tampering with line breaks to arrive at correct results. That is a critical and wonderful feature. Indeed! best, Janek \version 2.19.13 \header { texidoc = The @code{VerticalAxisGroup.remove-layer} property can be used for typesetting temporary divisi staves where the switch to split staves is done only at line breaks such that all complex passages are rendered in separate staves. } boring = \set Staff.keepAliveInterfaces = #'() tricky = \unset Staff.keepAliveInterfaces violI=\relative d' { \boring \repeat unfold 100 d4 \tricky d g'2 \boring \repeat unfold 98 d4 \bar |. } violII=\relative g { \boring \repeat unfold 100 g4 \tricky g d'2 \boring \repeat unfold 98 g4 \bar |. } \score { \new StaffGroup \with { \consists Keep_alive_together_engraver } \new Staff \with { instrumentName = Violin I shortInstrumentName = V I \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-first = ##t \override VerticalAxisGroup.remove-layer = 1 } \violI \new Staff \with { instrumentName = Violin II shortInstrumentName = V II \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-first = ##t \override VerticalAxisGroup.remove-layer = 1 } \violII \new Staff \with { instrumentName = Violins shortInstrumentName = V III \override VerticalAxisGroup.remove-layer = 2 } \violI \\ \violII \layout { short-indent = 2\cm indent = 3\cm } } ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Kieren MacMillan kieren_macmil...@sympatico.ca writes: Hi all, I think that issue 3518 (pushed recently) does just this: https://code.google.com/p/lilypond/issues/detail?id=3518 It doesn't do the automatic AI nightmare part. Yes, unfortunately... However, it provides the low level machinery for pulling in the maximally required number of staves between automatic or manual line breaks, where the requirement is determined by working with keep-alive-interfaces and tags on the various staff variants. That could be helpful! I still need to wrap my head around how this framework/machinery works (or doesn’t) with true content-presentation separation; the example on the Google Code page has multiple \context Staff” calls buried in the \violins note definition, which to my mind mixes content with presentation in an unfortunate way. The example attached to the last comment of the related issue URL:https://code.google.com/p/lilypond/issues/detail?id=2779 goes a bit further towards creating an ad-hoc interface rather than just pulling the low-level levers. -- David Kastrup ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Janek Warchoł janek.lilyp...@gmail.com writes: 2014-08-28 1:40 GMT+02:00 Kieren MacMillan kieren_macmil...@sympatico.ca: Hi all, I think that issue 3518 (pushed recently) does just this: https://code.google.com/p/lilypond/issues/detail?id=3518 It doesn't do the automatic AI nightmare part. Yes, unfortunately... Yes, sorry - i should've trimmed quoted email better. However, it provides the low level machinery for pulling in the maximally required number of staves between automatic or manual line breaks, where the requirement is determined by working with keep-alive-interfaces and tags on the various staff variants. That could be helpful! I still need to wrap my head around how this framework/machinery works (or doesn’t) with true content-presentation separation; the example on the Google Code page has multiple \context Staff” calls buried in the \violins note definition, which to my mind mixes content with presentation in an unfortunate way. I think you looked at an earlier work-in-progress snippet - in the attachment you can find the final version. Which is still oversimplified: this is a regtest possibly pretending to be too much. The main problem with the regtest is that it typesets everything in two versions whereas a proper version should replace the single-staff variant with skips while the double-staff variant is known to win: it's not just saving unnecessary processing time, but there is no point in letting the larger horizontal space requirements of the single-staff variant determine line breaks in passages where the single-staff variant is known to be irrelevant. That's why I pointed to the different unisono/divisi issue's attachment which does a more thorough job. -- David Kastrup ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Hi all, The example attached to the last comment of the related issue URL:https://code.google.com/p/lilypond/issues/detail?id=2779 goes a bit further towards creating an ad-hoc interface rather than just pulling the low-level levers. Thanks! This looks very good in the code… but I’ll have to wait for a binary to see how the output looks/works and really stress-test the feature, since i’m still on v2.19.12 at the moment. Best, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Hi Kieren, 2012-12-14 14:47 GMT+01:00 Kieren MacMillan kieren_macmil...@sympatico.ca: Hello all, Like many people on this list, I engrave a number of choral works using Lilypond. Like a smaller subset of those people, I engrave a number of large and very large works (musicals, operas, extended choral works, etc.), which require multiple editions (full score, pianovocal score, vocal book, etc.) each with their own font sizes, system and page breaks, and so on. There are many times when two or more of my vocal or choral lines share material — for example, in my Wither's Carol, the entire first verse (with the exception of a single two-measure chunk) is in choral unison (meaning everyone singing the same notes and words in their own usual octave) — whereas there are other very contrapuntal sections where material is totally independent. Hence, there are sections where a score COULD be adequately represented using only 1 choral staff, and other sections that require 2 or 3 or 4 (or even more) independent staves. Ultimately, I would like to have Lilypond choose the correct number of staves so that horizontal and vertical spacing is optimal, using partcombine (or 'partexplode'?), cueing, etc., to accomplish its task. I realize this is an AI nightmare and well outside Lilypond's current scope. So as a half-measure, I would love to be able to tag certain sections as requires X staves, and then have Lilypond choose the least number of required staves based on system/line breaking. As I [manually] change the line breaks, the systems would automagically expand or contract as necessary/possible to accommodate the new layout. Unfortunately, the current tagging system is insufficient to do this, as far as I can tell. Can anyone think of a reasonably easy way to implement this feature? If so, I'll be happy to sponsor it. I think that issue 3518 (pushed recently) does just this: https://code.google.com/p/lilypond/issues/detail?id=3518 ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Janek Warchoł janek.lilyp...@gmail.com writes: Hi Kieren, 2012-12-14 14:47 GMT+01:00 Kieren MacMillan kieren_macmil...@sympatico.ca: [...] Ultimately, I would like to have Lilypond choose the correct number of staves so that horizontal and vertical spacing is optimal, using partcombine (or 'partexplode'?), cueing, etc., to accomplish its task. I realize this is an AI nightmare and well outside Lilypond's current scope. So as a half-measure, I would love to be able to tag certain sections as requires X staves, and then have Lilypond choose the least number of required staves based on system/line breaking. As I [manually] change the line breaks, the systems would automagically expand or contract as necessary/possible to accommodate the new layout. Unfortunately, the current tagging system is insufficient to do this, as far as I can tell. Can anyone think of a reasonably easy way to implement this feature? If so, I'll be happy to sponsor it. I think that issue 3518 (pushed recently) does just this: https://code.google.com/p/lilypond/issues/detail?id=3518 It doesn't do the automatic AI nightmare part. However, it provides the low level machinery for pulling in the maximally required number of staves between automatic or manual line breaks, where the requirement is determined by working with keep-alive-interfaces and tags on the various staff variants. It's a solid framework for a solid part of the job. Now a framework is not a user interface, but an experienced LilyPond user should be able to derive a good solution for him- or herself. The important thing to note is that this framework does _not_ require manual tampering with line breaks to arrive at correct results. Manual tampering might still make sense in order to not have a divisi explosion take more lines than necessary, like when a divisi passage begins close to the end of a line. But at least all lines not actually containing divisi material will not be split, and every line containing divisi material will. -- David Kastrup ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Hi all, I think that issue 3518 (pushed recently) does just this: https://code.google.com/p/lilypond/issues/detail?id=3518 It doesn't do the automatic AI nightmare part. Yes, unfortunately... However, it provides the low level machinery for pulling in the maximally required number of staves between automatic or manual line breaks, where the requirement is determined by working with keep-alive-interfaces and tags on the various staff variants. That could be helpful! I still need to wrap my head around how this framework/machinery works (or doesn’t) with true content-presentation separation; the example on the Google Code page has multiple \context Staff” calls buried in the \violins note definition, which to my mind mixes content with presentation in an unfortunate way. It's a solid framework for a solid part of the job. I’ll be interested in my testing to see what percentage of real-world scenarios this part represents. The important thing to note is that this framework does _not_ require manual tampering with line breaks to arrive at correct results. That is a critical and wonderful feature. Thanks, Kieren. ___ Kieren MacMillan, composer www: http://www.kierenmacmillan.info email: i...@kierenmacmillan.info ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Hi Xavier, Personally I would be very happy with an enhanced partcombine that could handle divisi on different staves as well. This features has been asked in the French users mailing list and is tracked as issue #2779. http://code.google.com/p/lilypond/issues/detail?id=2779 Wouldn't it be for help for you really smart system engraver? Definitely! Thanks, Kieren. ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
On 14 December 2012 14:47, Kieren MacMillan kieren_macmil...@sympatico.ca wrote: Hello all, (snip) Ultimately, I would like to have Lilypond choose the correct number of staves so that horizontal and vertical spacing is optimal, using partcombine (or 'partexplode'?), cueing, etc., to accomplish its task. (snip) Can anyone think of a reasonably easy way to implement this feature? If so, I'll be happy to sponsor it. Hi Kieren, Personally I would be very happy with an enhanced partcombine that could handle divisi on different staves as well. This features has been asked in the French users mailing list and is tracked as issue #2779. http://code.google.com/p/lilypond/issues/detail?id=2779 Wouldn't it be for help for you really smart system engraver? Cheers, Xavier -- Xavier Scheuer x.sche...@gmail.com ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
On 14 déc. 2012, at 14:47, Kieren MacMillan kieren_macmil...@sympatico.ca wrote: Hello all, Like many people on this list, I engrave a number of choral works using Lilypond. Like a smaller subset of those people, I engrave a number of large and very large works (musicals, operas, extended choral works, etc.), which require multiple editions (full score, pianovocal score, vocal book, etc.) each with their own font sizes, system and page breaks, and so on. There are many times when two or more of my vocal or choral lines share material — for example, in my Wither's Carol, the entire first verse (with the exception of a single two-measure chunk) is in choral unison (meaning everyone singing the same notes and words in their own usual octave) — whereas there are other very contrapuntal sections where material is totally independent. Hence, there are sections where a score COULD be adequately represented using only 1 choral staff, and other sections that require 2 or 3 or 4 (or even more) independent staves. Ultimately, I would like to have Lilypond choose the correct number of staves so that horizontal and vertical spacing is optimal, using partcombine (or 'partexplode'?), cueing, etc., to accomplish its task. I realize this is an AI nightmare and well outside Lilypond's current scope. So as a half-measure, I would love to be able to tag certain sections as requires X staves, and then have Lilypond choose the least number of required staves based on system/line breaking. As I [manually] change the line breaks, the systems would automagically expand or contract as necessary/possible to accommodate the new layout. Unfortunately, the current tagging system is insufficient to do this, as far as I can tell. Can anyone think of a reasonably easy way to implement this feature? If so, I'll be happy to sponsor it. Reasonably easy, no. Doable, yes. The easiest way in my mind's eye/ear would be for LilyPond to simultaneously (or sequentially if we're absolutely anti multi-threading) process different scores and then choose the best line breaks laterally across all of them, where a penalty for line breaking is (for example amongst other things) the number of collisions between notes on a staff. So, if there were n voices and voices could only be combined with adjacent voices (meaning never SB AT, for example), then you'd have 2^(n-1) possibilities of combinations, so 2^(n-1) scores to crunch starting from the end of parsing until the end of pre-processing. This would take many, many hours to implement. Cheers, MS___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel
Re: brainstorming a really smart system engraver
Hello again! I think I have the PERFECT solution to this problem, if only \quoteDuring did the following two things: 1. Quoted lyrics. 2. Observed \RemoveEmptyStaves as if the quoted portion was empty (i.e., if the quoted material did NOT stop a hara-kiri action). Then, I could simply write a single line (e.g., the soprano), and \quoteDuring it into the other choral unison parts. When another (non \quoteDuring-ed) portion of the score demanded the expansion of the score to 2 or more staves, the \quoteDuring portion would display the appropriate notes and lyrics. Does this make sense? Is it possible with some existing Lilypond features, or would it require new features? Thanks, Kieren. On 2012-Dec-14, at 08:47, Kieren MacMillan wrote: Hello all, Like many people on this list, I engrave a number of choral works using Lilypond. Like a smaller subset of those people, I engrave a number of large and very large works (musicals, operas, extended choral works, etc.), which require multiple editions (full score, pianovocal score, vocal book, etc.) each with their own font sizes, system and page breaks, and so on. There are many times when two or more of my vocal or choral lines share material — for example, in my Wither's Carol, the entire first verse (with the exception of a single two-measure chunk) is in choral unison (meaning everyone singing the same notes and words in their own usual octave) — whereas there are other very contrapuntal sections where material is totally independent. Hence, there are sections where a score COULD be adequately represented using only 1 choral staff, and other sections that require 2 or 3 or 4 (or even more) independent staves. Ultimately, I would like to have Lilypond choose the correct number of staves so that horizontal and vertical spacing is optimal, using partcombine (or 'partexplode'?), cueing, etc., to accomplish its task. I realize this is an AI nightmare and well outside Lilypond's current scope. So as a half-measure, I would love to be able to tag certain sections as requires X staves, and then have Lilypond choose the least number of required staves based on system/line breaking. As I [manually] change the line breaks, the systems would automagically expand or contract as necessary/possible to accommodate the new layout. Unfortunately, the current tagging system is insufficient to do this, as far as I can tell. Can anyone think of a reasonably easy way to implement this feature? If so, I'll be happy to sponsor it. Thanks, Kieren. ___ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel