PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=88
+PATCH_LEVEL=89
MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
s1
}
>
- \paper{
- \translator{
- \PianoStaffContext
- minVerticalAlign = 3.0*\staffheight;
- maxVerticalAlign = 3.0*\staffheight;
- }
-% linewidth=-1.;
- }
}
\version "1.3.59";
a2 \property VoiceCombineThread.soloADue = ##f a
}
>
- \context PianoStaff <
- \context StaffCombineStaff=one \skip 1*9;
- \context StaffCombineStaff=two \skip 1*9;
- \context StaffCombineStaff=one \partcombine StaffCombineStaff
- \context StaffCombineVoice=one \notes\relative c''
- %\context StaffCombineThread=one \notes\relative c''
+ \context PianoStaff = violi <
+ \context StaffCombineStaff=oneVioli { \clef alto; \skip 1*9;}
+ \context StaffCombineStaff=twoVioli { \clef alto; \skip 1*9;}
+ \context StaffCombineStaff=oneVioli \partcombine StaffCombineStaff
+ \context StaffCombineVoice=one \notes\relative c'
{
c4 d e f
c d e f
c d e f
c d e f
c4 d e f
- a8 a a a
- b b b b
+ a8 a a a b b b b
d1
}
- \context StaffCombineVoice=two \notes\relative c''
- %\context StaffCombineThread=two \notes\relative c''
+ \context StaffCombineVoice=two \notes\relative c'
{
c4 d e f
c d e f
c4 d e f
c2 e2
c,4 d e f
- a8 a a a
- b b b b
+ a8 a a a b b b b
b1
}
>
+ \context PianoStaff = lower <
+ \context StaffCombineStaff=oneBassi { \clef bass; \skip 1*9;}
+ \context StaffCombineStaff=twoBassi { \clef bass; \skip 1*9;}
+ \context StaffCombineStaff=oneBassi \partcombine StaffCombineStaff
+ \context StaffCombineVoice=oneB \notes\relative c
+ {
+ \clef bass;
+ c1
+ d
+ e
+ f
+ c
+ d
+ e
+ f
+ c
+ }
+ \context StaffCombineVoice=twoB \notes\relative c
+ {
+ \clef bass;
+ c1
+ d4 e d e
+ e1
+ f4 g f g
+ c1
+ d4 e d e
+ e
+ f4 g f g
+ c1
+ }
+ >
>
\paper {
#include "score-element.hh"
#include "group-interface.hh"
#include "axis-group-interface.hh"
+#include "paper-def.hh"
/*
This callback is set in the children of the align element. It does
SCM thr = me->get_elt_property ("threshold");
if (gh_pair_p (thr))
{
- threshold[SMALLER] = gh_scm2double (gh_car (thr));
- threshold[BIGGER] = gh_scm2double (gh_cdr (thr));
+ Real ss = me->paper_l ()-> get_var ("staffspace");
+ threshold[SMALLER] = ss *gh_scm2double (gh_car (thr));
+ threshold[BIGGER] = ss * gh_scm2double (gh_cdr (thr));
}
Real where_f=0;
#include "directional-element-interface.hh"
#include "side-position-interface.hh"
#include "local-key-item.hh"
+#include "paper-def.hh"
/**
Catch notes, and put them in a row. Used for aligning grace notes.
UGH UGH: separate note-spacing into separate class, and
use that to space grace notes.
*/
- SCM grsp = get_property ("graceAccidentalSpace");
+ SCM grsp = get_property ("graceAccidentalSpace") ;
if (gh_number_p(grsp))
{
/*
ugh.
*/
Real extra_space = gh_scm2double(grsp);
- SCM e = gh_cons (gh_double2scm (-extra_space), gh_double2scm (0.0));
+ SCM e = gh_cons (gh_double2scm (-extra_space * paper_l ()->get_var ("staffspace")),
+ gh_double2scm (0.0));
now_column_l_->set_elt_property ("extra-space", e);
}
}
text_p_ = new Item (b);
Side_position::set_axis(text_p_,Y_AXIS);
- SCM prop = get_property ("barNumberDirection");
- if (!isdir_b (prop))
- {
- prop = gh_int2scm (UP);
- }
- text_p_->set_elt_property ("direction", prop);
-
- SCM padding = get_property ("barNumberScriptPadding");
- if (gh_number_p(padding))
- {
- text_p_->set_elt_property ("padding", padding);
- }
- else
- {
- text_p_
- ->set_elt_property ("padding",
- gh_double2scm(paper_l ()->get_var ("interline")));
- }
-
-
announce_element (text_p_, 0);
}
{
return me->lookup_l ()->blank (Box (Interval(0, 0), Interval (-h/2, h/2)));
}
- if (str == "scorepostbreak")
- {
- return simple_barline (me, me->paper_l ()->get_var ("barthick_score"), h);
- }
else if (str == "|")
{
return thin;
/*
steep slope running against lengthened stem is suspect
*/
+ Real ss = me->paper_l ()->get_var ("staffspace");
Real first_ideal = Stem::calc_stem_info (first_visible_stem (me)).idealy_f_;
Real last_ideal = Stem::calc_stem_info (last_visible_stem (me)).idealy_f_;
- Real lengthened = me->paper_l ()->get_var ("beam_lengthened");
- Real steep = me->paper_l ()->get_var ("beam_steep_slope");
+ Real lengthened = gh_scm2double (me->get_elt_property ("outer-stem-length-limit")) * ss;
+ Real steep = gh_scm2double (me->get_elt_property ("slope-limit"));
// ugh -> use commonx
Real dx = last_visible_stem (me)->relative_coordinate (0, X_AXIS) - first_visible_stem (me)->relative_coordinate (0, X_AXIS);
me->add_offset_callback (Align_interface::center_on_element, X_AXIS);
}
- Real interline= me->paper_l ()->get_var ("interline");
+ Real interline= me->paper_l ()->get_var ("staffspace");
Link_array<Score_element> elems;
Link_array<Score_element> all_elems
= Pointer_group_interface__extract_elements (me, (Score_element*)0,
MAKE_SCHEME_CALLBACK(Crescendo,brew_molecule);
+
+/*
+
+ TODO:
+
+ * should span the crescendo on any dynamic-text items, and
+ calculate their dimensions to determine shortening; junk shortening
+ code and related elt props.
+
+ * separate the dashed-line version and the hairpin version into two
+ brew_molecule functions.
+
+ * generalise dashed-line into generic text spanner, for ottava, accelerando, etc.
+
+
+*/
SCM
Crescendo::brew_molecule (SCM smob)
{
Score_element *me= unsmob_element (smob);
Spanner * sp = dynamic_cast<Spanner*>(me);
- Real absdyn_dim = me->paper_l ()-> get_var ("crescendo_shorten");
+ Real ss = me->paper_l ()->get_var ("staffspace");
+ Real sl = me->paper_l ()->get_var ("stafflinethickness");
+
+ Real absdyn_dim = gh_scm2double (me->get_elt_property ("shorten-for-letter"));
Real extra_left = sp->get_broken_left_end_align ();
SCM dir = me->get_elt_property("grow-direction");
me->paper_l ()));
m.add_molecule (start_text);
- pad = me->paper_l ()->get_var ("interline") / 2;
+ pad = me->paper_l ()->get_var ("staffspace") / 2; // ugh.
width -= start_text.extent (X_AXIS).length ();
width -= pad;
SCM at;
s =me->get_elt_property ("spanner");
Real height;
+
if (gh_string_p (s) && ly_scm2string (s) == "dashed-line")
{
- Real thick = me->paper_l ()->get_var ("crescendo_dash_thickness");
- Real dash = me->paper_l ()->get_var ("crescendo_dash");
+ Real thick = gh_scm2double (me->get_elt_property ("dash-thickness")) * sl ;
+ Real dash = gh_scm2double (me->get_elt_property ("dash-length")) * ss;
+
height = thick;
at = gh_list (ly_symbol2scm (ly_scm2string (s).ch_C ()),
gh_double2scm (thick),
else
{
bool continued = broken[Direction (-gd)];
- height = me->paper_l()->get_var ("crescendo_height");
- Real thick = me->paper_l ()->get_var ("crescendo_thickness");
+ height = ss * gh_scm2double (me->get_elt_property ("height"));
+ Real thick = sl * gh_scm2double (me->get_elt_property ("thickness"));
const char* hairpin = (gd < 0)? "decrescendo" : "crescendo";
#include "align-interface.hh"
#include "spanner.hh"
#include "warn.hh"
-
+#include "paper-def.hh"
/*
JUNKME
*/
|| !scm_equal_p (gh_car (threshold), gh_cdr (threshold)))
warning (_ ("minVerticalAlign != maxVerticalAlign: cross staff spanners may be broken"));
- interstaff = 0.0;
+
+
+ interstaff = item->paper_l ()->get_var ("staffspace");
if (gh_pair_p (threshold))
- interstaff = gh_scm2double (gh_car (threshold));
+ interstaff = gh_scm2double (gh_car (threshold)) * interstaff;
Score_element * span_refpoint = span;
while (span_refpoint->parent_l (Y_AXIS) != common)
{
index_set_cell (cresc_p_->get_elt_property ("dynamic-drul"),
LEFT, text_p_->self_scm ());
- if (finished_cresc_p_)
+
+ if (finished_cresc_p_
+ // I don't see why, but we need this check
+ && gh_pair_p (finished_cresc_p_->get_elt_property ("dynamic-drul")))
index_set_cell (finished_cresc_p_->get_elt_property ("dynamic-drul"),
RIGHT, text_p_->self_scm ());
}
{
current_cresc_req_->origin ()->warning (_ ("unterminated (de)crescendo"));
cresc_p_->suicide ();
+ cresc_p_ = 0;
}
}
Score_element*me = unsmob_element (smob);
SCM space = me->get_elt_property ("horizontal-space");
- Real ss = me->paper_l ()->get_var ("staffspace");
-
me->set_elt_property ("threshold",
- gh_cons (gh_double2scm (ss *gh_scm2double (space)),
- gh_double2scm (infinity_f)));
+ gh_cons (space,
+ gh_double2scm (infinity_f)));
dynamic_cast<Item*>(me)->column_l ()->set_elt_property ("contains-grace", SCM_BOOL_T);
return SCM_UNSPECIFIED;
#include "lily-proto.hh"
/*
- TODO: rewrite this comment.
-
+ Order elements top to bottom/left to right/right to left etc.
+
+
+ *******
- Order elements top to bottom/left to right/right to left etc..
+ element properties
+
+ stacking-dir -- stack contents of elements in which direction ?
- TODO: implement padding.
+ align-dir -- Which side to align? -1: left side, 0: centered (around
+ center_l_ if not nil, or around center of width), 1: right side
- document usage of this.
+ threshold -- (cons MIN MAX), where MIN and MAX are dimensions in
+ staffspace
+ alignment-done -- boolean to administrate whether we've done the alignment already (to ensure that the process is done only once)
+ group-center-element -- element which will be at the center of the group
+ after aligning (when using Align_interface::center_on_element)
+ elements -- to be aligned elements
+
+ axes -- list of axis numbers. Should contain only one number.
+
*******
- element properties
+ Reads the following from its elements
+
+
+ minimum-space -- (cons LEFT RIGHT)
- stacking-dir
-
- Which side to align? -1: left side, 0: centered (around
- center_l_ if not nil, or around center of width), 1: right side
+ extra-space -- (cons LEFT RIGHT)
+
*/
struct Align_interface {
static Real alignment_callback (Score_element *,Axis);
damping -- damping factor (real).
-
+ outer-stem-length-limit -- catch suspect beam slopes, set slope to zero if
+ outer stem is lengthened more than this (in staffspace)
+
+ slope-limit -- set slope to zero if slope is running away steeper than this.
+
*/
class Beam
{
VIRTUAL_COPY_CONS (Music_iterator);
Part_combine_music_iterator ();
+ enum State { UNKNOWN, UNRELATED=1, SOLO1=2, SOLO2=4, UNIRHYTHM=8, UNISON=16, UNISILENCE=32, SPLIT_INTERVAL=64 };
+
protected:
virtual ~Part_combine_music_iterator ();
private:
void change_to (Music_iterator*, String, String);
+ int get_state (Moment m);
Music_iterator * first_iter_p_;
Music_iterator * second_iter_p_;
Moment first_until_;
Moment second_until_;
+ int state_;
+ String suffix_;
};
#endif /* PART_COMBINE_MUSIC_ITERATOR_HH */
Real hinf, Real r0);
Bezier get_bezier () const;
- void minimise_enclosed_area (Paper_def* paper_l);
+ void minimise_enclosed_area (Paper_def* paper_l, Real beauty);
Real fit_factor () const;
void blow_fit ();
Real enclosed_area_f () const;
valid areas for the middle control points. Used in de_uglyfy.
They are a bit empirical.
-
+ details -- alist containing contaning a few magic constants.
+
+ note-columns -- list of elt pointers to note columns.
+
+ attachment -- cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where
+ both types may be alongside-stem, stem, head or loose-end
+
+ direction -- up or down?
+
+ y-free -- ?
+
*/
class Slur
{
gh_double2scm (height),
SCM_UNDEFINED));
- Real il = paper_l ()->get_var ("interline");
+ Real il = paper_l ()->get_var ("staffspace");
/*
all elements.
Music_wrapper_iterator::Music_wrapper_iterator (Music_wrapper_iterator const &src)
: Music_iterator (src)
{
- child_iter_p_ = src.child_iter_p_->clone ();
+ if (src.child_iter_p_)
+ child_iter_p_ = src.child_iter_p_->clone ();
+ else
+ child_iter_p_ = 0;
}
Music_wrapper_iterator::~Music_wrapper_iterator ()
{
return child_iter_p_ && child_iter_p_->ok ();
}
+void
+Music_wrapper_iterator::skip (Moment m)
+{
+ /*
+ FIXME: should make sure that the initial try_music () is skipped as
+ well, if you would do
+
+ iter = get_iterator (Side_effect_music); // eg. property setting
+ iter->skip (1/2)
+ iter->process ()
+
+ */
+ child_iter_p_->skip (m);
+}
void
Music_wrapper_iterator::process (Moment m)
bool
Part_combine_music_iterator::ok () const
{
- //hmm
return first_iter_p_->ok () || second_iter_p_->ok ();
}
error (_f ("none of these in my family: `%s'", to_id.ch_C ()));
}
-void
-Part_combine_music_iterator::process (Moment m)
-{
- /*
- TODO:
- - Use three named contexts (be it Thread or Voice): one, two, solo.
- Let user pre-set (pushproperty) stem direction, remove
- dynamic-engraver, and such.
- - staff-combiner must switch only on per-measure basis (maybe even on
- per-line-basis, but that's not feasible). Maybe set minimum lengths
- of matching rhythm for combine/split?
- */
-
- Part_combine_music const * p = dynamic_cast<Part_combine_music const* > (music_l_);
-
- Moment now = pending_moment ();
-
- Array<Musical_pitch> first_pitches;
- Array<Duration> first_durations;
- if (first_iter_p_->ok ())
+static void
+get_music_info (Moment m, Music_iterator* iter, Array<Musical_pitch> *pitches, Array<Duration> *durations)
+{
+ if (iter->ok ())
{
- /* get_music () also performs next, modifying iterator */
- Music_iterator *mi = first_iter_p_->clone ();
- for (SCM i = mi->get_music (now); gh_pair_p (i); i = gh_cdr (i))
+ for (SCM i = iter->get_music (m); gh_pair_p (i); i = gh_cdr (i))
{
Music *m = unsmob_music (gh_car (i));
if (Melodic_req *r = dynamic_cast<Melodic_req *> (m))
- first_pitches.push (r->pitch_);
+ pitches->push (r->pitch_);
if (Rhythmic_req *r = dynamic_cast<Rhythmic_req *> (m))
- first_durations.push (r->duration_);
+ durations->push (r->duration_);
}
- delete mi;
}
+}
- Array<Musical_pitch> second_pitches;
- Array<Duration> second_durations;
- if (second_iter_p_->ok ())
- {
- Music_iterator *mi = second_iter_p_->clone ();
- for (SCM i = mi->get_music (now); gh_pair_p (i); i = gh_cdr (i))
- {
- Music *m = unsmob_music (gh_car (i));
- if (Melodic_req *r = dynamic_cast<Melodic_req *> (m))
- second_pitches.push (r->pitch_);
- if (Rhythmic_req *r = dynamic_cast<Rhythmic_req *> (m))
- second_durations.push (r->duration_);
- }
- delete mi;
- }
+int
+Part_combine_music_iterator::get_state (Moment)
+{
+ int state = UNKNOWN;
+ Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (music_l_);
+ Translator_group *first_translator = first_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "one" + suffix_);
+
+ SCM s = first_translator->get_property (ly_symbol2scm ("changeMoment"));
+ if (!gh_pair_p (s))
+ return state;
+
+ Moment change_mom = *unsmob_moment (gh_car (s));
+ Moment diff_mom = *unsmob_moment (gh_cdr (s));
- SCM interval = SCM_BOOL_F;
- if (first_pitches.size () && second_pitches.size ())
- {
- first_pitches.sort (Musical_pitch::compare);
- second_pitches.sort (Musical_pitch::compare);
- interval = gh_int2scm (first_pitches.top ().steps ()
- - second_pitches[0].steps ());
- }
- if (first_durations.size ())
- {
- first_durations.sort (Duration::compare);
- Moment new_until = now + first_durations.top ().length_mom ();
- if (new_until > first_until_)
- first_until_ = new_until;
- }
+ Moment now = pending_moment ();
- if (second_durations.size ())
+ if (!now.mod_rat (change_mom))
{
- second_durations.sort (Duration::compare);
- Moment new_until = now + second_durations.top ().length_mom ();
- if (new_until > second_until_)
- second_until_ = new_until;
+ SCM interval = SCM_BOOL_F;
+ if (first_until_ < now)
+ first_until_ = now;
+ if (second_until_ < now)
+ second_until_ = now;
+
+ Moment first_mom = first_until_;
+ Moment second_mom = second_until_;
+ Moment diff_until = diff_mom + now;
+
+ bool first = true;
+ Music_iterator *first_iter = first_iter_p_->clone ();
+ Music_iterator *second_iter = second_iter_p_->clone ();
+
+ Moment last_pending (-1);
+ Moment pending = now;
+ while (now < diff_until
+ && (first_iter->ok () || second_iter->ok ())
+
+ // urg, this is a hack, haven't caught this case yet
+ && (pending != last_pending))
+ {
+ if (!second_iter->ok ())
+ pending = first_iter->pending_moment ();
+ else if (!first_iter->ok ())
+ pending = second_iter->pending_moment ();
+ else
+ pending = first_iter->pending_moment () <? second_iter->pending_moment ();
+ last_pending = pending;
+
+ Array<Musical_pitch> first_pitches;
+ Array<Duration> first_durations;
+ get_music_info (pending, first_iter, &first_pitches, &first_durations);
+
+ Array<Musical_pitch> second_pitches;
+ Array<Duration> second_durations;
+ get_music_info (pending, second_iter, &second_pitches, &second_durations);
+
+ if (first_pitches.size () && second_pitches.size ())
+ {
+ first_pitches.sort (Musical_pitch::compare);
+ second_pitches.sort (Musical_pitch::compare);
+ interval = gh_int2scm (first_pitches.top ().steps ()
+ - second_pitches[0].steps ());
+ }
+ if (first_durations.size ())
+ {
+ first_durations.sort (Duration::compare);
+ first_mom += first_durations.top ().length_mom ();
+ }
+
+ if (second_durations.size ())
+ {
+ second_durations.sort (Duration::compare);
+ second_mom += second_durations.top ().length_mom ();
+ }
+
+ if (!first_pitches.empty () && second_pitches.empty ()
+ && !(second_until_ > now))
+ {
+ state |= UNRELATED;
+ state &= ~UNISILENCE;
+ if (!(state & ~(UNRELATED | SOLO1 | UNISILENCE)))
+ state |= SOLO1;
+ }
+ else
+ state &= ~SOLO1;
+
+ if (first_pitches.empty () && !second_pitches.empty ()
+ && !(first_until_ > now))
+ {
+ state |= UNRELATED;
+ state &= ~UNISILENCE;
+ if (!(state & ~(UNRELATED | SOLO2 | UNISILENCE)))
+ state |= SOLO2;
+ }
+ else
+ state &= ~SOLO2;
+
+ if (!compare (&first_durations, &second_durations))
+ {
+ state &= ~UNISILENCE;
+ if (!(state & ~(UNIRHYTHM | UNISON)))
+ state |= UNIRHYTHM;
+ }
+ else
+ state &= ~(UNIRHYTHM | UNISILENCE);
+
+ if (!first_pitches.empty ()
+ &&!compare (&first_pitches, &second_pitches))
+ {
+ state &= ~UNISILENCE;
+ if (!(state & ~(UNIRHYTHM | UNISON)))
+ state |= UNISON;
+ }
+ else
+ state &= ~(UNISON);
+
+ if (first_pitches.empty () && second_pitches.empty ())
+ {
+ if (!(state & ~(UNIRHYTHM | UNISILENCE)))
+ state |= UNISILENCE;
+ }
+ else if (!state)
+ state |= UNRELATED;
+ else
+ state &= ~(UNISILENCE);
+
+ if (gh_number_p (interval))
+ {
+ SCM s = first_translator->get_property (ly_symbol2scm ("splitInterval"));
+ int i = gh_scm2int (interval);
+ if (gh_pair_p (s)
+ && gh_number_p (gh_car (s))
+ && gh_number_p (gh_cdr (s))
+ && i >= gh_scm2int (gh_car (s))
+ && i <= gh_scm2int (gh_cdr (s)))
+ {
+ if (!(state & ~(SPLIT_INTERVAL | UNIRHYTHM | UNISON)))
+ state |= SPLIT_INTERVAL;
+ }
+ else
+ state &= ~(SPLIT_INTERVAL);
+ }
+
+ if (first && !first_pitches.empty ())
+ first_until_ = first_mom;
+ if (first && !second_pitches.empty ())
+ second_until_ = second_mom;
+ first = false;
+
+ if (first_iter->ok ())
+ first_iter->skip (pending);
+ if (second_iter->ok ())
+ second_iter->skip (pending);
+ now = pending;
+ }
+ delete first_iter;
+ delete second_iter;
}
+ return state;
+}
-#if 0 /* DEBUG */
- printf ("now: %s\n", now.str ().ch_C ());
- printf ("first: ");
- for (int i = 0; i < first_pitches.size (); i++)
- {
- printf ("%s, ", first_pitches[i].str ().ch_C ());
- }
- printf ("\nsecond: ");
- for (int i = 0; i < second_pitches.size (); i++)
- {
- printf ("%s, ", second_pitches[i].str ().ch_C ());
- }
- printf ("\n");
-#endif
+void
+Part_combine_music_iterator::process (Moment m)
+{
- Translator_group * fir = first_iter_p_->report_to_l ();
- Translator_group * sir = second_iter_p_->report_to_l ();
+ /*
+ TODO:
+ - Use three named contexts (be it Thread or Voice): one, two, solo.
+ Let user pre-set (pushproperty) stem direction, remove
+ dynamic-engraver, and such.
- bool solo_b = (first_pitches.empty () != second_pitches.empty ())
- && !(first_until_ > now && second_until_ > now);
+ **** Tried this, but won't work:
- bool unirhythm_b = !solo_b && !compare (&first_durations, &second_durations);
- bool unison_b = unirhythm_b && !first_pitches.empty ()
- &&!compare (&first_pitches, &second_pitches);
- bool unisilence_b = unirhythm_b && first_pitches.empty ();
+ Consider thread switching: threads "one", "two" and "both".
+ User can't pre-set the (most important) stem direction at
+ thread level!
+ */
+
+ if (suffix_.empty_b ())
+ suffix_ = first_iter_p_->report_to_l ()->daddy_trans_l_->id_str_.cut_str (3, INT_MAX);
- Translator_group * fd = fir->find_create_translator_l (p->what_str_, "one");
- Translator_group * sd = sir->find_create_translator_l (p->what_str_, "two");
+ int state = get_state (m);
+ if (state)
+ state_ = state;
+ else
+ state = state_;
+
+ Part_combine_music const *p = dynamic_cast<Part_combine_music const* > (music_l_);
- bool split_interval_b = false;
- if (gh_number_p (interval))
- {
- SCM s = fd->get_property (ly_symbol2scm ("splitInterval"));
- int i = gh_scm2int (interval);
- if (gh_pair_p (s)
- && gh_number_p (gh_car (s))
- && gh_number_p (gh_cdr (s))
- && i >= gh_scm2int (gh_car (s))
- && i <= gh_scm2int (gh_cdr (s)))
- split_interval_b = true;
- }
- bool combined_b = first_iter_p_->report_to_l ()->daddy_trans_l_
+ bool previously_combined_b = first_iter_p_->report_to_l ()->daddy_trans_l_
== second_iter_p_->report_to_l ()->daddy_trans_l_;
- String to_id = combined_b ? "one" : "two";
- if ((!unirhythm_b && combined_b)
- || (split_interval_b && combined_b)
- || (solo_b && combined_b)
- /*|| (unisilence_b && combined_b) */
- || ((unirhythm_b || unison_b || unisilence_b)
- && !combined_b && !split_interval_b && !solo_b))
- {
- combined_b = !combined_b;
- to_id = combined_b ? "one" : "two";
- change_to (second_iter_p_, p->what_str_, to_id);
- }
-
- if (!combined_b)
- sir = second_iter_p_->report_to_l ();
+ bool combine_b = previously_combined_b;
- SCM b = unirhythm_b ? SCM_BOOL_T : SCM_BOOL_F;
- fd->set_property ("unirhythm", b);
- sd->set_property ("unirhythm", b);
+ if (!(state & UNIRHYTHM)
+ || (state & SPLIT_INTERVAL)
+ || (state & (SOLO1 | SOLO2)))
+ combine_b = false;
+ else if (state & (UNIRHYTHM | UNISILENCE))
+ combine_b = true;
- b = split_interval_b ? SCM_BOOL_T : SCM_BOOL_F;
- fd->set_property ("split-interval", b);
- sd->set_property ("split-interval", b);
+ if (combine_b != previously_combined_b)
+ change_to (second_iter_p_, p->what_str_, (combine_b ? "one" : "two")
+ + suffix_);
- b = unisilence_b ? SCM_BOOL_T : SCM_BOOL_F;
- fd->set_property ("unisilence", b);
- sd->set_property ("unisilence", b);
+ Translator_group *first_translator = first_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "one" + suffix_);
+ Translator_group *second_translator = second_iter_p_->report_to_l ()->find_create_translator_l (p->what_str_, "two" + suffix_);
- b = unison_b ? SCM_BOOL_T : SCM_BOOL_F;
- fd->set_property ("unison", b);
- sd->set_property ("unison", b);
-
- b = solo_b ? SCM_BOOL_T : SCM_BOOL_F;
- if (first_pitches.size ())
- {
- fd->set_property ("solo", b);
- sd->set_property ("solo", SCM_BOOL_F);
- }
-
- if (second_pitches.size ())
- {
- fd->set_property ("solo", SCM_BOOL_F);
- sd->set_property ("solo", b);
- }
+ /*
+ hmm
+ */
+ SCM b = (state & UNIRHYTHM) ? SCM_BOOL_T : SCM_BOOL_F;
+ first_translator->set_property ("unirhythm", b);
+ second_translator->set_property ("unirhythm", b);
+
+ b = (state & SPLIT_INTERVAL) ? SCM_BOOL_T : SCM_BOOL_F;
+ first_translator->set_property ("split-interval", b);
+ second_translator->set_property ("split-interval", b);
+
+ b = (state & UNISILENCE) ? SCM_BOOL_T : SCM_BOOL_F;
+ first_translator->set_property ("unisilence", b);
+ second_translator->set_property ("unisilence", b);
+
+ // difference in definition...
+ //b = ((state & UNISON) ? SCM_BOOL_T : SCM_BOOL_F;
+ b = ((state & UNISON) && (state & UNIRHYTHM)) ? SCM_BOOL_T : SCM_BOOL_F;
+ first_translator->set_property ("unison", b);
+ second_translator->set_property ("unison", b);
+
+ SCM b1 = (state & SOLO1) ? SCM_BOOL_T : SCM_BOOL_F;
+ SCM b2 = (state & SOLO2) ? SCM_BOOL_T : SCM_BOOL_F;
+ first_translator->set_property ("solo", b1);
+ second_translator->set_property ("solo", b2);
if (first_iter_p_->ok ())
first_iter_p_->process (m);
}
else if (key == ly_symbol2scm ("accordion"))
{
- return me->lookup_l ()->accordion (gh_cdr (s), me->paper_l()->get_var("interline"));
+ return me->lookup_l ()->accordion (gh_cdr (s), me->paper_l()->get_var("staffspace"));
}
else
assert (false);
{
cursor_ = src.cursor_;
here_mom_ = src.here_mom_;
- iter_p_ = src.iter_p_->clone ();
+ if (src.iter_p_)
+ iter_p_ = src.iter_p_->clone ();
+ else
+ iter_p_ = 0;
}
Sequential_music_iterator::~Sequential_music_iterator()
{
if (iter_p_)
{
- /* if (iter_p_->ok () )
+#if 0
+ if (iter_p_->ok () )
music_l_->origin ()->warning (_ ("Must stop before this music ends"));
- */
+#endif
delete iter_p_;
- iter_p_ = 0;
}
}
-
void
Sequential_music_iterator::construct_children()
{
while (gh_pair_p (cursor_ ))
{
- start_next_element();
- if (!iter_p_->ok())
- {
- leave_element();
- }
- else
+ iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_)));
+
+ if (iter_p_->ok())
{
- set_sequential_music_translator();
- break;
+ descend_to_child ();
+ return;
}
- }
-}
-
-void
-Sequential_music_iterator::leave_element()
-{
- delete iter_p_;
- iter_p_ =0;
- Moment elt_time = unsmob_music (gh_car (cursor_))->length_mom ();
- here_mom_ += elt_time;
- cursor_ =gh_cdr (cursor_);
-}
-void
-Sequential_music_iterator::start_next_element()
-{
- assert (!iter_p_);
- iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_)));
+ delete iter_p_ ;
+ iter_p_ =0;
+ cursor_ = gh_cdr (cursor_);
+ }
}
+ /*
+ move to context of child iterator if it is deeper down in the
+ hierarchy.
+ */
void
-Sequential_music_iterator::set_sequential_music_translator()
+Sequential_music_iterator::descend_to_child ()
{
+
Translator_group * child_report = child_report = iter_p_->report_to_l ();
if (dynamic_cast<Grace_iterator*> (iter_p_))
child_report = child_report->daddy_trans_l_;
set_translator (child_report);
}
+
/*
- [todo: translate]
+
Hier staat in feite: haal alle muziek op (startend op tijd HERE) tot
je iets met lengte L > 0 tegenkomt. Aangezien de preconditie is dat
Sequential_music_iterator::get_music (Moment until)const
{
SCM s = SCM_EOL;
+ if (until < pending_moment ())
+ return s;
+
SCM curs = cursor_;
Music_iterator * iter = iter_p_->clone ();
while (1)
}
return s;
}
-
+/*
+ Skip events till UNTIL. We don't do any other side effects (such as
+ moving descending to child iterator contexts, because they might
+ depend on \context specs and \translator changes being executed
+
+ */
+void
+Sequential_music_iterator::skip (Moment until)
+{
+ SCM curs = cursor_;
+ while (1)
+ {
+ Moment l =iter_p_->music_length_mom ();
+ if (l >= until - here_mom_)
+ iter_p_->skip (until - here_mom_);
+
+ if (iter_p_->ok ())
+ return ;
+
+ here_mom_ = here_mom_ + l;
+ delete iter_p_;
+ iter_p_ =0;
+
+ curs = gh_cdr (curs);
+
+ if (!gh_pair_p (curs))
+ return ;
+ else
+ iter_p_ = get_iterator_p (unsmob_music (gh_car (curs)));
+ }
+}
+
void
Sequential_music_iterator::process (Moment until)
{
- if (ok ())
+ while (1)
{
- while (1)
- {
- Moment local_until = until - here_mom_;
- while (iter_p_->ok ())
- {
- Moment here = iter_p_->pending_moment ();
- if (here != local_until)
- return ;
-
- iter_p_->process (local_until);
- }
+ iter_p_->process (until - here_mom_);
+
+ /*
+ if the iter is still OK, there must be events left that have
+
+ TIME > LEFT
- if (!iter_p_->ok ())
- {
- set_sequential_music_translator ();
- leave_element ();
-
- if (gh_pair_p (cursor_))
- start_next_element ();
- else
- return ;
- }
- }
+ */
+ if (iter_p_->ok ())
+ return ;
+
+ here_mom_ += iter_p_->music_length_mom ();
+
+ descend_to_child ();
+ delete iter_p_;
+ iter_p_ =0;
+
+ cursor_ = gh_cdr (cursor_);
+
+ if (!gh_pair_p (cursor_))
+ return ;
+ else
+ {
+ delete iter_p_;
+ iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_)));
+ }
}
+
}
Moment
algorithm, instead of this homebrew.
*/
void
-Slur_bezier_bow::minimise_enclosed_area (Paper_def* paper_l)
+Slur_bezier_bow::minimise_enclosed_area (Paper_def* paper_l, Real beauty)
{
Real length = curve_.control_[3][X_AXIS];
-
- Real sb = paper_l->get_var ("slur_beautiful");
- Real beautiful = sb * length * slur_height (length, h_inf_, r_0_);
+ Real beautiful = beauty * length * slur_height (length, h_inf_, r_0_);
DEBUG_OUT << to_str ("Beautiful: %f\n", beautiful);
DEBUG_OUT << to_str ("Length: %f\n", length);
{
// for (SCM s = get_elt_property ("slur-extremity-rules"); s != SCM_EOL; s = gh_cdr (s))
+
+ // FIXME: global GUILE scope used!
for (SCM s = scm_eval2 (ly_symbol2scm ("slur-extremity-rules"),
SCM_EOL);
s != SCM_EOL; s = gh_cdr (s))
Offset o;
if (Spanner *mother = dynamic_cast<Spanner*> (me->original_l_))
{
- for (int i = dir == LEFT ? 0 : mother->broken_into_l_arr_.size ();
- dir == LEFT ? i < mother->broken_into_l_arr_.size () : i;
- dir == LEFT ? i++ : --i)
+ for (int i = dir == LEFT ? 0 : mother->broken_into_l_arr_.size () - 1;
+ dir == LEFT ? i < mother->broken_into_l_arr_.size () : i > 0;
+ dir == LEFT ? i++ : i--)
{
if (mother->broken_into_l_arr_[i - dir] == me)
{
}
}
-
+
+
+ // FIXME
SCM l = scm_assoc
(scm_listify (a,
gh_int2scm (stem ? Stem::get_direction (stem) : 1 * dir),
/*
leave a gap: slur mustn't touch head/stem
*/
- o[Y_AXIS] += dir * me->paper_l ()->get_var ("slur_y_free");
+ o[Y_AXIS] += dir * gh_scm2double (me->get_elt_property ("y-free")) *
+ me->paper_l ()->get_var ("staffspace");
return o;
}
void
Slur::set_control_points (Score_element*me)
{
- Real staff_space = Staff_symbol_referencer::staff_space ((Score_element*)me);
- Real h_inf = me->paper_l ()->get_var ("slur_height_limit_factor") *
- staff_space;
- Real r_0 = me->paper_l ()->get_var ("slur_ratio");
+ Real staff_space = Staff_symbol_referencer::staff_space ((Score_element*)me);
+
+ SCM details = me->get_elt_property ("details");
+ SCM h_inf_scm = scm_assq (ly_symbol2scm ("height-limit"), details);
+ SCM r_0_scm = scm_assq (ly_symbol2scm ("ratio"), details);
+
+ Real r_0 = gh_scm2double (gh_cdr (r_0_scm));
+ Real h_inf = staff_space * gh_scm2double (gh_cdr (h_inf_scm));
Slur_bezier_bow bb (get_encompass_offset_arr (me),
Directional_element_interface::get (me),
{
Real length = bb.curve_.control_[3][X_AXIS];
Real default_height = slur_height (length, h_inf, r_0);
- bb.minimise_enclosed_area (me->paper_l());
-
- Real bff = me->paper_l ()->get_var ("slur_force_blowfit");
+
+ SCM ssb = scm_assq (ly_symbol2scm ("beautiful"), details);
+ Real sb =gh_scm2double (gh_cdr (ssb));
+
+ bb.minimise_enclosed_area (me->paper_l(), sb);
+ SCM sbf = scm_assq (ly_symbol2scm ("force-blowfit"), details);
+ Real bff = 1.0;
+ if (gh_pair_p (sbf) && gh_number_p (gh_cdr (sbf)))
+ bff = gh_scm2double (gh_cdr (sbf));
+
bb.curve_.control_[1][Y_AXIS] *= bff;
bb.curve_.control_[2][Y_AXIS] *= bff;
bb.blow_fit ();
- Real sb = me->paper_l ()->get_var ("slur_beautiful");
+
Real beautiful = length * default_height * sb;
Real area = bb.enclosed_area_f ();
*/
if (gh_symbol_p (gl) && gl == ly_symbol2scm ("brace")
&& gh_symbol_p (my_gl) && my_gl == ly_symbol2scm ("bracket"))
- inf.elem_l_->translate_axis ( -paper_l ()->get_var ("interline"), X_AXIS); // ugh
+ inf.elem_l_->translate_axis ( -paper_l ()->get_var ("staffspace"), X_AXIS); // ugh
}
}
Real staff_space = Staff_symbol_referencer::staff_space (me);
- Real x_gap_f = me->paper_l ()->get_var ("tie_x_gap");
+ Real x_gap_f = gh_scm2double (me->get_elt_property ("x-gap"));
Score_element* commonx = me->common_refpoint (me->get_bound (LEFT), X_AXIS);
commonx = me->common_refpoint (me->get_bound (RIGHT), X_AXIS);
}
Direction dir = Directional_element_interface::get(me);
-
- Real h_inf = me->paper_l ()->get_var ("tie_height_limit_factor") * staff_space;
- Real r_0 = me->paper_l ()->get_var ("tie_ratio");
+ SCM details = me->get_elt_property ("details");
+
+ SCM lim // groetjes aan de chirurgendochter.
+ = scm_assq (ly_symbol2scm ("height-limit"),details);
+
+ Real h_inf = gh_scm2double (gh_cdr (lim)) * staff_space;
+ Real r_0 = gh_scm2double (gh_cdr (scm_assq (ly_symbol2scm ("ratio"),details)));
Bezier b = slur_shape (width, h_inf, r_0);
Real ry = rint (y/staff_space) * staff_space;
Real diff = ry - y;
Real newy = y;
- if (fabs (y) <= Staff_symbol_referencer::staff_radius (me)
- && fabs (diff) < me->paper_l ()->get_var ("tie_staffline_clearance"))
+
+ Real clear = staff_space * gh_scm2double (me->get_elt_property ("staffline-clearance"));
+
+ if (fabs (y) <= Staff_symbol_referencer::staff_radius (me)
+ && fabs (diff) < clear)
{
newy = ry - 0.5 * staff_space * sign (diff) ;
}
void
Vertical_align_engraver::do_creation_processing()
{
- valign_p_ =new Spanner (SCM_EOL); // todo -> basic props
+ valign_p_ =new Spanner (get_property ("basicVerticalAlignmentProperties"));
Align_interface::set_interface (valign_p_);
Align_interface::set_axis (valign_p_,Y_AXIS);
valign_p_->set_elt_property ("stacking-dir",
valign_p_->set_elt_property ("threshold",
gh_cons (min,max));
}
+
valign_p_->set_bound(RIGHT,unsmob_element (get_property ("currentCommandColumn")));
typeset_element (valign_p_);
valign_p_ =0;
(mapcar (function
(lambda (x) (modify-syntax-entry
(car x) (cdr x) lily-mode-syntax-table)))
- '(( ?\( . "." ) ( ?\) . "." )
- ( ?\[ . "." ) ( ?\] . "." )
+ '(( ?\( . "()" ) ( ?\) . ")(" ) ; need matching parens for inline lisp
+ ( ?\[ . "." ) ( ?\] . "." )
( ?\{ . "(}" ) ( ?\} . "){" )
( ?\< . "(>" )( ?\> . ")>")
( ?\$ . "." ) ( ?\% . "." ) ( ?\& . "." )
papersize = "a4"
-
+\include "engraver.ly"
\include "generic-paper.ly"
\include "paper20.ly"
\accepts "Voice";
-};
+}
-\translator{\StaffContext }
-\translator {
+ChoirStaffContext = \translator {
\type "Engraver_group_engraver";
\name ChoirStaff;
alignmentReference = \center;
\consists "Output_property_engraver";
Generic_property_list = #generic-staff-properties
-
- barSize = 4.0 * \staffspace ; % JUNKME
\consists "Pitch_squash_engraver";
\consists "Separating_line_group_engraver";
\name RhythmicStaff;
-
+ basicBarProperties \push #'bar-size = #4
basicVoltaSpannerProperties \push #'minimum-space = #15 % urg, in \pt
basicVoltaSpannerProperties \push #'padding = #5 % urg, in \pt
basicStaffSymbolProperties \push #'line-count = #1
\consists "Staff_symbol_engraver";
\consistsend "Axis_group_engraver";
\accepts "Voice";
-};
-\translator{\RhythmicStaffContext}
+}
+
VoiceContext = \translator {
\type "Engraver_group_engraver";
\consists "Skip_req_swallow_translator";
\accepts Thread; % bug if you leave out this!
\accepts Grace;
-};
+}
GraceContext=\translator {
\type "Grace_engraver_group";
basicBeamProperties \push #'beam-space-function = #(lambda (x) 0.5)
weAreGraceContext = ##t
- graceAccidentalSpace= 1.5 * \staffspace; % JUNKME
-};
-
-\translator{\GraceContext}
-\translator {\VoiceContext}
+ graceAccidentalSpace= 1.5 ; % in staff space
+}
ThreadContext = \translator{
\type Engraver_group_engraver;
Generic_property_list = #generic-thread-properties
\consists "Property_engraver";
\name Thread;
-};
+}
-\translator{\ThreadContext}
GrandStaffContext=\translator{
\type "Engraver_group_engraver";
\name GrandStaff;
\consists "Property_engraver";
Generic_property_list = #generic-grand-staff-properties
\accepts "Staff";
-};
-\translator{\GrandStaffContext}
+}
PianoStaffContext = \translator{\GrandStaffContext
alignmentReference = \center;
\consists "Vertical_align_engraver";
- % JUNKME
- minVerticalAlign = 3.0*\staffheight;
- maxVerticalAlign = 3.0*\staffheight;
+ basicVerticalAlignmentProperties \push #'threshold = #'(12 . 12)
% \consistsend "Axis_group_engraver";
\name "PianoStaff";
-
-};
-\translator{\PianoStaffContext}
+}
+
StaffGroupContext= \translator {
\type "Engraver_group_engraver";
\consists "Span_bar_engraver";
\accepts "Lyrics";
\accepts "ChordNames";
-};
+}
-\translator { \StaffGroupContext }
% UGH! JUNKME
LyricsVoiceContext= \translator{
\consists "Stanza_number_engraver";
phrasingPunctuation = #".,;:!?\""
-};
-\translator{ \LyricsVoiceContext }
+}
+NoteNamesContext = \translator {
+ \type "Engraver_group_engraver";
+ \name NoteNames;
+ \consistsend "Axis_group_engraver";
+ \consists "Note_name_engraver";
+ \consists "Separating_line_group_engraver";
+}
LyricsContext = \translator {
\type "Engraver_group_engraver";
\consistsend "Axis_group_engraver";
\accepts "LyricVoice";
-};
-\translator { \LyricsContext }
+}
ChordNameVoiceContext = \translator {
\type "Engraver_group_engraver";
\consistsend "Axis_group_engraver";
\consists "Separating_line_group_engraver";
\consists "Chord_name_engraver";
-};
-\translator {\ChordNameVoiceContext}
-
+}
ChordNameContext = \translator {
\type "Engraver_group_engraver";
\name ChordNames;
\consists "Output_property_engraver";
\accepts "ChordNameVoice";
\consistsend "Axis_group_engraver";
- };
-\translator { \ChordNameContext }
+ }
ScoreWithNumbers = \translator {
% uncomment to bar numbers on a whole system.
\consists "Bar_number_engraver";
-};
+}
StupidScore = \translator {
\type "Score_engraver";
\name Score;
\consists "Note_heads_engraver";
-};
+}
BarNumberingStaffContext = \translator {
\StaffContext
\consists "Mark_engraver";
-};
+}
HaraKiriStaffContext = \translator {
\StaffContext
\consistsend "Hara_kiri_engraver";
\consists "Instrument_name_engraver";
\accepts "Voice";
-};
+}
%{
The HaraKiriStaffContexts doesn't override \name,
so it is still named `Staff'.
OrchestralPartStaffContext = \translator {
\StaffContext
\consists "Mark_engraver";
-};
+}
ScoreContext = \translator {
\type Score_engraver;
aDueText = #"\\`a2"
soloADue = ##t
splitInterval = #'(0 . 1)
+ changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512))
defaultClef = #"treble"
(breakable . #t)
(visibility-lambda . ,begin-of-line-visible)
(name . "barnumber")
+ (padding . 1.0)
+ (direction . 1)
)
basicBeamProperties = #basic-beam-properties
basicCrescendoProperties = #`(
(molecule-callback . ,Crescendo::brew_molecule)
(interfaces . (crescendo-interface dynamic-interface))
+ (thickness . 1.0)
+ (shorten-for-letter . 4.0)
+ (height . 0.6666)
+ (dash-thickness . 1.2)
+ (dash-length . 4.0)
(name . "crescendo")
)
basicDotColumnProperties = #`(
(after-line-breaking-callback . ,Slur::after_line_breaking)
(de-uglify-parameters . ( 1.5 0.8 -2.0))
+ (details . ((height-limit . 2.0) (ratio . 0.333) (force-blowfit . 0.5) (beautiful . 0.5)))
+ (y-free . 0.75)
(name . "slur")
)
basicSpacingSpannerProperties =#`(
(interfaces . (tie-interface))
(molecule-callback . ,Tie::brew_molecule)
(spacing-procedure . ,Tie::set_spacing_rods)
+ (staffline-clearance . 0.24)
+ (details . ((ratio . 0.333) (height-limit . 1.0)))
(thickness . 1.2)
+ (x-gap . 0.2)
(minimum-length . 2.5)
(name . "tie")
)
(minimum-space . 25)
(name . "volta brace")
)
+ basicVerticalAlignmentProperties = #`(
+ (axes 1)
+ (interfaces . (align-interface axis-group-interface))
+ (name . "vertical alignment")
+ )
basicVerticalAxisGroupProperties = #`(
(axes 1)
(interfaces . (axis-group-interface))
(name . "Y-axis group")
)
-};
-
-\translator { \ScoreContext }
+}
OrchestralScoreContext= \translator {
\ScoreContext
-
-};
-
-\translator {
- \type "Engraver_group_engraver";
- \name NoteNames;
- \consistsend "Axis_group_engraver";
- \consists "Note_name_engraver";
- \consists "Separating_line_group_engraver";
}
+
paper_as_nine = \paper {
staffheight = 9.\char;
- font_large = 4.;
- font_Large = 4.;
+% font_large = 4.;
+% font_Large = 4.;
+% font_normal = 4.;
+ font_large = 1.;
+ font_Large = 1.;
font_normal = 4.;
font_script = 1.;
* cleanup
* use elt properties, iso. paper variables.
-%}
-
+%}
paperfile = \papersize + ".ly";
% paperfile = "a4.ly";
staffspace = \staffheight / 4.0;
stafflinethickness = \staffspace / 10.0;
-% deprecated
-interline = \staffspace;
-
%{
The space taken by a note is determined by the formula
arithmetic_basicspace = 2.0;
-%
-% UGH; junk these!
-%
-
-% catch suspect beam slopes, set slope to zero if
-% outer stem is lengthened more than
-beam_lengthened = 0.2 * \staffspace;
-% and slope is running away steeper than
-beam_steep_slope = 0.2 / 1.0;
-
-
-
-%{
- Slur parameters.
-
- See Documentation/programmer/fonts.doc
-
- TODO: -> elt-properties.
-%}
-% Height-limit (h_inf) = factor * staff_space
-slur_height_limit_factor = 2.0;
-slur_ratio = 1.0 / 3.0;
-
-slur_thickness = 1.2 * \stafflinethickness;
-
-slur_force_blowfit = 0.5;
-slur_beautiful = 0.5;
-
-
-%{
-Horizontal space between centre of notehead and slur.
-%}
-% OSU: suggested gap = ss / 5;
-slur_x_gap = \staffspace / 5.0;
-slur_y_gap = 0.25 * \staffspace;
-slur_y_free = 0.75 * \staffspace;
-slur_x_minimum = 1.5 * \staffspace;
% URG: the magic constants for area asymmetry
bezier_pct_c0 = -0.2;
bezier_area_steps = 1.0;
-%{
- Tie parameters
-%}
-
-tie_height_limit_factor = 1.0 ;
-tie_ratio = \slur_ratio;
-
-% OSU: tie gap == slur gap
-tie_x_gap = 0.2 * \staffspace;
-tie_staffline_clearance = 2.0 *\slur_thickness;
-
% vertical space between lines of text.
line_kern = \staffspace;
-% chop off this much when next to pp / ff sign.
-crescendo_shorten = 4.0 * \staffspace;
-crescendo_thickness = \stafflinethickness;
-crescendo_height = 0.666 * \staffspace;
-crescendo_dash_thickness = 1.2*\stafflinethickness;
-crescendo_dash = 4.0*\staffspace;
-
% optical correction amount.
stemSpacingCorrection = 0.5*\staffspace;
compression_energy_factor = 0.6;
+\translator { \NoteNamesContext }
+\translator { \ScoreContext }
+\translator { \ChoirStaffContext}
+\translator { \GraceContext}
+\translator { \RhythmicStaffContext}
+\translator { \StaffContext }
+\translator { \VoiceContext}
+\translator { \StaffGroupContext }
+\translator { \ChordNameContext }
+\translator { \ChordNameVoiceContext}
+\translator { \GrandStaffContext}
+\translator { \LyricsContext }
+\translator { \ThreadContext}
+\translator { \PianoStaffContext}
+\translator { \LyricsVoiceContext }
-\include "engraver.ly";
-
\version "1.3.59";
-\include "global.ly"
-\include "violoncello.ly"
-\include "contrabasso.ly"
-
-bassiGroup = \context PianoStaff = bassi_group \notes <
- %\global
- \context StaffCombineStaff=one {
- \clef "bass";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
- \context StaffCombineStaff=two {
- \clef "bass";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
-
- \context StaffCombineStaff=one \partcombine StaffCombineStaff
- \context StaffCombineVoice=one \violoncello
- \context StaffCombineVoice=two \contrabasso
->
+\include "bassi.ly"
\score{
\bassiGroup
--- /dev/null
+\header{
+filename = "bassi.ly";
+% %title = "Ouvert\\"ure zu Collins Trauerspiel \\"Coriolan\\" Opus 62";
+description = "";
+composer = "Ludwig van Beethoven (1770-1827)";
+enteredby = "JCN";
+copyright = "public domain";
+}
+
+\version "1.3.59";
+
+\include "global.ly"
+\include "violoncello.ly"
+\include "contrabasso.ly"
+
+bassiGroup = \context PianoStaff = bassi_group \notes <
+ %\global
+ \context StaffCombineStaff=oneBassi {
+ \property StaffCombineStaff.midiInstrument = #"cello"
+ \property StaffCombineStaff.instrument = #"Violoncello\ne\nContrabasso"
+ \property StaffCombineStaff.instr = #"Vc."
+ \clef "bass";
+ \key es \major;
+ \skip 1*314;
+ \bar "|.";
+ }
+ \context StaffCombineStaff=twoBassi {
+ \property StaffCombineStaff.midiInstrument = #"contrabass"
+ \property StaffCombineStaff.instrument = #"Contrabasso"
+ \property StaffCombineStaff.instr = #"Cb."
+% \property StaffCombineStaff.transposing = #-12
+ \clef "bass";
+ \key es \major;
+ \skip 1*314;
+ \bar "|.";
+ }
+
+ \context StaffCombineStaff=oneBassi \partcombine StaffCombineStaff
+ \context StaffCombineVoice=one \violoncello
+ \context StaffCombineVoice=two \contrabasso
+>
c'1\ff ~ |
c |
f,4-. r r2 |
- \property Staff.instr = #"Vc.\nCb."
r1 |
c'1\ff ~ |
c |
c4 r4 r2 |
c4 r4 r2 |
r1 |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
c'4.\< c8 bes4. bes8 |
%20
% copied 14 from cello
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
bes'4.\< bes8 as4. as8 |
g4 \!g4-.\f r2 |
R1
)as,4 r r r8 as(|
)g4 r r r8 g(|
)d'4 r r r8 d(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)es4\< r r r8 es(|
)as,4 r r r8 as(|
)g4 r r r8 g(|
)bes4 r r r8 bes(|
)as4 r r r8 as(|
)e4 r r r8 e(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)f4\< r r r8 f(|
)bes4 r r r8 bes(|
%70
\!)as2\ff g |
fis d' |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
g,4\p\< r r r8 g(|
)c4 r r r8 c(|
% )<b1\sf\> { s2 s4 \!s8}> |
d4\pp r d r |
d r d r |
%80
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
d r d\< r |
d r d r |
d r d r |
f |
b,2\sf r |
b2\sf r |
+ %160
R1*3 |
bes2\ff r |
bes2\sf r |
%180
)e4 r r r8 e(|
)b'4 r r r8 b(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)c4\< r r r8 c(|
)f,4 r r r8 f(|
)e4 r r r8 e'(|
)g,4 r r r8 g(|
)f4 r r r8 f(|
)cis'4 r r r8 cis(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)d4\< r r r8 d(|
%195
dis b |
es4\p r r r8 es(|
)a,4 r r r8 a(|
+ )g1 |
%200
- )g1 |
f |
% copied 18 from cello
- [f8(g f g][f g f)g] |
- es!4\fp r e r |
+ es'!4\fp r e r |
f r g r |
-
- %205
as r g r |
f r fis r |
+
+ %205
g r g r |
g r g r |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
g r g\< r |
+ g r g r |
%210
g r g r |
g r g r |
- g r g r |
\!f2.\ff()es4 |
d( c d )c |
+ f2.\ff()es4 |
%215
- f2.\ff()es4 |
d( c d )c |
bes2.\ff()as4 |
g( f g )f |
bes2.\ff()as4 |
+ g( f g )f |
%220
- f'4 r r2 |
+ f4 r r2 |
f'4 r r2 |
f4 r r2 |
f4 r r2 |
%230
f4 r8 f g4 r8 g |
- c,4\p r r2 |
+ c4\p r r2 |
r2 r4 r8 b\f |
c4 r r2 |
r2 r4 r8 b\f |
R1*3 |
%copied 59 from cello
- [c,8\f e g as][bes, d fis g]|
+ [c8\f e g as][bes, d fis g]|
%240
[as, c e f!][g, bes d es]|
%250
)es4 r r r8 es(|
)b4 r r r8 b(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)c4\< r r r8 c(|
)f4 r r r8 f,(|
)es1 |
bes\f |
%260
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
as4.\p\< as'8 g4. g8 |
f4. f8 es4. es8 |
as4. as8 g4. g8 |
f,4-. g-. r2 |
%290
- \property Voice.decrescendoText = "dim."
- \property Voice.decrescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.decrescendoText = "dim."
+ \property StaffCombineVoice.decrescendoSpanner = "dashed-line"
as4\> r b r |
R1 |
\!c4\p r r2|
r2 r4 f, |
c' r r2 |
r2 r4 f, |
+
+ %300
c' r r2 |
R1 |
f,4 r r2 |
R1 |
c'4 r r2 |
+
+ %305
R1 |
f,4 r r2 |
R1*3 |
+
+ %310
c'4\pp r r2 |
R1 |
c4 r r2 |
c4 r r2 |
c4 r r2 |
}
-
-%%%contrabassoStaff = \context Staff = contrabasso <
-%%% \property Staff.midiInstrument = #"contrabass"
-%%% \property Staff.instrument = #"Contrabasso"
-%%% \property Staff.instr = #"Cb."
-%%% \property Staff.transposing = #-12
-%%% \clef "bass";
-%%% \notes \context Voice=one<
-%%% \global
-%%% \contrabasso
-%%% >
-%%%>
-
\include "global.ly"
\include "paper16.ly"
-\include "contrabasso.ly"
+\include "bassi.ly"
\include "clarinetti.ly"
\include "corni.ly"
\include "fagotti.ly"
\include "oboi.ly"
\include "timpani.ly"
\include "trombe.ly"
-\include "viola-1.ly"
-\include "viola-2.ly"
+\include "violi.ly"
\include "violino-1.ly"
\include "violino-2.ly"
-\include "violoncello.ly"
legniGroup = \context StaffGroup = legni_group <
\violinoIIStaff
>
-violiGroup = \context PianoStaff = violi_group \notes <
- \context StaffCombineStaff=one {
- \clef "alto";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
- \context StaffCombineStaff=two {
- \clef "alto";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
-
- \context StaffCombineStaff=one \partcombine StaffCombineStaff
- \context StaffCombineVoice=one \violaI
- \context StaffCombineVoice=two \violaII
->
-
-bassiGroup = \context PianoStaff = bassi_group \notes <
- \context StaffCombineStaff=one {
- \clef "bass";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
- \context StaffCombineStaff=two {
- \clef "bass";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
-
- \context StaffCombineStaff=one \partcombine StaffCombineStaff
- \context StaffCombineVoice=one \violoncello
- \context StaffCombineVoice=two \contrabasso
->
-
-
archiGroup = \context StaffGroup = archi_group <
\violiniGroup
\violiGroup
[c,8-. es-.] [es()d] [d-. g-.] g4-"ten." |
[c,8-. es-.] [es()d] [d-. as'-.] [as()g] |
[g8-. c-.] [c()b] [b-. f'-.] [f()es] |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
es4.\< es8 d4. d8 |
%20
c4. c8 \!b4\f r4 |
r4 [des8\p()c][c-. ges'-.][ges()f] |
%25
[f-. bes-.][bes()a][a-. es'-.][es()des] |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
des4.\< des8 c4. c8 |
bes4 \!bes4-.\f r2 |
R1
% same rhythm as violins...
r8 c-.\p c4. c8-. c4~ |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[c8\< c-.]c2.~ |
%30
[c8 c-.]c2.~ |
)g4 r r r8 g(|
%55
)d4 r r r8 d(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)es4 r\< r r8 es(|
)as4 r r r8 as(|
)g4 r r r8 g(|
)bes4 r r r8 bes(|
)as4 r r r8 as(|
)e4 r r r8 e(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)f4\< r r r8 f(|
)bes4 r r r8 bes |
%70
\!c2:\ff bes: |
a: fis: |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
g4\p\< r r r8 g(|
)c,4 r r r8 c |
[\!f8\sf(\>as f as][f g d)\!g] |
[d,-.\pp d'-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
%80
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[d8\< d-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
[e g b c][des c g e]|
[f as c des][c des as f]|
[g bes d es][d es bes g]|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[as\< c d es][f es c as]|
%131
[g bes d es][f es bes g]|
[g,: bes: c: des:][f,: bes: c: des:]|
[e,: g: bes: des:][c,: e: g: c:]|
%shared with cello from here on
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[f,8\p\< as c des][es, g b c]|
[des, f a bes][c, es g as]|
% uhuh, still 'same as cello';
%180
)e4 r r r8 e8(|
)b'4 r r r8 b8(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)c4 r\< r r8 c,8(|
% copied
)f4 r r r8 f8(|
d,4\p r r r8 d8(|
)g4 r r r8 g8(|
)f4 r r r8 f8(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)cis4\< r r r8 cis8(|
)d4 r r r8 d8(|
%195
r[c\p(as)c]r[c(a)c] |
[b-. g'-.] as4. as8-. g4 ~ |
[g8 g-.] as4. as8-. g4 ~ |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[g8 g-.\<] as4. as8-. g4 ~ |
[g8 g-.] as4. as8-. g4 ~ |
%210
%240
f,4 r r2 |
R1*11 |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
c'4\p\< r r r8 c8(|
)f4 r r r8 f,8(|
)es1 |
e'2:16\f e: |
%260
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[as,8\p\< f']f4. es8 es4 ~ |
[es8 as]as4. g8 g4 ~ |
[g8 f]f4. es8 es4 ~ |
es4-. e-. r2 |
f4-. g-. r2 |
%290
- \property Voice.decrescendoText = "dim."
- \property Voice.decrescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.decrescendoText = "dim."
+ \property StaffCombineVoice.decrescendoSpanner = "dashed-line"
as4\> r g r |
R1 |
\!c4\p r r2 |
c4 r r2 |
c4 r r2 |
}
-
-%%% urg
-%%%\include "viola-2.ly";
-%%%
-%%%violaIStaff = \context Staff = violai <
-%%% \property Staff.midiInstrument = #"viola"
-%%% \property Staff.instrument = #"Viola"
-%%% \property Staff.instr = #"Vla."
-%%% \clef "alto";
-%%% \notes \context Voice=one <
-%%% \global
-%%% \violaI
-%%% >
-%%%>
-
[c,8-. es-.] [es()d] [d-. g-.] g4-"ten." |
[c,8-. es-.] [es()d] [d-. as'-.] [as()g] |
[g8-. c-.] [c()b] [b-. f'-.] [f()es] |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
es4.\< es8 d4. d8 |
%20
c4. c8 \!b4\f r4 |
r4 [des8\p()c][c-. ges'-.][ges()f] |
%25
[f-. bes-.][bes()a][a-. es'-.][es()des] |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
des4.\< des8 c4. c8 |
bes4 \!bes4-.\f r2 |
R1
% same rhythm as violins...
r8 c,-.\p c4. c8-. c4~ |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[c8\< c-.]c2.~ |
%30
[c8 c-.]c2.~ |
)g4 r r r8 g(|
%55
)d4 r r r8 d(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)es4 r\< r r8 es(|
)as4 r r r8 as(|
)g4 r r r8 g(|
)bes4 r r r8 bes(|
)as4 r r r8 as(|
)e4 r r r8 e(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)f4\< r r r8 f(|
)bes4 r r r8 bes |
%70
\!as2:\ff g: |
fis: d: |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
g4\p\< r r r8 g(|
)c,4 r r r8 c |
[\!f8\sf(\>as f as][f g d)\!g] |
[d-.\pp d'-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
%80
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[d8\< d-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
[e g b c][des c g e]|
[f as c des][c des as f]|
[g bes d es][d es bes g]|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[as\< c d es][f es c as]|
%131
[g bes d es][f es bes g]|
[g,: bes: c: des:][f,: bes: c: des:]|
[e,: g: bes: des:][c,: e: g: c:]|
%shared with cello from here on
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[f,8\p\< as c des][es, g b c]|
[des, f a bes][c, es g as]|
% uhuh, still 'same as cello';
%180
)e4 r r r8 e8(|
)b'4 r r r8 b8(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)c4 r\< r r8 c,8(|
% copied
)f4 r r r8 f8(|
d,4\p r r r8 d8(|
)g4 r r r8 g8(|
)f4 r r r8 f8(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)cis4\< r r r8 cis8(|
)d4 r r r8 d8(|
%195
r[as\p(d,)as']r[a(es)a] |
[g-. g'-.] as4. as8-. g4 ~ |
[g8 g-.] as4. as8-. g4 ~ |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[g8 g-.\<] as4. as8-. g4 ~ |
[g8 g-.] as4. as8-. g4 ~ |
%210
%240
f,4 r r2 |
R1*11 |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
c'4\p\< r r r8 c8(|
)f4 r r r8 f,8(|
)es1|
bes2:16\f bes: |
%260
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[as8\p\< f']f4. es8 es4 ~ |
[es8 as]as4. g8 g4 ~ |
[g8 f]f4. es8 es4 ~ |
es4-. e-. r2 |
f4-. g-. r2 |
%290
- \property Voice.decrescendoText = "dim."
- \property Voice.decrescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.decrescendoText = "dim."
+ \property StaffCombineVoice.decrescendoSpanner = "dashed-line"
as4\> r g r |
R1 |
\!c4\p r r2 |
\version "1.3.59";
-\include "global.ly"
-\include "viola-1.ly"
-\include "viola-2.ly"
-
-violiGroup = \context PianoStaff = violi_group \notes <
- \context StaffCombineStaff=one {
- \clef "alto";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
- \context StaffCombineStaff=two {
- \clef "alto";
- \key es \major;
- \skip 1*314;
- \bar "|.";
- }
-
- \context StaffCombineStaff=one \partcombine StaffCombineStaff
- \context StaffCombineVoice=one \violaI
- \context StaffCombineVoice=two \violaII
->
+\include "violi.ly"
\score{
\violiGroup
--- /dev/null
+\header{
+filename = "violi.ly";
+% %title = "Ouvert\\"ure zu Collins Trauerspiel \\"Coriolan\\" Opus 62";
+description = "";
+composer = "Ludwig van Beethoven (1770-1827)";
+enteredby = "JCN";
+copyright = "public domain";
+}
+
+\version "1.3.59";
+
+\include "global.ly"
+\include "viola-1.ly"
+\include "viola-2.ly"
+
+violiGroup = \context PianoStaff = violi_group \notes <
+ \context StaffCombineStaff=oneVioli {
+ \property StaffCombineStaff.midiInstrument = #"viola"
+ \property StaffCombineStaff.instrument = #"Viola"
+ \property StaffCombineStaff.instr = #"Vla."
+ \clef "alto";
+ \key es \major;
+ \skip 1*314;
+ \bar "|.";
+ }
+ \context StaffCombineStaff=twoVioli {
+ \property StaffCombineStaff.midiInstrument = #"viola"
+ \property StaffCombineStaff.instrument = #"Viola II"
+ \property StaffCombineStaff.instr = #"Vla. II"
+ \clef "alto";
+ \key es \major;
+ \skip 1*314;
+ \bar "|.";
+ }
+
+ \context StaffCombineStaff=oneVioli \partcombine StaffCombineStaff
+ \context StaffCombineVoice=one \violaI
+ \context StaffCombineVoice=two \violaII
+>
c'1\ff ~ |
c |
f,4-. r r2 |
- \property Staff.instr = #"Vc.\nCb."
+ \property StaffCombineStaff.instr = #"Vc.\nCb."
r1 |
c'1\ff ~ |
c |
c4 r4 r2 |
c4 r4 r2 |
r1 |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
c'4.\< c8 bes4. bes8 |
%20
%25
[f-. bes-.][bes()a][a-. es'-.][es()des]|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
bes4.\< bes8 as4. as8 |
g4 \!g4-.\f r2 |
R1
%55
[bes(as'f as][bes as f)bes,~] |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[bes\<(g'es g][bes g es)bes~] |
[bes(f'd f][bes f d)bes~] |
[bes(g'es g][bes g es)bes~] |
%70
as2\ff g |
fis d |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[g8\p\<(bes' g bes][d bes g)d~] |
[d8(a' fis a][d a fis)d] |
[\!f!8\sf\>(as f as][f g d)g] |
r4 r8 d d4. d8 |
%80
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
r4 r8 d d4.\< d8 |
r4 r8 d d4. d8 |
r4 r8 d d4. d8 |
[e g b c][des c g e]|
[f as c des][c des as f]|
[g bes d es][d es bes g]|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[as\< c d es][f es c as]|
%131
[g,: bes: c: des:][f,: bes: c: des:]|
[e,: g: bes: des:][c: e: g: c:]|
%shared with cello from here on
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[f,8\p\< as c des][es, g b c]|
[des, f a bes][c, es g as]|
% uhuh, still 'same as cello';
%180
[g(e' c d][g e c )g~] |
[g(f' d f][g f d )g,~] |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[g\<(e' c d][g e c )g~] |
[g(d' b d][g d b )g~] |
[a( g' e g][a g e )a,!~] |
%195
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
[a8\<( f' d f][a f d )a!~] |
[a( e' cis e][a e c )g] |
\!f2\ff e |
f r fis r |
g r g r |
g r g r |
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
g r g\< r |
%210
%250
)es4 r r r8 es(|
)b4 r r r8 b(|
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
)c4\< r r r8 c(|
)f4 r r r8 f,(|
)es1 |
bes\f |
%260
- \property Voice.crescendoText = "cresc."
- \property Voice.crescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.crescendoText = "cresc."
+ \property StaffCombineVoice.crescendoSpanner = "dashed-line"
as4.\p\< as'8 g4. g8 |
f4. f8 es4. es8 |
as4. as8 g4. g8 |
f,4-. g-. r2 |
%290
- \property Voice.decrescendoText = "dim."
- \property Voice.decrescendoSpanner = "dashed-line"
+ \property StaffCombineVoice.decrescendoText = "dim."
+ \property StaffCombineVoice.decrescendoSpanner = "dashed-line"
as4\> r b r |
R1 |
\!c4\p r r2|
c4 r r2 |
[c8-.-"arco" es-.][es()d][d-. as'-.][as()g] |
R1
- \property Voice.decrescendoText = "sempre pi\\`u piano"
- \property Voice.decrescendoSpanner = ""
+ \property StaffCombineVoice.decrescendoText = "sempre pi\\`u piano"
+ \property StaffCombineVoice.decrescendoSpanner = ""
\times 2/3 { c,4\> ( es c ~ } \times 2/3 { c as' )g } |
%300
c4 r r2 |
c4 r r2 |
}
-
-%%%violoncelloStaff = \context Staff = violoncello <
-%%% \property Staff.midiInstrument = #"cello"
-%%% \property Staff.instrument = #"Violoncello\ne\nContrabasso"
-%%% \property Staff.instr = #"Vc."
-%%% \clef "bass";
-%%% \notes \context Voice=one<
-%%% \global
-%%% \violoncello
-%%% >
-%%%>
-
(before-line-breaking-callback . ,Beam::before_line_breaking)
(after-line-breaking-callback . ,Beam::after_line_breaking)
(default-neutral-direction . 1)
-
+ (outer-stem-length-limit . 0.2)
+ (slope-limit . 0.2)
(beam-flag-width-function . ,default-beam-flag-width-function)
(beam-space-function . ,default-beam-space-function)
(damping . 1)
)
)
+(define generic-bar-number-properties
+ (cons 'bar-number-interface
+ (list
+ (list 'barNumberScriptPadding number? 'padding)
+ (list 'barNumberDirection dir? 'direction)
+ )
+
+ )
+ )
+
+
; don't do this yet. Depends on whennn the staff is really announced
(define generic-staff-symbol-properties
(cons 'staff-symbol-interface
(define (get-font name)
;; urg
- (if (equal? name "as-dummy")
+ (if (equal? (substring name 0 (min (string-length name) 8)) "as-dummy")
(get-font "default")
(let ((entry (assoc name fonts)))
(if entry
(define (load-font name mag)
;; urg: don't load dummy font
- (if (not (equal? name "as-dummy"))
+ (if (not (equal? (substring name 0 (min (string-length name) 8)) "as-dummy"))
(let ((text (af-gulp-file (string-append name ".af"))))
(if (< 0 (string-length text))
(let* ((char-list (cdr
(begin
(set! fonts (cons (cons "default" (generate-default-font)) fonts))
(display "\n" (current-error-port))
- (if (defined? 'mudelapaperlinewidth)
+ (if (and (defined? 'mudelapaperlinewidth)
+ (> (string->number mudelapaperlinewidth) 0))
(set! canvas-width
(inexact->exact (string->number mudelapaperlinewidth))))))
(set! canvas-height height)