From: fred Date: Sun, 24 Mar 2002 20:09:51 +0000 (+0000) Subject: lilypond-0.1.57 X-Git-Tag: release/1.5.59~3201 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=6b8adfc330b679d0d9889440e584b906d7da1b48;p=lilypond.git lilypond-0.1.57 --- diff --git a/flower/include/matrix.hh b/flower/include/matrix.hh index 6b5f773b2f..321aeaadcf 100644 --- a/flower/include/matrix.hh +++ b/flower/include/matrix.hh @@ -12,6 +12,7 @@ #include "matrix-storage.hh" #include "vector.hh" +#include "offset.hh" /** a Real matrix. This is a class for a nonsquare block of #Real#s. The implementation of sparse matrices is done in the appropriate #smat# @@ -112,7 +113,6 @@ public: /// set this to m1*m2. void set_product (Matrix const &m1, Matrix const &m2); - Vector left_multiply (Vector const &) const; Matrix operator-() const; diff --git a/input/sleur.ly b/input/sleur.ly index 964e05a0ca..4ef5e88d91 100644 --- a/input/sleur.ly +++ b/input/sleur.ly @@ -58,12 +58,12 @@ blend = \melodic{ \stemdown; %% \[4/5c8( c ''c c c\]1/1 c c c )c | \[4/5c8( c ''f c c\]1/1 c c c )c | + \[4/5c8( c \stemup ''f \stemdown c c\]1/1 c c c )c | \stemup; \octave c''; \[4/5c8( c f'' c c\]1/1 c c c )c | \[4/5c8( c \stemdown f'' \stemup c c\]1/1 c c c )c | -% \octave c'''; \stemboth; c4( 'c16 'e 'g 'b d f a )'c16 c4 | c4( 'c16 'e 'g 'b d f f )'c16 c4 | diff --git a/lily/beam.cc b/lily/beam.cc index a463ff233f..6ad3fe78c0 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -426,34 +426,36 @@ Beam::set_stemlens () be more generous regarding beam position between stafflines */ Real q = (yspan_f / interline_f - yspan_i) * interline_f; - if (q < interline_f / 3 - beam_thickness / 2) + if ((quantisation_ < NORMAL) && (q < interline_f / 3 - beam_thickness / 2)) left_pos = (Pos) (left_pos | INTER); + if (multiple_i_ > 1) left_pos = (Pos) (dir_ > 0 ? HANG : SIT); - // ugh, rounding problems! + // ugh, rounding problems! (enge floots) const Real EPSILON = interline_f / 10; do { left_y_ += dy * dir_; quantise_left_y (left_pos, dy); dy = 0; - for (int j=0; j < stems_.size (); j++) + for (int i=0; i < stems_.size (); i++) { - Stem *s = stems_[j]; + Stem *s = stems_[i]; if (s->transparent_b_) continue; Real x = s->hpos_f () - x0; s->set_stemend (left_y_ + slope_f_ * x); Real y = s->stem_length_f (); - int mult = max (stems_[j]->beams_left_i_, stems_[j]->beams_right_i_); - if (mult > 1) + // duh: + int mult_i = stems_[i]->beams_left_i_ >? stems_[i]->beams_right_i_; + if (mult_i > 1) // dim(y) = internote - y -= (Real)(mult - 1) * interbeam_f / internote_f; - if (y < MINIMUM_STEMLEN[mult]) - dy = dy >? (MINIMUM_STEMLEN[mult] - y); + y -= (Real)(mult_i - 1) * interbeam_f / internote_f; + if (y < MINIMUM_STEMLEN[mult_i]) + dy = dy >? (MINIMUM_STEMLEN[mult_i] - y); } } while (abs (dy) > EPSILON); } diff --git a/lily/include/bezier.hh b/lily/include/bezier.hh index 5f5c59d7b4..f5c871ed05 100644 --- a/lily/include/bezier.hh +++ b/lily/include/bezier.hh @@ -7,8 +7,12 @@ #ifndef BEZIER_HH #define BEZIER_HH +#ifndef STANDALONE #include "lily-proto.hh" +#endif + #include "real.hh" +#include "curve.hh" /** Simple bezier curve @@ -17,20 +21,21 @@ class Bezier { public: Bezier (int steps_i); - virtual ~Bezier (); /** Calculate bezier curve into Offset (x,y) array. */ - void calc (Offset control[4]); + void calc (); + + void set (Array points); /** Return y that goes with x by interpolation. */ Real y (Real x); - int steps_i_; - Offset* curve_; + Curve curve_; + Curve control_; }; /** @@ -44,9 +49,26 @@ public: /** Calculate bezier curve for bow from bow parameters. */ - void calc (Real dx, Real dy, Real h, Real d); + void blow_fit (); + Real calc_f (Real height); + void calc (); + void calc_controls (); + void calc_default (Real h); + void calc_return (Real begin_alpha, Real end_alpha); + bool check_fit_bo (); + Real check_fit_f (); + void set (Array points, int dir); + void transform (); + void transform_controls_back (); + Paper_def* paper_l_; + Curve encompass_; + int dir_; + Real alpha_; + Offset origin_; + Curve return_; }; #endif // BEZIER_HH + diff --git a/lily/slur.cc b/lily/slur.cc index 7ad52ce6d2..fcc57eab1d 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -23,6 +23,9 @@ #include "debug.hh" #include "boxes.hh" #include "bezier.hh" +#include "main.hh" + +IMPLEMENT_IS_TYPE_B1(Slur,Spanner); void Slur::add (Note_column*n) @@ -111,7 +114,7 @@ Slur::do_post_processing () do { - if (extrema[d] != spanned_drul_[d]) + if (extrema[d] != spanned_drul_[d]) { dx_f_drul_[d] = -d *(spanned_drul_[d]->width ().length () -0.5*nw_f); @@ -120,7 +123,11 @@ Slur::do_post_processing () { dy_f_drul_[d] = (int)rint (extrema[d]->stem_l_->height ()[dir_]); /* normal slur from notehead centre to notehead centre, minus gap */ - dx_f_drul_[d] += -d * gap_f; + // ugh: diff between old and new slurs + if (!experimental_features_global_b) + dx_f_drul_[d] += -d * gap_f; + else + dx_f_drul_[d] += 0.5 * nw_f - d * gap_f; } else { @@ -131,118 +138,164 @@ Slur::do_post_processing () while (flip(&d) != LEFT); } -static Real -pos_correct (Real x, Real dx, Real dy) +Real +Slur::height_f () const { + Bezier_bow bow (paper ()); + Array notes = get_notes (); + bow.set (notes, dir_); + + Real height = 0; + Real dy1 = bow.calc_f (height); + if (!dy1) + return height; + + height = dy1; + bow.set (notes, dir_); + Real dy2 = bow.calc_f (height); + if (!dy2) + return height; + + if (abs (dy2 - dy1) < paper ()->rule_thickness ()) + return height; + /* - guess how much we can safely increase 'h' - parameter of bow without taking too large - or too many steps. - empiric computer science + Assume + dy = B (h) + with + B (h) = a * h + b; + + Then we get for height = h{dy=0} */ -// return (1.0 + 2.0 * x / dx) / 4.0; - return 1.0; + Real a = (dy2 - dy1) / dy1; + Real b = dy1; + height = -b / a; + + if (check_debug && !monitor->silent_b ("Slur")) + { + cout << "************" << endl; + cout << "dy1: " << dy1 << endl; + cout << "dy2: " << dy2 << endl; + cout << "a: " << a << endl; + cout << "b: " << b << endl; + cout << "h: " << height << endl; + } + + return height; } -Real -Slur::height_f () const +Molecule* +Slur::brew_molecule_p () const { - return 0.0; + if (!experimental_features_global_b) + return Bow::brew_molecule_p (); + + Molecule* mol_p = new Molecule; + Real dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT]; + + Real dx_f = width ().length (); + dx_f += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); + + Atom a = paper ()->lookup_l ()->control_slur (get_controls (), dx_f, dy_f); + + Real interline_f = paper ()->interline_f (); + Real gap_f = interline_f / 2; // 5; + Real nw_f = paper ()->note_width (); + a.translate (Offset (dx_f + 0.5 * nw_f + gap_f, dy_f + dy_f_drul_[LEFT])); + mol_p->add (a); + return mol_p; +} + +Array +Slur::get_notes () const +{ Real interline = paper ()->interline_f (); Real notewidth = paper ()->note_width (); Real internote = interline / 2; - /* - having the correct (i.e. exactly the same as the ps stuff) - x,y coordinates is essential. - getting them is quite a mess, currently. - */ - - Stem* left_stem =encompass_arr_[0]->stem_l_; + Stem* left_stem = encompass_arr_[0]->stem_l_; Real left_x = left_stem->hpos_f (); // ugh, do bow corrections (see brew_mol) left_x += dx_f_drul_[LEFT] + 0.5 * notewidth; -// Real left_y = left_stem->dir_ == dir_ ? left_stem->stem_end_f () + dir_ -// : left_stem->stem_begin_f () + 0.5 * dir_; -// left_y *= internote; - // ugh, do bow corrections (see brew_mol) -// left_y = dy_f_drul_[LEFT]; - // ugh, do bow corrections (see brew_mol) Real left_y = dy_f_drul_[LEFT]; - // ugh, where does this asymmetry come from? if (dir_ == DOWN) left_y -= dir_ * internote; - Real dx = width ().length (); - Real dy = (dy_f_drul_[RIGHT] - dy_f_drul_[LEFT]); - Real centre_x = dx / 2; - - - // ugh, need staffheight for bow damping - Bezier_bow b (paper ()); - - if (check_debug && !monitor->silent_b ("Slur")) + /* + urg, corrections for broken slurs: extra begin or end position + */ + int first = 0; + int n = encompass_arr_.size (); + if (encompass_arr_[0] != spanned_drul_[LEFT]) { - cout << "*****************" << endl; - cout << "dir: " << (int)dir_ << endl; - cout << "dx: " << dx << endl; - cout << "dy: " << dy << endl; - cout << "centre: " << centre_x << endl; - for (int i = 0; i < encompass_arr_.size (); i++) - cout << "i: " << i << " x: " - << encompass_arr_[i]->stem_l_->hpos_f () - left_x << endl; + n += 1; + first = 1; + left_x = spanned_drul_[LEFT]->width ().length (); + left_y = 0; } - Real height = 0; - Real dh = 0; - do - { - height += dh; - dh = 0; - b.calc (dx, dy, height, dir_); - - if (check_debug && !monitor->silent_b ("Slur")) - cout << "----" << endl; - for (int i = 1; i < encompass_arr_.size () - 1; i++) - { - Stem* stem = encompass_arr_[i]->stem_l_; - /* - set x to middle of notehead or on exact x position of stem, - according to slur direction - */ - Real x = stem->hpos_f () - left_x + notewidth / 2; - if (stem->dir_ != dir_) - x += notewidth / 2; - else if (stem->dir_ == UP) - x += notewidth; - Real y = stem->dir_ == dir_ ? stem->stem_end_f () - : stem->stem_begin_f () + 1.5 * dir_; - - /* - leave a gap: slur mustn't touch head/stem - */ - y += 2.5 * dir_; - y *= internote; - y -= left_y; - - Real shift = dir_ * (y - b.y (x)); + if (encompass_arr_.top () != spanned_drul_[RIGHT]) + n += 1; - if (check_debug && !monitor->silent_b ("Slur")) - { - cout << "x: " << x << " (" << abs (centre_x - x) << ")" << endl; - cout << "y: " << y << ", curve: " << b.y (x) << endl; - cout << "shift: " << shift << endl; - } + Array notes; + notes.set_size (n); - if (shift > 0.1 * internote) - dh = dh >? shift * pos_correct (abs (centre_x - x), dx, dy); - } - } while (dh); + Real dx = width ().length (); + dx += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); + dx = dx ? 2 * interline; + + Real dy = (dy_f_drul_[RIGHT] - dy_f_drul_[LEFT]); + if (abs (dy) > 1000) + dy = sign (dy) * 1000; + + notes[0].x () = 0; + notes[0].y () = 0; + notes[n - 1].x () = dx; + notes[n - 1].y () = dy; + for (int i = 1; i < n - 1; i++) + { + Stem* stem = encompass_arr_[i - first]->stem_l_; + /* + set x to middle of notehead or on exact x position of stem, + according to slur direction + */ + Real x = stem->hpos_f () - left_x + notewidth / 2; + if (stem->dir_ != dir_) + x += notewidth / 2; + else if (stem->dir_ == UP) + x += notewidth; + Real y = stem->dir_ == dir_ ? stem->stem_end_f () + : stem->stem_begin_f () + 2.5 * dir_; + + /* + leave a gap: slur mustn't touch head/stem + */ + y += 2.5 * dir_; + y *= internote; + y -= left_y; + + notes[i].x () = x; + notes[i].y () = y; + } + return notes; +} - return height; +Array +Slur::get_controls () const +{ + Bezier_bow b (paper ()); + b.set (get_notes (), dir_); + b.calc (); + Array controls; + controls.set_size (8); + for (int i = 0; i < 4; i++) + controls[i] = b.control_[i]; + for (int i = 0; i < 4; i++) + controls[i + 4] = b.return_[i]; + return controls; } -IMPLEMENT_IS_TYPE_B1(Slur,Spanner); diff --git a/lily/staff-side.cc b/lily/staff-side.cc index 0e8b9c7cde..99476a6206 100644 --- a/lily/staff-side.cc +++ b/lily/staff-side.cc @@ -69,7 +69,7 @@ Staff_side::get_position_f () const Interval v = support_height(); // ugh, dim[y] = PT over here - y = v[dir_] + 1 * dir_ * inter_f; + y = v[dir_] + 2 * dir_ * inter_f; int y_i = (int)rint (y / inter_f); // ugh: 5 -> staff_lines diff --git a/mutopia/J.S.Bach/preludes.tex b/mutopia/J.S.Bach/preludes.tex index 6bed0be4d8..b1680f9d3a 100644 --- a/mutopia/J.S.Bach/preludes.tex +++ b/mutopia/J.S.Bach/preludes.tex @@ -1,18 +1,28 @@ \documentclass{article} %UGH \usepackage{a4} +% UGH UGH \advance\oddsidemargin-30mm \evensidemargin\oddsidemargin % ugh, centre \advance\textwidth60mm -\hsize210mm -\vsize269mm -\advance\topmargin-25mm -\advance\textheight50mm -\pagestyle{empty} +\advance\topmargin-20mm +\addtolength{\textheight}{40mm} +\footskip5mm + +\usepackage{fancyheadings} +\lhead{} +\rhead{} +\chead{} +\lfoot{} +\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} +\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} + +\headrulewidth0mm +\pagestyle{fancy} +\thispagestyle{fancy} \input titledefs - \input lilyponddefs \def\interscoreline{\vskip2mm} %ugh diff --git a/mutopia/los-toros-oboe-16.tex b/mutopia/los-toros-oboe-16.tex new file mode 100644 index 0000000000..98973e2e4b --- /dev/null +++ b/mutopia/los-toros-oboe-16.tex @@ -0,0 +1,38 @@ +\documentclass{article} %UGH + +\usepackage{a4} + +% UGH UGH +% ugh, centre +\advance\oddsidemargin-30mm +\evensidemargin\oddsidemargin +\advance\textwidth60mm +\advance\topmargin-20mm +\addtolength{\textheight}{40mm} +\footskip5mm + +\usepackage{fancyheadings} +\lhead{} +\rhead{} +\chead{} +\lfoot{} +\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} +\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} + +\headrulewidth0mm +\pagestyle{fancy} +\thispagestyle{fancy} + + +\begin{document} +\input lilyponddefs +\input titledefs +\def\interscoreline{\vskip3mm} +\title{La Feria\normalsize\\[2ex]Los Toros} +\composer{Paul Lac\^ome d'Estalenx (1838-1920)} +%\instrument{} % heu +%#%\tempo{M\"a\ss ig} +\makelilytitle +\input{los-toros-oboe-1.tex} +\end{document} + diff --git a/mutopia/los-toros-oboe-20.tex b/mutopia/los-toros-oboe-20.tex index 910651a6f5..555a046d0d 100644 --- a/mutopia/los-toros-oboe-20.tex +++ b/mutopia/los-toros-oboe-20.tex @@ -1,15 +1,29 @@ \documentclass{article} %UGH + \usepackage{a4} -% % UGH UGH -\advance\oddsidemargin-30mm +\advance\oddsidemargin-25mm \evensidemargin\oddsidemargin % ugh, centre -\advance\textwidth60mm +\advance\textwidth40mm \advance\topmargin-20mm \addtolength{\textheight}{40mm} -\pagestyle{empty} +\footskip5mm + +\usepackage{fancyheadings} +\lhead{} +\rhead{} +\chead{} +\lfoot{} +\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} +\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} + +\headrulewidth0mm +\pagestyle{fancy} +\thispagestyle{fancy} + + \begin{document} \input lilyponddefs \input titledefs @@ -20,5 +34,6 @@ %#%\tempo{M\"a\ss ig} \makelilytitle \input{los-toros-oboe.tex} -%\input lelie.tex +% \input{los-toros-oboe-1.tex} \end{document} + diff --git a/mutopia/los-toros-oboe.ly b/mutopia/los-toros-oboe.ly index faafa951fb..822a0b27d9 100644 --- a/mutopia/los-toros-oboe.ly +++ b/mutopia/los-toros-oboe.ly @@ -1,12 +1,16 @@ \header{ filename = "los-toros-oboe.ly"; -title = "Los Toros"; +title = "La Feria\normalsize\\[2ex]Los Toros"; opus = ""; -composer = "Paul Lac\^ome d'Estalenx (1838-1920)"; +composer = "Paul Lac\\^ome d'Estalenx (1838-1920)"; enteredby = "jcn"; copyright = "public domain"; } +%{ +Silly latex file dropped; use ly2dvi +%} + \include "paper20.ly" hoboonestart = \melodic{ @@ -177,9 +181,10 @@ hoboonelast = \melodic{ [bes16-. bes-. bes-. bes-.] [bes8-. ces'->] | [bes'16-.\ff bes'-. bes'-. bes'-.] [bes'8-. ces''16->] r16^"court"-\fermata | % ugh: eight measures rest (ugh: r1 -> four beats...) + % eiht measures rest.. \textstyle "bold"; % r2^"Un peu plus lent et \\'el\\'egant" - r2 + r2^"\\fetanummer8" r4 r8\p bes | g2->^"Un peu plus lent et \\'el\\'egant" ~ | \textstyle "italic"; @@ -282,58 +287,60 @@ $staff_hoboone = \type Staff = hoboonestaff < a4 = \paper{ \paper_twenty - linewidth= 165.\mm; + linewidth= 185.\mm; gourlay_maxmeasures = 10.0; - Score = \translator { - \type Score_engraver; - - \consists "Timing_engraver"; - \consists "Bar_column_engraver"; - \consists "Bar_number_engraver"; - - \consists "Span_score_bar_engraver"; - \consists "Score_priority_engraver"; - \consists "Priority_horizontal_align_engraver"; - \consists "Vertical_align_engraver"; - + Staff = \translator { + \type "Engraver_group_engraver"; + defaultclef = violin; - \accepts "Staff_group"; - \accepts "Staff"; - \accepts "Rhythmic_staff"; - \accepts "Lyrics"; - \accepts "Grandstaff"; + \consists "Bar_engraver"; + \consists "Clef_engraver"; + \consists "Key_engraver"; + \consists "Meter_engraver"; + \consists "Local_key_engraver"; + \consists "Staff_sym_engraver"; + \consists "Collision_engraver"; + \consists "Rest_collision_engraver"; +% not yet: multibar rest +% \consists "Bar_column_engraver"; +% \consists "Bar_number_engraver"; + \consists "Separating_line_group_engraver"; + \consists "Line_group_engraver"; + + \accepts "Voice"; } } a4sixteen = \paper{ - linewidth= 165.\mm; - Score = \translator { - \type Score_engraver; - - \consists "Timing_engraver"; - \consists "Bar_column_engraver"; - \consists "Bar_number_engraver"; - - \consists "Span_score_bar_engraver"; - \consists "Score_priority_engraver"; - \consists "Priority_horizontal_align_engraver"; - \consists "Vertical_align_engraver"; - + linewidth= 193.\mm; + Staff = \translator { + \type "Engraver_group_engraver"; + defaultclef = violin; - \accepts "Staff_group"; - \accepts "Staff"; - \accepts "Rhythmic_staff"; - \accepts "Lyrics"; - \accepts "Grandstaff"; + \consists "Bar_engraver"; + \consists "Clef_engraver"; + \consists "Key_engraver"; + \consists "Meter_engraver"; + \consists "Local_key_engraver"; + \consists "Staff_sym_engraver"; + \consists "Collision_engraver"; + \consists "Rest_collision_engraver"; +% not yet: multibar rest +% \consists "Bar_column_engraver"; +% \consists "Bar_number_engraver"; + \consists "Separating_line_group_engraver"; + \consists "Line_group_engraver"; + + \accepts "Voice"; } } \score{ \$staff_hoboone \paper{ \a4 } -% \paper{ \a4sixteen } \midi{ \tempo 4 = 80; } + \paper{ \a4sixteen } } diff --git a/mutopia/standchen-16.tex b/mutopia/standchen-16.tex index e22d627ae9..21ef2cf758 100644 --- a/mutopia/standchen-16.tex +++ b/mutopia/standchen-16.tex @@ -1,8 +1,22 @@ \documentclass{article} %UGH \usepackage{a4} + \advance\oddsidemargin-15mm \evensidemargin\oddsidemargin \advance\textwidth30mm +\footskip5mm + +\usepackage{fancyheadings} +\lhead{} +\rhead{} +\chead{} +\lfoot{} +\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} +\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} + +\headrulewidth0mm +\pagestyle{fancy} +\thispagestyle{fancy} \input titledefs %\pagestyle{empty} @@ -14,5 +28,5 @@ %#%\tempo{M\"a\ss ig} \makelilytitle \input{standchen-16.out} -%\input lelie.tex \end{document} + diff --git a/mutopia/standchen-20.tex b/mutopia/standchen-20.tex index ed2f7e9bc5..4ee0201a27 100644 --- a/mutopia/standchen-20.tex +++ b/mutopia/standchen-20.tex @@ -1,14 +1,28 @@ \documentclass{article} %UGH \usepackage{a4} -% % UGH UGH \advance\oddsidemargin-30mm \evensidemargin\oddsidemargin % ugh, centre \advance\textwidth60mm -\addtolength{\textheight}{20mm} -\pagestyle{empty} +\advance\topmargin-20mm +\addtolength{\textheight}{40mm} +\footskip5mm + +\usepackage{fancyheadings} +\lhead{} +\rhead{} +\chead{} +\lfoot{} +\cfoot{\ifnum\thepage=1{\hfill\LilyIdString}\fi} +\rfoot{\ifnum\thepage>1{\hfill\thepage\hfill}\fi} + +\headrulewidth0mm +\pagestyle{fancy} +\thispagestyle{fancy} + + \begin{document} \input lilyponddefs \input titledefs @@ -19,5 +33,5 @@ %#%\tempo{M\"a\ss ig} \makelilytitle \input{standchen-20.out} -%\input lelie.tex \end{document} +