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
> 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:  
email:  i...@kierenmacmillan.info
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

2014-08-28 Thread David Kastrup
Kieren MacMillan  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
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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

2014-08-28 Thread David Kastrup
Janek Warchoł  writes:

> 2014-08-28 1:40 GMT+02:00 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...
>
> 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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

2014-08-28 Thread Janek Warchoł
Hi,

2014-08-28 1:40 GMT+02:00 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...

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 2
  \boring \repeat unfold 98 d4
  \bar "|."
}

violII=\relative g {
  \boring \repeat unfold 100 g4
  \tricky 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 I&II"
		   \override VerticalAxisGroup.remove-layer = 2
		 }
<<  \violI \\ \violII  >>
  >>
  \layout {
short-indent = 2\cm
indent = 3\cm
  }
}
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


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:  
email:  i...@kierenmacmillan.info
___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

2014-08-27 Thread David Kastrup
Janek Warchoł  writes:

> Hi Kieren,
>
> 2012-12-14 14:47 GMT+01:00 Kieren MacMillan :

[...]

>> 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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


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 :
> 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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

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

On 14 déc. 2012, at 14: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.

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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

2012-12-16 Thread Xavier Scheuer
On 14 December 2012 14:47, Kieren MacMillan
 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 

___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

2012-12-15 Thread Kieren MacMillan
Hi Keith,

Amazing! I think Lilypond already does exactly what I need.
I'll draw up an example to be sure — if it works, I'll be sure to repost the 
solution.

Thanks for the hints!
Kieren.

> I don't think LilyPond remembers which items came from quoteDuring at the 
> stage 
> when removeEmptyStaves happens, but you can tell her for what periods in time 
> she should consider some notes, or lyrics, unworthy of their own staff, or 
> line. 
> See this recent thread
> 
> 


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: brainstorming a really smart system engraver

2012-12-15 Thread Keith OHara
Kieren MacMillan  sympatico.ca> writes:

> [...] 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.

> I think I have the PERFECT solution to this problem, 
> if only \quoteDuring did the following two things:
>1. Quoted lyrics.

It does quote lyrics for me. 
(It starts an empty staff but RemoveEmptyStaves cleans that up.)

A = \lyricmode{la di da di }
\addQuote "lyric" \A
<< \new Staff \new Voice = "a" {c'4 d' e' f'}
   \new Lyrics \lyricmode { \lyricsto "a" \quoteDuring "lyric"  \skip 1 }  >>

>2. Observed \RemoveEmptyStaves as if the quoted portion was empty
> (i.e., if the quoted material did NOT stop a hara-kiri action).
>

I don't think LilyPond remembers which items came from quoteDuring at the stage 
when removeEmptyStaves happens, but you can tell her for what periods in time 
she should consider some notes, or lyrics, unworthy of their own staff, or 
line. 
See this recent thread




___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


brainstorming a really smart system engraver

2012-12-14 Thread Kieren MacMillan
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-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user