Am Wednesday, 12. December 2007 schrieb Reinhold Kainhofer:
> Am Tuesday, 11. December 2007 schrieb Trevor Daniels:
> > I thought my suggestion might be too much manual
> > effort, but it's the best I have to offer. If
> > \partcombine worked the way you want that would be
> > the obvious solution, but it doesn't.
>
> Yes, apparently, the issue that bites me is that partcombine detects even a
> single note played by only one instrument as a "solo". So partcombine will
> (almost) never print out a rest in parallel with a note in the other
> instrument. In real scores, there is a de-facto threshold before a rest in
> one instrument is regarded as a solo in the other instrument. If
> partcombine allowed such a (ideally user-settable) threshold property, it
> would fit my needs just fine....
I now made a file with some test cases for the part combination with comments
in the .ly file (Attached). One can
clearly see several bugs..
> > As Mats said,
> > we know \partcombine is lacking but I'm not aware of
> > any development effort going into it at present.
>
> I would actually work on it to fix my problems.
Actually, after enabling the debug output, the structure of the
determine-split-list function in scm/part-combiner.scm is quite clear (the
result is a simple list of ( moment . state ) pairs...).
On the other hand, I found the following patch on the mailing list:
http://lists.gnu.org/archive/html/lilypond-devel/2005-07/msg00046.html
http://lists.gnu.org/archive/html/lilypond-devel/2005-07/msg00050.html
I haven't looked closely at the patch, but judging from the description, it
does exactly what I had planned to do in determine-split-list. Does anyone
know why these patches never got applied? Are there any problems with them?
Or was there simply not enough interest?
I also read in some messages that the current implementation of the
partcombiner is a hack and should be replaced by a version that uses
streams... What's all this about? Are there still plans to significantly
rewrite the partcombiner? If so, I won't touch it and invest time in code,
which will later be replaced anyway.
Cheers,
Reinhold
--
------------------------------------------------------------------
Reinhold Kainhofer, Vienna University of Technology, Austria
email: [EMAIL PROTECTED], http://reinhold.kainhofer.com/
* Financial and Actuarial Mathematics, TU Wien, http://www.fam.tuwien.ac.at/
* K Desktop Environment, http://www.kde.org, KOrganizer maintainer
* Chorvereinigung "Jung-Wien", http://www.jung-wien.at/
\version "2.11.35"
% Each measure displays one feature of partcombine
\header {
title = "Stress-testing \partcombine"
subtitle = "Each measure tests one feature of the part combination"
}
% TODO:
% * spanners (slurs, hairpins, etc) in swallowed voices)
% * lyrics
% * also check the existing regression tests for important features!
\new Staff <<
\key c \major
\time 4/4
\partcombine
\relative c'' { \dynamicUp
% Whole-measure Rests are combined
R1 | %2
% Solo 2, voice 1 is quiet, dynamics directions taken from the correct
voice
R1 | %3
% a2, notes of same length are put on one stem, different lengths use
% different stems (with appropriate stem directions)
b2.\f b4 | %4
% the other voice might have a short rest where one voice has a note =>
% should not be interpreted as solo, in particular, when the "solo"
instrument
% has a long note, during which the other instrument sets in
% BUG: Currently, the note IS detected as a solo
b1 | %5
% one voice might stop earlier and have a rest, while the other instrument
% keeps playing -> display the rest
b1 | %6
% If both instruments play the same notes, use unisono "a2", notes are
printed
% only once
b2. r4 | %7
% dotted notes in unisono should only show the dots once (reported bug
% on mailinglist, fixed now)
b2. b8. r16 | %8
% notes differing only by different accidentals should be shown twice with
% the correct accidentals
% BUG: This does not work, only the accidentals of the first voice are
displayed!
gis4 g4 ges4 geses4 | %9
% voice crossings don't ever combine the stems to make the instrument
clear
c,4 d2 fis8 fis8 | %10
% beams with crossings don't combine, either, other beams should (except
% when they have a unisono note, because otherwise the second instrument
% would not know that it should also play the unisono note!)
fis8[ fis fis fis] c'[ c] c[ c] | %11
% chord combination should be customizable, currently, only notes
differing
% at most an octave are combined (difference hardcoded to 8!)
c4 f a c | %12
% if a note has a long note and the other plays short notes with rests,
% the rests should be shown
c,1 | %13
% time, clef and key signatures might be different! How to handle them???
% C urrently, the settings of the first voice are used
\time 2/2 \key f \major \clef "bass"
bes4 c d2 | %14
% BUG: clef changes are NOT applied if the associated voice is quiet
% immediately afterwards, but the other voice has notes!
\time 4/4 \key c \major \clef "treble"
% Minimum length of solo for solo-detection should be configuration
% (currently, even a single note is detected as a solo!)
r4 r4 r4 c4 | %15
\clef "treble"
% Minimum length of solo for solo-detection should be configuration
% (currently, even a single note is detected as a solo!)
c4 r4 r4 c4 | %16
% Rests with different length at the beginning of a measure cause
problems!
% They can't be combined easily, but they are also not printed out both!
r4. c8 r8 c8 c4 | %17
% BUG: if one voice has a long note at the very end, and the other
instrument
% plays a note, lilypond wrongly detects this as a solo of the other
% instrument!!!
g1 |
}
\relative c' { \dynamicDown
R1 | %2
f2.\f f4 | %3
f2. f8 f8 | %4
r4 f4 f2 | %5
f2. r4 | %6
f2. r4 | %7
b2. b8. r16 | %8
g4 gis4 g4 ges4 | %9
c4 g2 g8 c,8 | %10
c'8[ g fis c] [c' g] g[ c,] | %11
b'4 g a c, | %12
g'4 r g r | %13
\key g\major fis2 g | %14
\key c\major g4 g4 g g | %15
g4 g4 g g | %16
r8 g8 g4 r4 g4 | %17
c,2 c2 \bar"|."
}
>>_______________________________________________
lilypond-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-devel