Re: brainstorming a really smart system engraver

2014-08-28 Thread Janek Warchoł
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

2014-08-28 Thread David Kastrup
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

2014-08-28 Thread David Kastrup
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

2014-08-28 Thread Kieren MacMillan
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

2014-08-27 Thread Janek Warchoł
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

2014-08-27 Thread David Kastrup
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

2014-08-27 Thread Kieren MacMillan
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

2012-12-18 Thread Kieren MacMillan
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

2012-12-16 Thread Xavier Scheuer
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

2012-12-16 Thread m...@mikesolomon.org

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

2012-12-14 Thread Kieren MacMillan
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