+1.3.79.jcn5
+===========
+
+* Created Thread_devnull_engraver and Voice_devnull_engraver iso
+ single A2_devnull_engraver in Thread context. It seems however
+ that the hack in A2_devnull_engraver works better.
+
+* Coriolan fixes.
+
+* Slur attachment fix for chords where case slurdir != stemdir.
+
+* Made various fixes for (line-)broken slurs.
+
+* Fixed slur_height (), which fixes most ugly slurs (Yeah!).
+
+* Fixed some silly url reversals in FAQ.
+
+* Finished Coriolan music entry (again); entered second viola part.
+
+* Updated Coriolan to use part combiner on Voice level for wind parts
+ and on Staff level for violi and bassi.
+
+* Part-combiner now uses duration inquiry, which fixes rhythm-related
+ bugs in determining solo/a2. Also, rests are taken into account.
+
+* Another crude fix for almost unexplainable (with a gdb that dumps
+ core on ly_display_scm) all-zero control points slurs.
+
+* Fixed slurs that crossed through stems and note heads. Note
+ that beautifying of ugly slurs is still broken.
+
+* Made crude fixes slurs don't crash, bezier still crashes on
+ infinitely steep slurs (eg flauti-part *with* slur_engraver).
+
+1.3.79.gp1
+==========
+
+* Replaced empty melisma score element with a property
+
+* Renamed Voice_alist_entry -> Syllable_group in lyric-phrasing-engraver
+
+1.3.79.uu1
+==========
+
+* fixed y-position of whole rest
+
+* fixed sustainPedalPadding
+
+* etf2ly: articulation, lyrics.
+
+1.3.79
+======
* etf2ly.py: Finale to LilyPond conversion.
1.3.78.jcn4
(server-start)
@end example
-For column positioning, apply @uref{this
-patch,http://www.cs.uu.nl/~hanwen/software/emacsclient-column} to
-@code{emacsclient.c} and @code{server.el}. Stick the compiled
+For column positioning, apply
+@uref{http://www.cs.uu.nl/~hanwen/software/emacsclient-column, this
+patch} to @code{emacsclient.c} and @code{server.el}. Stick the compiled
emacsclient into a bin directory, and put @code{server.el} into a elisp
directory (eg. @file{~/usr/share/emacs/}). Add the following to your
@file{.emacs} init file, before invoking server-start.
Click control-mouse button 2 for making emacs jump to the appropriate place.
-For column positioning you must install this @uref{patch,
-http://www.cs.uu.nl/~hanwen/software/xdvik-src} to make Xdvik emit
-column numbers. Add the command line option @code{-srceditorcommand
-"emacsclient --no-wait +%l:%c %f"}
+For column positioning you must install
+@uref{http://www.cs.uu.nl/~hanwen/software/xdvik-src, this patch} to
+make Xdvik emit column numbers. Add the command line option
+@code{-srceditorcommand "emacsclient --no-wait +%l:%c %f"}
Xdvi
@uref{Xdvi,ftp://ftp.math.berkeley.edu/pub/Software/TeX/xdvi.tar.gz} has
-better support for src specials. Apply @uref{this patch,
-http://www.cs.uu.nl/~hanwen/software/xdvi-src}. Before starting, set the
-environment variable @code{XEDITOR} to @code{"emacsclient --no-wait +%d
-%s"}. When viewing, control-mousebutton 1 will take you to the correct
+better support for src specials. Apply
+@uref{http://www.cs.uu.nl/~hanwen/software/xdvi-src, this patch}. Before
+starting, set the environment variable @code{XEDITOR} to
+@code{"emacsclient --no-wait +%d %s"}. When viewing,
+control-mousebutton 1 will take you to the correct
line/column. Control-mousebutton 2 will show all clickable boxes.
dvips:
@mudelafile{beam-position.ly}
Slurs should look nice and symmetric. The curvature may increase
-only to avoid noteheads, and as little as possible.
+only to avoid noteheads, and as little as possible. Slurs never
+run through noteheads or stems.
+@mudelafile{slur-nice.ly}
@mudelafile{slur-symmetry.ly}
@mudelafile{slur-symmetry-1.ly}
+Across line breaks, slurs behave nicely. On the left, they extend to
+just after the preferatory matter, and on the right to the end of the
+staff. A slur should follow the same vertical direction it would have
+in unbroken state.
+
+@mudelafile{slur-broken.ly}
+
Ties are strictly horizontal. They are placed in between note heads.
The horizontal middle should not overlap with a staffline.
@mudelafile{hara-kiri-short.ly}
+In orchestral scores and hymns, voices are traditionally combined onto
+one staff. LilyPond has a part combiner, that combines or separates two
+voices according to actual rhythm and pitch. User-defined texts such as
+``solo'' and ``@`a2'' are typeset automagically, as appropriate.
+
+@mudelafile{part-combine.ly}
+
Fonts are available in a default set of sizes: 11, 13, 16, 20, 23 and
26pt staffheight. Sizes of the text fonts and symbol fonts are made
* Improved design and implementation: Complete rewrite of the
internals: LilyPond is smaller, cleaner, more flexible, etc.
- - More pervasive GUILE integration resulting in
+ - More pervasive GUILE integration resulting in:
- - Improved speed, with comparable memory footprint
+ - Improved speed (undone for now, by .73 + .74),
+ with comparable memory footprint
- Improved robustness: Lily almost never crashes.
* Typography: More elegant slurs, aligned dynamics, text crescendos,
+* Nice lyrics placement: Automagical phrasing and melisma alignment.
+
+* Part combining for orchestral scores and hymns: Automagical combining
+ and separating of two voices, with Solo/`a2 indications as appropriate.
+
* Chordnames are now configurable in every respect
* Included extensive glossary
--- /dev/null
+\score{
+ <
+ \context Staff = flauti <
+ \context Voice=one \partcombine Voice
+ \context Thread=one \notes\relative c''
+ {
+ %c1
+ c2 c2
+ }
+ \context Thread=two \notes\relative c''
+ {
+ }
+ >
+ >
+ \paper{
+
+ }
+}
\score{
\context Staff <
- \context Voice=one { \skip 1; }
- \context Voice=two { \skip 1; }
-
+ \time 4/4;
\context Voice=one \partcombine Voice
\context Thread=one \notes\relative c'' {
- %a4 c4.()g8 a4 |
+ a4 c4.()g8 a4 |
g4 e' g()f |
b, a c2
}
\context Thread=two \notes\relative c'' {
- %g4 e4.()d8 c4 |
- g4 c, e()f |
+ g4 e4.()d8 c4 |
+ g'4 c, e()f |
d2 a
}
>
\translator {
\VoiceContext
soloADue = ##f
- %\remove Slur_engraver;
- \consists Slur_engraver;
}
-% \translator {
-% \ThreadContext
-% \consists Slur_engraver;
-% }
}
}
--- /dev/null
+
+%% Chord gurus, is this ok now??
+
+monstrous= \chords{
+ \property Score.chordInversion = ##t
+
+ % /c is/was missing:
+ bes:6/+c
+
+ % Cdim7
+ c:dim7
+}
+
+\score{
+ <
+ \context ChordNames \monstrous
+ \context Staff \monstrous
+ >
+ \paper{
+ linelength=-1.0\mm;
+ }
+}
Soprano = \notes \relative c' {
\allup
- d4 | g g b b a g a b a g b a g2.
+ d4 | g g b b a g a b a g b a g( a )g % modified to test melisma align right
- a4 | b a g b [d16 d c8] [b a] b4 % modified to test beam melisma
+ [a8 b] | b4 % modified to test melisma align left
+ a g b [d16 d c8] [b a] b4 % modified to test beam melisma
% a4 | b a g b [d8 \melisma c] \melismaEnd [b \melisma a] \melismaEnd b4
d d2 d e d4( cs8 ~ )cs d2.
--- /dev/null
+\score{
+ <
+ \context VoiceCombineStaff = flauti <
+ \time 4/4;
+
+ \context VoiceCombineThread=one \skip 1*9;
+ \context VoiceCombineThread=two \skip 1*9;
+
+ \context VoiceCombineVoice=one \partcombine VoiceCombineVoice
+ \context VoiceCombineThread=one \notes\relative c''
+ {
+ c4 d e f
+ b,4 d c d
+ r2 e4 f
+ \break
+ c4 d e f
+ c4 r e f
+ c4 r e f
+ \break
+ c4 r a r
+ a a r a
+ a2 \property VoiceCombineThread.soloADue = ##f a
+ }
+ \context VoiceCombineThread=two \notes\relative c''
+ {
+ g4 b d f
+ r2 c4 d
+ a c c d
+ a4. b8 c4 d
+ c r e r
+ r2 s2
+ a,4 r a r
+ a r r a
+ 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 StaffCombineThread=one \notes\relative c''
+ {
+ c4 d e f
+ c d e f
+ c 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
+ d1
+ }
+ \context StaffCombineThread=two \notes\relative c''
+ {
+ c4 d e f
+ c d e f
+ c d e f
+ c2 e2
+ c4 d e f
+ c2 e2
+ c,4 d e f
+ a8 a a a
+ b b b b
+ b1
+ }
+ >
+ >
+ \paper{
+ %
+ % The Voice combine hierarchy
+ %
+ \translator{
+ \ThreadContext
+ \name "VoiceCombineThread";
+ \consists "Rest_engraver";
+ }
+ \translator{
+ \VoiceContext
+ \name "VoiceCombineVoice";
+ \remove "Rest_engraver";
+ \accepts "VoiceCombineThread";
+ }
+ \translator{
+ \HaraKiriStaffContext
+ \consists "Mark_engraver";
+ \name "VoiceCombineStaff";
+ \accepts "VoiceCombineVoice";
+ }
+
+ %
+ % The Staff combine hierarchy
+ %
+ \translator{
+ \ThreadContext
+ \name "StaffCombineThread";
+%%
+%% \remove "A2_devnull_engraver";
+%% \remove "Note_heads_engraver";
+ }
+ \translator{
+ \VoiceContext
+ \name "StaffCombineVoice";
+ \accepts "StaffCombineThread";
+
+ \remove "Rest_engraver";
+ \remove "Dot_column_engraver";
+ \remove "Stem_engraver";
+ \remove "Beam_engraver";
+ \remove "Auto_beam_engraver";
+ %\include "auto-beam-settings.ly";
+
+ \remove "Chord_tremolo_engraver";
+ \remove "Melisma_engraver";
+ \remove "Text_engraver";
+ \remove "A2_engraver";
+
+ \remove "Piano_pedal_engraver";
+ \remove "Script_engraver";
+ \remove "Script_column_engraver";
+ \remove "Rhythmic_column_engraver";
+ \remove "Slur_engraver";
+ \remove "Tie_engraver";
+
+%% \consists "A2_devnull_engraver";
+%% \consists "Note_heads_engraver";
+ }
+ \translator {
+ \HaraKiriStaffContext
+ \name "StaffCombineStaff";
+ \accepts "StaffCombineVoice";
+
+ \consists "Rest_engraver";
+ \consists "Dot_column_engraver";
+ \consists "Stem_engraver";
+ \consists "Beam_engraver";
+ \consists "Auto_beam_engraver";
+ \include "auto-beam-settings.ly";
+
+ \consists "Chord_tremolo_engraver";
+ \consists "Melisma_engraver";
+ \consists "Text_engraver";
+ \consists "A2_engraver";
+
+ soloADue = ##f
+ %soloADue = ##t
+
+ \consists "Piano_pedal_engraver";
+ \consists "Script_engraver";
+ \consists "Script_column_engraver";
+ \consists "Rhythmic_column_engraver";
+ \consists "Slur_engraver";
+ \consists "Tie_engraver";
+ }
+ \translator {
+ \StaffGroupContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
+ }
+ \translator {
+ \ScoreContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
+ }
+% linewidth = 40.\mm;
+ }
+
+ \midi{
+ \tempo 4 = 150;
+
+ \translator {
+ \ThreadContext
+ \name "VoiceCombineThread";
+ }
+ \translator {
+ \VoiceContext
+ \name "VoiceCombineVoice";
+ \accepts "VoiceCombineThread";
+ }
+ \translator {
+ \StaffContext
+ \name "VoiceCombineStaff";
+ \accepts "VoiceCombineVoice";
+ }
+
+ \translator {
+ \ThreadContext
+ \name "StaffCombineThread";
+ }
+ \translator {
+ \VoiceContext
+ \name "StaffCombineVoice";
+ \accepts "StaffCombineThread";
+ }
+ \translator {
+ \StaffContext
+ \name "StaffCombineStaff";
+ \accepts "StaffCombineVoice";
+ }
+ \translator {
+ \ScoreContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
+ }
+ }
+}
--- /dev/null
+\score{
+ \context PianoStaff <
+ \context Staff=one \skip 1*5;
+ \context Staff=two \skip 1*5;
+ \context Staff=one \partcombine Staff
+ \context Voice=one \notes\relative c''
+ {
+ c4 d e f\break
+ c d e f\break
+ c d e f
+ c4 d e f\break
+ a8 a a a b b b b
+ }
+ \context Voice=two \notes\relative c''
+ {
+ c2 e2
+ c4 d e f
+ c2 e2
+ c,4 d e f
+ a8 a a a b b b b
+ }
+ >
+ \paper{
+ %\translator { \HaraKiriStaffContext }
+ \translator {
+ \HaraKiriStaffContext
+
+ \consists "Rest_engraver";
+ \consists "Dot_column_engraver";
+ \consists "Stem_engraver";
+ \consists "Beam_engraver";
+ \consists "Auto_beam_engraver";
+ \include "auto-beam-settings.ly";
+
+ \consists "Chord_tremolo_engraver";
+ \consists "Melisma_engraver";
+ \consists "Text_engraver";
+ \consists "A2_engraver";
+
+ soloADue = ##f
+
+ \consists "Piano_pedal_engraver";
+ \consists "Script_engraver";
+ \consists "Script_column_engraver";
+ \consists "Rhythmic_column_engraver";
+ \consists "Slur_engraver";
+ \consists "Tie_engraver";
+ }
+ \translator{
+ \VoiceContext
+
+ \remove "Rest_engraver";
+ \remove "Dot_column_engraver";
+ \remove "Stem_engraver";
+ \remove "Beam_engraver";
+ \remove "Auto_beam_engraver";
+ %\include "auto-beam-settings.ly";
+
+ \remove "Chord_tremolo_engraver";
+ \remove "Melisma_engraver";
+ \remove "Text_engraver";
+ \remove "A2_engraver";
+
+ \remove "Piano_pedal_engraver";
+ \remove "Script_engraver";
+ \remove "Script_column_engraver";
+ \remove "Rhythmic_column_engraver";
+ \remove "Slur_engraver";
+ \remove "Tie_engraver";
+
+ \consists "A2_devnull_engraver";
+ \consists "Note_heads_engraver";
+ }
+ \translator{
+ \ThreadContext
+ \remove "A2_devnull_engraver";
+ \remove "Note_heads_engraver";
+ }
+ linewidth = 40.\mm;
+ }
+}
\score{
- \context Staff = one <
- \context Voice=one { \skip 1; }
- \context Voice=two { \skip 1; }
+ \context Staff = flauti <
+ \time 4/4;
\context Voice=one \partcombine Voice
\context Thread=one \notes\relative c''
b,4 d c d
r2 e4 f
c4 d e f
- c d e f
+ c4 r e f
+ c4 r e f
+ c4 r a r
+ a a r a
+ a2 \property Voice.soloADue = ##f a
}
\context Thread=two \notes\relative c''
{
- g b d f
+ g4 b d f
r2 c4 d
a c c d
a4. b8 c4 d
- c d e f
+ c r e r
+ r2 s2
+ a,4 r a r
+ a r r a
+ a2 \property Voice.soloADue = ##f a
}
>
\paper{
- linewidth = 100.\mm;
+ linewidth = 140.\mm;
+ \translator{
+ \ThreadContext
+ \consists Rest_engraver;
+ }
+ \translator{
+ \VoiceContext
+ \remove Rest_engraver;
+ }
}
}
\score{
- \context Staff = one <
- \context Voice=one { \skip 1; }
- \context Voice=two { \skip 1; }
-
+ \context Staff <
\context Voice=one \partcombine Voice
\context Thread=one \notes\relative c''
{
--- /dev/null
+\score{
+ \notes\relative c''{
+ \time 2/4;
+ e2(
+ \break
+ )e4 f,(\break
+ )f4 f(\break
+ a2\break
+ )e'2
+ }
+ \paper{
+ linewidth = 60.\mm;
+ }
+}
--- /dev/null
+\score{
+ \notes\relative c''{
+ \time 3/4;
+ \slurup
+ \stemboth a ( \stemdown a \stemboth ) a a( c )a a( e' )a, a( g' )a,
+ \stemup a( e' )a,
+ \break
+ \slurdown
+ \stemboth c ( \stemup c \stemboth ) c c ( a ) c c( d, )c' c( f, )c'
+ \stemdown c( f, )c'
+ }
+ \paper{
+ linewidth = 120.\mm;
+ }
+}
protected:
virtual void acknowledge_element (Score_element_info);
+ virtual bool do_try_music (Music *);
};
ADD_THIS_TRANSLATOR (A2_devnull_engraver);
+/*
+ Maybe this is too crude.
+ It would probably be better to have a devnull engraver in StaffContext,
+ that acknowledges stuff and suicides it.
+ */
+bool
+A2_devnull_engraver::do_try_music (Music *m)
+{
+ if (1 //daddy_trans_l_->id_str_ == "two"
+ && (to_boolean (get_property ("unison"))
+ || to_boolean (get_property ("unisilence"))))
+ {
+ /*
+ We mustn't junk Rest requests
+ */
+ if (Span_req *s = dynamic_cast <Span_req *> (m))
+ {
+ if (s->span_type_str_ == "slur"
+ || s->span_type_str_ == "beam"
+ || s->span_type_str_ == "crescendo"
+ || s->span_type_str_ == "decrescendo")
+ {
+ return true;
+ }
+ return false;
+ }
+ else if (Tie_req *t = dynamic_cast<Tie_req*> (m))
+ {
+ return true;
+ }
+ else if (Text_script_req *d = dynamic_cast <Text_script_req*> (m))
+ {
+ return true;
+ }
+ }
+ return false;
+}
void
A2_devnull_engraver::acknowledge_element (Score_element_info i)
{
if (daddy_trans_l_->id_str_ == "two"
- && to_boolean (get_property ("unison"))
+ && (to_boolean (get_property ("unison"))
+ || to_boolean (get_property ("unisilence")))
&& to_boolean (get_property ("soloADue")))
i.elem_l_->suicide ();
}
private:
Item* text_p_;
- enum State { NORMAL, SOLO, SPLIT_INTERVAL, UNISON } state_;
+ enum State { SOLO, SPLIT_INTERVAL, UNIRHYTHM, UNISILENCE, UNISON } state_;
};
ADD_THIS_TRANSLATOR (A2_engraver);
A2_engraver::A2_engraver ()
{
text_p_ = 0;
- state_ = NORMAL;
+ state_ = UNISILENCE;
}
void
if (!text_p_)
{
SCM unison = get_property ("unison");
- SCM unirhythm = get_property ("unirhythm");
SCM solo = get_property ("solo");
- SCM split_interval = get_property ("split-interval");
SCM solo_adue = get_property ("soloADue");
if (solo_adue == SCM_BOOL_T
Side_position::set_direction (text_p_, dir);
text_p_->set_elt_property ("text", text);
}
- else if (unison == SCM_BOOL_T)
- state_ = UNISON;
- else if (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T)
- state_ = SPLIT_INTERVAL;
}
}
}
}
+ SCM unisilence = get_property ("unisilence");
+ SCM unison = get_property ("unison");
+ SCM unirhythm = get_property ("unirhythm");
+ SCM solo = get_property ("solo");
+ SCM split_interval = get_property ("split-interval");
+ SCM solo_adue = get_property ("soloADue");
+
+ State previous_state = state_;
+ if (unisilence == SCM_BOOL_T)
+ /*
+ state_ = UNISILENCE;
+ */
+ ;
+ else if (solo == SCM_BOOL_T)
+ state_ = SOLO;
+ else if (unison == SCM_BOOL_T)
+ state_ = UNISON;
+ else if (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T)
+ state_ = SPLIT_INTERVAL;
+ else if (unirhythm)
+ state_ = UNIRHYTHM;
if (Stem::has_interface (i.elem_l_))
{
Item *stem_l = dynamic_cast<Item*> (i.elem_l_);
- SCM unison = get_property ("unison");
- SCM unirhythm = get_property ("unirhythm");
- SCM solo = get_property ("solo");
- SCM split_interval = get_property ("split-interval");
- SCM solo_adue = get_property ("soloADue");
-
- if ((unirhythm != SCM_BOOL_T && solo != SCM_BOOL_T)
+ /*
+ Hmm. We must set dir when solo, in order to get
+ the rests collided to the right position
+ */
+ if ((unirhythm != SCM_BOOL_T) || (solo == SCM_BOOL_T)
+ || ((unisilence == SCM_BOOL_T && previous_state != UNISON))
|| (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T
&& (unison != SCM_BOOL_T || solo_adue != SCM_BOOL_T)))
{
#include "misc.hh"
#include "bezier.hh"
-static Real F0_1 (Real x)
+
+static Real
+F0_1 (Real x)
{
- return M_PI /2 * atan(2 * x / M_PI);
+ return 2 / M_PI * atan ( M_PI * x / 2);
}
Real
Examples:
- * F(x) = pi/2 * atan (2x/pi)
+ * F(x) = 2/pi * atan (pi x/2)
* F(x) 1/alpha * x^alpha / (1 + x^alpha)
#include "moment.hh"
#include "duration.hh"
+int
+compare (Array<Duration>* left, Array<Duration>* right)
+{
+ assert (left);
+ assert (right);
+
+ if (left->size () == right->size ())
+ {
+ for (int i = 0; i < left->size (); i++)
+ {
+ int r = Duration::compare ((*left)[i], (*right)[i]);
+ if (r)
+ return r;
+ }
+ }
+ else
+ return 1;
+ return 0;
+}
+
+int
+Duration::compare (Duration const &left, Duration const &right)
+{
+ return Rational::compare (left.length_mom (), right.length_mom ());
+}
+
Duration::Duration ()
{
durlog_i_ = 0;
void set_plet (int,int );
void compress (Rational);
Rational length_mom () const ;
+ static int compare (Duration const&, Duration const&);
/// Logarithm of the base duration.
int durlog_i_;
int tuplet_type_i_;
};
+
+#include "compare.hh"
+INSTANTIATE_COMPARE(Duration, Duration::compare);
+
+int compare (Array<Duration>*, Array<Duration>*);
+
#endif // DURATION_HH
#include "item.hh"
#include "smobs.hh"
-class Voice_alist_entry;
+class Syllable_group;
/**
void record_lyric(const String &context_id, Score_element * lyric);
void record_melisma(const String &context_id);
void record_extender(const String &context_id, Score_element * extender);
- Voice_alist_entry * lookup_context_id(const String &context_id);
+ Syllable_group * lookup_context_id(const String &context_id);
public:
Lyric_phrasing_engraver ();
VIRTUAL_COPY_CONS (Translator);
private:
- /** association list of Voice_alist_entry smobs
+ /** association list of Syllable_group smobs
*/
Protected_scm voice_alist_;
Score_element * any_notehead_l_;
};
-class Voice_alist_entry
+class Syllable_group
{
bool first_in_phrase_b_;
Score_element * notehead_l_;
Link_array<Score_element> lyric_list_;
-// Link_array<Score_element> extender_list_;
Score_element * longest_lyric_l_;
Score_element * shortest_lyric_l_;
int alignment_i_;
bool melisma_b_;
+ Real group_translation_f_;
public:
static SCM make_entry();
void set_first_in_phrase(bool f);
void set_notehead(Score_element * notehead);
void add_lyric(Score_element * lyric);
void add_extender(Score_element * extender);
-// void terminate_extenders();
-// void clear_extenders();
- void set_melisma();
+ void set_melisma() { melisma_b_ = true; }
bool get_melisma() { return melisma_b_; }
int lyric_count() { return lyric_list_.size(); }
void clear();
int appropriate_alignment(const char *punc);
Real amount_to_translate();
void next_lyric();
- void copy(Voice_alist_entry *);
+ void copy(Syllable_group *);
private:
- Voice_alist_entry();
- DECLARE_SIMPLE_SMOBS(Voice_alist_entry,);
+ Syllable_group();
+ DECLARE_SIMPLE_SMOBS(Syllable_group,);
} ;
-Voice_alist_entry * unsmob_voice_entry (SCM);
+Syllable_group * unsmob_voice_entry (SCM);
#endif // LYRIC_PHRASING_ENGRAVER_HH
VIRTUAL_COPY_CONS (Music);
};
+/**
+ What rhythms have ben acked ?
+ */
+class Rhythm_interrogate_req : public Request
+{
+public:
+ Array<Duration> duration_arr_;
+ VIRTUAL_COPY_CONS (Music);
+};
/**
Music_iterator * first_iter_p_;
Music_iterator * second_iter_p_;
+ Moment now_;
+ Moment first_until_;
+ Moment second_until_;
bool combined_b_;
};
*/
}
-Voice_alist_entry *
+Syllable_group *
Lyric_phrasing_engraver::lookup_context_id(const String &context_id)
{
SCM key = ly_str02scm(context_id.ch_C());
}
}
// ( ( alist_entry . old_entry ) . previous_entry )
- SCM val = gh_cons(gh_cons(Voice_alist_entry::make_entry (), SCM_BOOL_F),
- Voice_alist_entry::make_entry ());
+ SCM val = gh_cons(gh_cons(Syllable_group::make_entry (), SCM_BOOL_F),
+ Syllable_group::make_entry ());
voice_alist_ = scm_acons(key, val, voice_alist_);
return unsmob_voice_entry (gh_caar(val));
Lyric_phrasing_engraver::record_notehead(const String &context_id,
Score_element * notehead)
{
- Voice_alist_entry * v = lookup_context_id(context_id);
+ Syllable_group * v = lookup_context_id(context_id);
v->set_notehead(notehead);
if(!any_notehead_l_)
any_notehead_l_ = notehead;
void
Lyric_phrasing_engraver::record_lyric(const String &context_id, Score_element * lyric)
{
- Voice_alist_entry * v = lookup_context_id(context_id);
+ Syllable_group * v = lookup_context_id(context_id);
v->add_lyric(lyric);
}
// ( key . ( (alist_entry . old_entry) . previous_entry) )
SCM previous_scm = gh_cddr(s);
if(previous_scm != SCM_EOL) {
- Voice_alist_entry * v = unsmob_voice_entry(previous_scm);
+ Syllable_group * v = unsmob_voice_entry(previous_scm);
v->add_extender(extender);
}
}
void
Lyric_phrasing_engraver::record_melisma(const String &context_id)
{
- Voice_alist_entry * v = lookup_context_id(context_id);
+ Syllable_group * v = lookup_context_id(context_id);
v->set_melisma();
}
/* what's its Voice context name? */
String voice_context_id = get_context_id(i.origin_trans_l_->daddy_trans_l_, "Voice");
record_notehead(voice_context_id, h);
+
+ /* is it in a melisma ? */
+ if(to_boolean(i.origin_trans_l_->get_property("melismaEngraverBusy"))) {
+ record_melisma(voice_context_id);
+ }
return;
}
+
/* now try for a lyric */
if (h->has_interface (ly_symbol2scm ("lyric-syllable-interface"))) {
record_lyric(trim_suffix(lyric_voice_context_id), h);
return;
}
- /* finally for a melisma */
- if(h->has_interface (ly_symbol2scm ("melisma-interface"))) {
- String voice_context_id = get_context_id(i.origin_trans_l_->daddy_trans_l_, "Voice");
- record_melisma(voice_context_id);
- return;
- }
- /* How about catching any extender items and then if we have a melisma,
- set the RIGHT item of the extender spanner to the melismatic note in
- the corresponding context (if any).
- This has the effect of finishing the extender under the last note
- of the melisma, instead of extending it to the next lyric.
-
- Problem: the extender request is thrown at the same moment as the next lyric,
- by which time we have already passed the last note of the melisma.
- However, the Lyric_phrasing_engraver remembers the last note, so just
- attach it to that, provided it was melismatic. If it was not melismatic,
- then ignore it and let the Extender_engraver take care of it (i.e. finish at next
- lyric).
- */
+
+ /* Catch any extender items and then if we have a melisma,
+ set the RIGHT item of the extender spanner to the melismatic note in
+ the corresponding context (if any).
+ This has the effect of finishing the extender under the last note
+ of the melisma, instead of extending it to the next lyric.
+
+ Problem: the extender request is thrown at the same moment as the next lyric,
+ by which time we have already passed the last note of the melisma.
+ However, the Lyric_phrasing_engraver remembers the last note, so just
+ attach it to that, provided it was melismatic. If it was not melismatic,
+ then ignore it and let the Extender_engraver take care of it (i.e. finish at next
+ lyric).
+ */
if(h->has_interface (ly_symbol2scm ("lyric-extender-interface"))) {
String voice_context_id = get_context_id(i.origin_trans_l_->daddy_trans_l_, "LyricVoice");
record_extender(trim_suffix(voice_context_id), h);
SCM v_entry = gh_cdar(v);
// ((current . oldflag) . previous)
if(!to_boolean(gh_cdar(v_entry))) { // not an old entry left over from a prior note ...
- Voice_alist_entry *entry = unsmob_voice_entry(gh_caar(v_entry));
+ Syllable_group *entry = unsmob_voice_entry(gh_caar(v_entry));
if(! entry->set_lyric_align(punc.ch_C(), any_notehead_l_))
warning (_ ("lyrics found without any matching notehead"));
warning (_ ("Huh? Melismatic note found to have associated lyrics."));
SCM previous_scm = gh_cdr(v_entry);
if(previous_scm != SCM_EOL) {
- Voice_alist_entry *previous = unsmob_voice_entry(previous_scm);
+ Syllable_group *previous = unsmob_voice_entry(previous_scm);
if (previous->lyric_count())
previous->adjust_melisma_align();
}
for(SCM v=voice_alist_; gh_pair_p(v); v = gh_cdr(v)) {
SCM entry_scm = gh_cdar(v);
// ((alist_entry . entry_is_old) . previous_entry)
- Voice_alist_entry * entry = unsmob_voice_entry(gh_caar(entry_scm));
+ Syllable_group * entry = unsmob_voice_entry(gh_caar(entry_scm));
// set previous_entry, set entry_is_old, and resave it to alist_
// but only change if this current was not old.
if(! to_boolean(gh_cdar(entry_scm))) {
- Voice_alist_entry * previous_entry = unsmob_voice_entry(gh_cdr(entry_scm));
+ Syllable_group * previous_entry = unsmob_voice_entry(gh_cdr(entry_scm));
previous_entry->copy(entry);
entry_scm = gh_cons(gh_cons(gh_caar(entry_scm), SCM_BOOL_T), gh_cdr(entry_scm));
voice_alist_ = scm_assoc_set_x(voice_alist_, gh_caar(v), entry_scm);
/*=========================================================================================*/
-/** Voice_alist_entry is a class to be smobbed and entered as data in the association list
+/** Syllable_group is a class to be smobbed and entered as data in the association list
member of the Lyric_phrasing_engraver class.
*/
-Voice_alist_entry::Voice_alist_entry()
+Syllable_group::Syllable_group()
{
first_in_phrase_b_=true;
melisma_b_ = false;
}
void
-Voice_alist_entry::clear()
+Syllable_group::clear()
{
notehead_l_=0;
lyric_list_.clear();
longest_lyric_l_=0;
shortest_lyric_l_=0;
melisma_b_ = false;
+ group_translation_f_ = 0.0;
}
void
-Voice_alist_entry::copy( Voice_alist_entry *from)
+Syllable_group::copy( Syllable_group *from)
{
notehead_l_ = from->notehead_l_;
lyric_list_ = from->lyric_list_;
melisma_b_ = from->melisma_b_;
alignment_i_ = from->alignment_i_;
first_in_phrase_b_ = from->first_in_phrase_b_;
+ group_translation_f_ = from->group_translation_f_;
}
void
-Voice_alist_entry::set_first_in_phrase(bool f)
+Syllable_group::set_first_in_phrase(bool f)
{
first_in_phrase_b_ = f;
}
void
-Voice_alist_entry::set_notehead(Score_element * notehead)
+Syllable_group::set_notehead(Score_element * notehead)
{
if(!notehead_l_) {
/* there should only be a single notehead, so silently ignore any extras */
}
void
-Voice_alist_entry::add_lyric(Score_element * lyric)
+Syllable_group::add_lyric(Score_element * lyric)
{
lyric_list_.push(lyric);
/* record longest and shortest lyrics */
}
void
-Voice_alist_entry::add_extender(Score_element * extender)
+Syllable_group::add_extender(Score_element * extender)
{
if(notehead_l_ && melisma_b_) {
dynamic_cast<Spanner*>(extender)->set_bound (RIGHT, notehead_l_);
}
}
-void
-Voice_alist_entry::set_melisma()
-{
- melisma_b_ = true;
-}
-
bool
-Voice_alist_entry::set_lyric_align(const char *punc, Score_element *default_notehead_l)
+Syllable_group::set_lyric_align(const char *punc, Score_element *default_notehead_l)
{
if(lyric_list_.size()==0) {
// No lyrics: nothing to do.
if(!notehead_l_) {
notehead_l_ = default_notehead_l;
}
- Real translation = amount_to_translate();
+
+ group_translation_f_ = amount_to_translate();
+
+ // set the x alignment of each lyric
for(int l = 0; l < lyric_list_.size(); l++) {
- /** set the x alignment of each lyric
- */
lyric = lyric_list_[l];
lyric->set_elt_property("self-alignment-X", gh_int2scm(alignment_i_));
-
// centre on notehead ... if we have one.
if(notehead_l_) {
- /* set the parent of each lyric to the notehead,
- set the offset callback of each lyric to centered_on_parent,
- */
lyric->set_parent(notehead_l_, X_AXIS);
lyric->add_offset_callback (Side_position::centered_on_parent, X_AXIS);
- /* reference is on the right of the notehead; move it left half way, then centralise */
- lyric->translate_axis (translation-(notehead_l_->extent(X_AXIS)).center(), X_AXIS);
+ // reference is on the right of the notehead; move it left half way, and add translation
+ lyric->translate_axis (group_translation_f_-(notehead_l_->extent(X_AXIS)).center(), X_AXIS);
}
}
return (notehead_l_);
}
+/** determine the distance to translate lyrics to get correct alignment
+ Rules: If alignment is centre, translate = 0
+ Otherwise,
+ If (length of longest lyric) < 2 * (length of shortest lyric),
+ - centre longest lyric on notehead
+ Otherwise
+ - move so shortest lyric just reaches notehead centre
+*/
Real
-Voice_alist_entry::amount_to_translate()
+Syllable_group::amount_to_translate()
{
Real translate = 0.0;
if(alignment_i_ != CENTER) {
- // right or left align ...
- /* If length of longest lyric < 2 * length of shortest lyric,
- - centre longest lyric on notehead
- Otherwise
- - move so shortest lyric just reaches notehead centre
- */
// FIXME: do we really know the lyric extent here? Some font sizing comes later?
if((longest_lyric_l_->extent(X_AXIS)).length() <
(shortest_lyric_l_->extent(X_AXIS)).length() * 2 )
otherwise alignment is centre.
*/
int
-Voice_alist_entry::appropriate_alignment(const char *punc)
+Syllable_group::appropriate_alignment(const char *punc)
{
if(first_in_phrase_b_)
return LEFT;
Score_element * lyric;
bool end_phrase = true;
- /* use a property to determine what constitutes punctuation */
for(int l = 0; l < lyric_list_.size() && end_phrase; l++) {
lyric = lyric_list_[l];
back and fix the alignment when we DO know.
*/
void
-Voice_alist_entry::adjust_melisma_align()
+Syllable_group::adjust_melisma_align()
{
- if(notehead_l_) {
- // undo what we did before ...
- Real translation = -amount_to_translate();
+ if(notehead_l_ && lyric_list_.size()) {
+ // override any previous offset adjustments
+ Real translation = -group_translation_f_;
// melisma aligning:
switch (alignment_i_) {
// case LEFT: // that's all
translation += (shortest_lyric_l_->extent(X_AXIS)).length();
break;
}
+ group_translation_f_ += translation;
+ printf(" now %f.\n",float(group_translation_f_));
for(int l = 0; l < lyric_list_.size(); l++) {
lyric_list_[l]->translate_axis (translation, X_AXIS);
}
bool
-Voice_alist_entry::is_empty()
+Syllable_group::is_empty()
{
return lyric_list_.size()==0;
}
void
-Voice_alist_entry::next_lyric()
+Syllable_group::next_lyric()
{
first_in_phrase_b_ = (alignment_i_ == RIGHT);
clear();
SCM
-Voice_alist_entry::mark_smob (SCM)
+Syllable_group::mark_smob (SCM)
{
return SCM_EOL;
}
int
-Voice_alist_entry::print_smob (SCM, SCM port, scm_print_state * )
+Syllable_group::print_smob (SCM, SCM port, scm_print_state * )
{
- scm_puts ("#<Voice_alist_entry>", port);
+ scm_puts ("#<Syllable_group>", port);
return 1;
}
-IMPLEMENT_UNSMOB(Voice_alist_entry, voice_entry);
-IMPLEMENT_SIMPLE_SMOBS(Voice_alist_entry);
-IMPLEMENT_DEFAULT_EQUAL_P(Voice_alist_entry);
+IMPLEMENT_UNSMOB(Syllable_group, voice_entry);
+IMPLEMENT_SIMPLE_SMOBS(Syllable_group);
+IMPLEMENT_DEFAULT_EQUAL_P(Syllable_group);
SCM
-Voice_alist_entry::make_entry ()
+Syllable_group::make_entry ()
{
- Voice_alist_entry *vi = new Voice_alist_entry;
+ Syllable_group *vi = new Syllable_group;
return vi->smobbed_self ();
}
#include "engraver.hh"
#include "musical-request.hh"
#include "score-element.hh"
+#include "translator-group.hh"
/**
Signal existence of melismas.
|| (to_boolean (tie))
|| (to_boolean (beam))) {
- Score_element * melisma_p = new Score_element (get_property ("basicMelismaProperties"));
- announce_element (melisma_p, m);
-
+ daddy_trans_l_->set_property("melismaEngraverBusy",SCM_BOOL_T);
return true;
}
}
+ daddy_trans_l_->set_property("melismaEngraverBusy",SCM_BOOL_F);
return false;
}
if (left->size () == right->size ())
{
for (int i = 0; i < left->size (); i++)
- if ((*left)[i] != (*right)[i])
- return 1;
+ {
+ int r = Musical_pitch::compare ((*left)[i], (*right)[i]);
+ if (r)
+ return r;
+ }
}
+ else
+ return 1;
+
return 0;
}
{"consists", CONSISTS},
{"consistsend", CONSISTSEND},
{"context", CONTEXT},
+ {"denies", DENIES},
{"duration", DURATION},
{"font", FONT},
{"grace", GRACE},
p->pitch_arr_.push (note_req_l_arr_[i]->pitch_); // GUH UGH UGHUGH.
return true;
}
+ else if (Rhythm_interrogate_req *r = dynamic_cast<Rhythm_interrogate_req*> (m))
+ {
+ for (int i= note_req_l_arr_.size (); i--;)
+ r->duration_arr_.push (note_req_l_arr_[i]->duration_); // GUH UGH UGHUGH.
+ return true;
+ }
return false;
}
%token SEQUENTIAL
%token SIMULTANEOUS
%token CONSISTSEND
+%token DENIES
%token DURATION
%token EXTENDER
%token FONT
| translator_spec_body ACCEPTS STRING semicolon {
dynamic_cast<Translator_group*> ($$)-> set_acceptor (ly_scm2string ($3), true);
}
+ | translator_spec_body DENIES STRING semicolon {
+ dynamic_cast<Translator_group*> ($$)-> set_acceptor (ly_scm2string ($3), false);
+ }
| translator_spec_body REMOVE STRING semicolon {
dynamic_cast<Translator_group*> ($$)-> set_element (ly_scm2string ($3), false);
}
{
combined_b_ = true;
+ now_ = 0;
first_iter_p_ = 0;
second_iter_p_ = 0;
+ first_until_ = 0;
+ second_until_ = 0;
}
Part_combine_music_iterator::~Part_combine_music_iterator ()
Moment
Part_combine_music_iterator::next_moment () const
{
- Moment first_next = first_iter_p_->next_moment ();
- Moment second_next = second_iter_p_->next_moment ();
+ Moment first_next = infinity_mom;
+ if (first_iter_p_->ok ())
+ first_next = first_iter_p_->next_moment ();
+ Moment second_next = infinity_mom;
+ if (second_iter_p_->ok ())
+ second_next = second_iter_p_->next_moment ();
+ if (first_next == infinity_mom && second_next == infinity_mom)
+ return 0;
return first_next <? second_next;
}
Part_combine_music_iterator::ok () const
{
//hmm
- return first_iter_p_->ok ();
+ return first_iter_p_->ok () || second_iter_p_->ok ();
}
void
Pitch_interrogate_req* first_spanish_inquisition; // nobody expects it
Pitch_interrogate_req* second_spanish_inquisition; // won't strike twice
+Rhythm_interrogate_req* first_rhythmic_inquisition;
+Rhythm_interrogate_req* second_rhythmic_inquisition;
+
void
Part_combine_music_iterator::do_process_and_next (Moment m)
{
- Moment first_next = first_iter_p_->next_moment ();
- Moment second_next = second_iter_p_->next_moment ();
-
Part_combine_music const * p = dynamic_cast<Part_combine_music const* > (music_l_);
- if (first_next <= m)
- first_iter_p_->process_and_next (m);
+ now_ = next_moment ();
- if (second_next <= m)
+ /*
+ Hmm, shouldn't we check per iterator if next_moment < m?
+ */
+ if (first_iter_p_->ok ())
+ first_iter_p_->process_and_next (m);
+
+ if (second_iter_p_->ok ())
second_iter_p_->process_and_next (m);
Music_iterator::do_process_and_next (m);
/*
TODO:
+ * Maybe we need a Skip_engraver?
+
(check): can this all be handled now?
Maybe different modes exist?
if (!first_spanish_inquisition)
first_spanish_inquisition = new Pitch_interrogate_req;
- Music_iterator* fit = first_iter_p_->try_music (first_spanish_inquisition);
-
+ first_iter_p_->try_music (first_spanish_inquisition);
+
if (!second_spanish_inquisition)
second_spanish_inquisition = new Pitch_interrogate_req;
- Music_iterator* sit = second_iter_p_->try_music (second_spanish_inquisition);
+ second_iter_p_->try_music (second_spanish_inquisition);
- Array<Musical_pitch>* first_arr_l = &first_spanish_inquisition->pitch_arr_;
- Array<Musical_pitch>* second_arr_l = &second_spanish_inquisition->pitch_arr_;
+ Array<Musical_pitch>* first_pitches = &first_spanish_inquisition->pitch_arr_;
+ Array<Musical_pitch>* second_pitches = &second_spanish_inquisition->pitch_arr_;
+
+ if (!first_rhythmic_inquisition)
+ first_rhythmic_inquisition = new Rhythm_interrogate_req;
+ first_iter_p_->try_music (first_rhythmic_inquisition);
+
+ if (!second_rhythmic_inquisition)
+ second_rhythmic_inquisition = new Rhythm_interrogate_req;
+ second_iter_p_->try_music (second_rhythmic_inquisition);
+
+ Array<Duration>* first_durations = &first_rhythmic_inquisition->duration_arr_;
+ Array<Duration>* second_durations = &second_rhythmic_inquisition->duration_arr_;
SCM interval = SCM_BOOL_F;
- if (first_arr_l->size () && second_arr_l->size ())
+ 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;
+ }
+
+ if (second_durations->size ())
{
- first_arr_l->sort (Musical_pitch::compare);
- second_arr_l->sort (Musical_pitch::compare);
- interval = gh_int2scm (first_arr_l->top ().steps ()
- - (*second_arr_l)[0].steps ());
+ second_durations->sort (Duration::compare);
+ Moment new_until = now_ + second_durations->top ().length_mom ();
+ if (new_until > second_until_)
+ second_until_ = new_until;
}
Translator_group * fir = first_iter_p_->report_to_l ();
Translator_group * sir = second_iter_p_->report_to_l ();
- bool solo_b = (first_arr_l->empty () != second_arr_l->empty ());
+ bool solo_b = (first_pitches->empty () != second_pitches->empty ())
+ && !(first_until_ > now_ && second_until_ > now_);
- /*
- Urg, this won't work at end of music. Should interrogate rhythm.
- */
- if (first_iter_p_->ok ())
- first_next = first_iter_p_->next_moment ();
- if (second_iter_p_->ok ())
- second_next = second_iter_p_->next_moment ();
- bool unirhythm_b = (first_next == second_next) && !solo_b;
+ 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 ();
Translator_group * fd = fir->find_create_translator_l (p->what_str_, "one");
Translator_group * sd = sir->find_create_translator_l (p->what_str_, "two");
if ((!unirhythm_b && combined_b_)
|| (split_interval_b && combined_b_)
|| (solo_b && combined_b_)
- || (unirhythm_b && !combined_b_ && !split_interval_b && !solo_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";
fd->set_property ("split-interval", b);
sd->set_property ("split-interval", b);
- b = gh_bool2scm (unirhythm_b && !compare (first_arr_l, second_arr_l));
+ b = unisilence_b ? SCM_BOOL_T : SCM_BOOL_F;
+ fd->set_property ("unisilence", b);
+ sd->set_property ("unisilence", b);
+
+ 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_arr_l->size ())
+ if (first_pitches->size ())
{
fd->set_property ("solo", b);
sd->set_property ("solo", SCM_BOOL_F);
}
- if (second_arr_l->size ())
+ if (second_pitches->size ())
{
fd->set_property ("solo", SCM_BOOL_F);
sd->set_property ("solo", b);
}
- first_arr_l->clear ();
- second_arr_l->clear ();
+ first_pitches->clear ();
+ second_pitches->clear ();
+ first_durations->clear ();
+ second_durations->clear ();
}
Music_iterator*
}
bool
-Rest_engraver::do_try_music (Music *req)
+Rest_engraver::do_try_music (Music *m)
{
- if (Rest_req *r = dynamic_cast <Rest_req *> (req))
+ if (Rest_req *r = dynamic_cast <Rest_req *> (m))
{
rest_req_l_ = r;
return true;
}
+ else if (Rhythm_interrogate_req *r = dynamic_cast<Rhythm_interrogate_req*> (m))
+ {
+ if (rest_req_l_)
+ r->duration_arr_.push (rest_req_l_->duration_); // GUH UGH UGHUGH.
+ return true;
+ }
return false;
}
&& !stem_l->extent (Y_AXIS).empty_b ())
{
o[Y_AXIS] = stem_l->relative_coordinate (common[Y_AXIS], Y_AXIS); // iuhg
+ o[Y_AXIS] += stem_l->extent (Y_AXIS)[dir];
}
else
{
o[Y_AXIS] = col->relative_coordinate (common[Y_AXIS], Y_AXIS); // ugh
+ o[Y_AXIS] += col->extent (Y_AXIS)[dir];
}
/*
return o;
}
-MAKE_SCHEME_CALLBACK(Slur,after_line_breaking);
-
+MAKE_SCHEME_CALLBACK (Slur, after_line_breaking);
SCM
Slur::after_line_breaking (SCM smob)
{
Score_element *me = unsmob_element (smob);
+ if (!scm_ilength (me->get_elt_property ("note-columns")))
+ {
+ me->suicide ();
+ return SCM_UNSPECIFIED;
+ }
set_extremities (me);
set_control_points (me);
return SCM_UNSPECIFIED;
Real ss = Staff_symbol_referencer::staff_space ((Score_element*)me);
Real hs = ss / 2.0;
Offset o;
-
-
+
+ Score_element *stem = 0;
if (Note_column::has_interface (sp->get_bound (dir)))
{
Score_element * n =sp->get_bound (dir);
- if (Score_element*st = Note_column::stem_l (n))
+ if (Score_element *stem = Note_column::stem_l (n))
{
if (str == "head")
{
- o = Offset (0, Stem::chord_start_f (st ));
+ o = Offset (0, Stem::head_positions (stem)
+ [Directional_element_interface (me).get ()] * hs);
/*
Default position is centered in X, on outer side of head Y
*/
}
else if (str == "alongside-stem")
{
- o = Offset (0, Stem::chord_start_f (st ));
+ o = Offset (0, Stem::chord_start_f (stem));
/*
Default position is on stem X, on outer side of head Y
*/
o += Offset (n->extent (X_AXIS).length ()
- * (1 + Stem::get_direction (st )),
+ * (1 + Stem::get_direction (stem)),
0.5 * ss * Directional_element_interface (me).get ());
}
else if (str == "stem")
{
- o = Offset (0, Stem::stem_end_position (st ) * hs);
+ o = Offset (0, Stem::stem_end_position (stem) * hs);
/*
Default position is on stem X, at stem end Y
*/
o += Offset (0.5 *
(n->extent (X_AXIS).length ()
- - st->extent (X_AXIS).length ())
- * (1 + Stem::get_direction (st )),
+ - stem->extent (X_AXIS).length ())
+ * (1 + Stem::get_direction (stem)),
0);
}
- else if (str == "loose-end")
- {
- SCM other_a = dir == LEFT ? gh_cdr (s) : gh_car (s);
- if (ly_symbol2string (other_a) != "loose-end")
- {
- o = Offset (0, get_attachment (me, -dir, common)[Y_AXIS]);
- }
- }
-
-
- SCM l = scm_assoc
- (scm_listify (a,
- gh_int2scm (Stem::get_direction (st ) * dir),
- gh_int2scm (Directional_element_interface (me).get () * dir),
- SCM_UNDEFINED),
- scm_eval (ly_symbol2scm ("slur-extremity-offset-alist")));
-
- if (l != SCM_BOOL_F)
- {
- o += ly_scm2offset (gh_cdr (l)) * ss * dir;
- }
}
}
-
+ else if (str == "loose-end")
+ {
+ SCM other_a = dir == LEFT ? gh_cdr (s) : gh_car (s);
+ if (ly_symbol2string (other_a) != "loose-end")
+ {
+ o = Offset (0, get_attachment (me, -dir, common)[Y_AXIS]);
+ }
+ }
+
+ SCM l = scm_assoc
+ (scm_listify (a,
+ gh_int2scm (stem ? Stem::get_direction (stem) : 1 * dir),
+ gh_int2scm (Directional_element_interface (me).get () * dir),
+ SCM_UNDEFINED),
+ scm_eval (ly_symbol2scm ("slur-extremity-offset-alist")));
+
+ if (l != SCM_BOOL_F)
+ {
+ o += ly_scm2offset (gh_cdr (l)) * ss * dir;
+ }
/*
What if get_bound () is not a note-column?
o[Y_AXIS] += sp->get_bound (dir)->relative_coordinate (common[Y_AXIS], Y_AXIS)
- me->relative_coordinate (common[Y_AXIS], Y_AXIS);
}
+
return o;
}
Array<Offset>
Slur::get_encompass_offset_arr (Score_element*me)
{
- Spanner*sp = dynamic_cast<Spanner*>(me);
+ Spanner*sp = dynamic_cast<Spanner*>(me);
SCM eltlist = me->get_elt_property ("note-columns");
Score_element *common[] = {me->common_refpoint (eltlist,X_AXIS),
me->common_refpoint (eltlist,Y_AXIS)};
/*
Ugh should have dash-length + dash-period
*/
-MAKE_SCHEME_CALLBACK(Slur,brew_molecule);
+MAKE_SCHEME_CALLBACK (Slur, brew_molecule);
SCM
Slur::brew_molecule (SCM smob)
{
Score_element * me = unsmob_element (smob);
+ if (!scm_ilength (me->get_elt_property ("note-columns")))
+ {
+ me->suicide ();
+ return SCM_EOL;
+ }
+
Real thick = me->paper_l ()->get_var ("stafflinethickness") *
gh_scm2double (me->get_elt_property ("thickness"));
Bezier one = get_curve (me);
SCM controls = SCM_EOL;
for (int i= 4; i--;)
- controls = gh_cons ( ly_offset2scm (b.control_[i]), controls);
+ {
+ controls = gh_cons ( ly_offset2scm (b.control_[i]), controls);
+ /*
+ BRRR WHURG.
+ All these null control-points, where do they all come from?
+ */
+ if (i && b.control_[i][X_AXIS] == 0)
+ me->suicide ();
+ }
me->set_elt_property ("control-points", controls);
}
-
Bezier
Slur::get_curve (Score_element*me)
{
if (!gh_pair_p (me->get_elt_property ("control-points")))
set_control_points (me);
-
-
+
for (SCM s= me->get_elt_property ("control-points"); s != SCM_EOL; s = gh_cdr (s))
{
b.control_[i] = ly_scm2offset (gh_car (s));
i++;
}
-
+
Array<Offset> enc (get_encompass_offset_arr (me));
Direction dir = Directional_element_interface (me).get ();
Real x1 = enc[0][X_AXIS];
Real x2 = enc.top ()[X_AXIS];
-
+
Real off = 0.0;
for (int i=1; i < enc.size ()-1; i++)
{
span_p->set_bound(LEFT,bounds[LEFT]);
span_p->set_bound(RIGHT,bounds[RIGHT]);
-
+#if 0
assert (bounds[LEFT]->line_l () ==
bounds[RIGHT]->line_l ());
bounds[LEFT]->line_l ()->typeset_element (span_p);
broken_into_l_arr_.push (span_p);
+#else
+
+ if (bounds[LEFT]->line_l () != bounds[RIGHT]->line_l ())
+ {
+ programming_error ("bounds[LEFT]->line_l () != bounds[RIGHT]->line_l ()");
+#if 0
+ /*
+ lily crashes upon displaying this ...
+
+ */
+
+ gh_display (ly_str02scm ("\nspanner:mutable_property_alist_\n"));
+ gh_display (mutable_property_alist_);
+ gh_display (ly_str02scm ("\nspanner:immutable_property_alist_\n"));
+ gh_display (immutable_property_alist_);
+ gh_newline ();
+#endif
+ span_p->suicide ();
+ }
+ else
+ {
+ bounds[LEFT]->line_l ()->typeset_element (span_p);
+ broken_into_l_arr_.push (span_p);
+ }
+#endif
+
}
}
broken_into_l_arr_.sort (Spanner::compare);
--- /dev/null
+/*
+ thread-devnull-engraver.cc -- implement Thread_devnull_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+#include "musical-request.hh"
+#include "translator-group.hh"
+
+class Thread_devnull_engraver : public Engraver
+{
+public:
+ VIRTUAL_COPY_CONS (Translator);
+
+protected:
+ virtual void acknowledge_element (Score_element_info);
+};
+
+ADD_THIS_TRANSLATOR (Thread_devnull_engraver);
+
+void
+Thread_devnull_engraver::acknowledge_element (Score_element_info i)
+{
+ if (daddy_trans_l_->id_str_ == "two"
+ && (to_boolean (get_property ("unison"))
+ || to_boolean (get_property ("unisilence")))
+ && to_boolean (get_property ("soloADue")))
+ i.elem_l_->suicide ();
+}
--- /dev/null
+/*
+ voice-devnull-engraver.cc -- implement Voice_devnull_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+#include "musical-request.hh"
+#include "translator-group.hh"
+
+class Voice_devnull_engraver : public Engraver
+{
+public:
+ VIRTUAL_COPY_CONS (Translator);
+
+protected:
+ virtual void acknowledge_element (Score_element_info);
+};
+
+ADD_THIS_TRANSLATOR (Voice_devnull_engraver);
+
+void
+Voice_devnull_engraver::acknowledge_element (Score_element_info i)
+{
+ if (daddy_trans_l_->id_str_ == "two"
+ && (to_boolean (get_property ("unison"))
+ || to_boolean (get_property ("unisilence"))))
+ {
+ static char const *junk[] = {
+ // "beam-interface",
+ "slur-interface",
+ "tie-interface",
+ "text-item-interface",
+ "text-script-interface",
+ "dynamic-interface",
+ "crescendo-interface",
+ 0
+ };
+ for (char const **p = junk; *p; *p++)
+ {
+ if (i.elem_l_->has_interface (ly_symbol2scm (*p)))
+ {
+ i.elem_l_->suicide ();
+ return;
+ }
+ }
+ }
+}
textScriptPadding = #3.0
\consists "Text_engraver";
\consists "A2_engraver";
-
+ \consists "Voice_devnull_engraver";
startSustain = #"Ped."
stopSustain = #"*"
ThreadContext = \translator{
\type Engraver_group_engraver;
- \consists "A2_devnull_engraver";
+ %%\consists "A2_devnull_engraver";
+ \consists "Thread_devnull_engraver";
\consists "Note_heads_engraver";
\consists "Output_property_engraver";
Generic_property_list = #generic-thread-properties
(interfaces . (mark-interface))
(visibility-lambda . ,end-of-line-invisible)
)
- basicMelismaProperties = #`(
- (interfaces . (melisma-interface))
- )
basicMultiMeasureRestProperties = #`(
(spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
(molecule-callback . ,Multi_measure_rest::brew_molecule)
)
basicTextProperties = #`( )
basicRestProperties = #`(
- (interfaces . (rest-interface rhythmic-head-interface))
+ (interfaces . (rest-interface rhythmic-head-interface))
+ (after-line-breaking-callback . ,Rest::after_line_breaking)
(molecule-callback . ,Rest::brew_molecule)
(minimum-beam-collision-distance . 1.5)
)
};
\translator { \VoiceContext }
-GraceContext = \translator {
+ThreadContext = \translator {
\type "Performer_group_performer";
\name Thread;
\consists "Note_performer";
\consists "Tie_performer";
};
-\translator { \GraceContext }
+\translator { \ThreadContext }
\translator {
\type "Grace_performer_group";
\include "violoncello.ly"
\include "contrabasso.ly"
-$bassi = \context GrandStaff = bassi_group <
- \$violoncello_staff
- \$contrabasso_staff
->
-
+bassiGroup = \context PianoStaff = bassi_group <
+ \context StaffCombineStaff=one {
+ \clef "bass";
+ \skip 1*314;
+ \bar "|.";
+ }
+ \context StaffCombineStaff=two {
+ \clef "bass";
+ \skip 1*314;
+ \bar "|.";
+ }
-$bassi = \context GrandStaff = bassi_group <
- \$violoncello_staff
- \$contrabasso_staff
+ \context StaffCombineStaff=one \partcombine StaffCombineStaff
+ \context StaffCombineThread=one \violoncello
+ \context StaffCombineThread=two \contrabasso
>
\score{
- \$bassi
- \include "coriolan-part-paper.ly"
+ \bassiGroup
+ \include "coriolan-part-combine-paper.ly"
\include "coriolan-midi.ly"
}
\include "global.ly"
\include "clarinetti.ly"
\score{
- \$clarinetti_staff
- \include "coriolan-part-paper.ly"
+ \clarinettiStaff
+ \include "coriolan-part-combine-paper.ly"
\include "coriolan-midi.ly"
}
\include "clarinetto-1.ly"
\include "clarinetto-2.ly"
-$clarinetti_staff = \context Staff = clarinetti <
+clarinettiStaff = \context Staff = clarinetti <
\property Staff.midiInstrument = #"clarinet"
\property Staff.instrument = #"2 Clarinetti\n(B\\textflat)"
\property Staff.instr = #"Cl.\n(B\\textflat)"
% urg: can't; only My_midi_lexer:<non-static> () parses pitch?
%\property Staff.transposing = "bes"
\property Staff.transposing = #-2
- %\notes \context Voice=clarinetti <
- \notes \context Staff=clarinetti <
- \time 4/4;
- \key f \major;
- \skip 1*341; \bar "|.";
- \context VoiceOne=clarinettoi
- \$clarinetto1
- \context VoiceTwo=clarinettoii
- \$clarinetto2
- >
+ \time 4/4;
+ \notes \key f \major;
+ \skip 1*341; \bar "|.";
+ \context Voice=one \partcombine Voice
+ \context Thread=one \clarinettoI
+ \context Thread=two \clarinettoII
>
\version "1.3.59";
-clarinetto1 = \notes \relative c {
+clarinettoI = \notes \relative c {
R1 *2 |
d''4-.\ff r r2 |
R1 *3 |
f4-. r r2 |
e4-. r r2 |
R1 *4 |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
bes2\p\< ( a |
)gis2. \!a4-.\f |
R1*13 |
c2. c4\sf|
c4 r r2|
R1*5|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
a'2.\p\< ( bes4|
a g e)c|
c'2.( d4|
d~|
d~|
d|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
bes2.\<( c4|
bes a fis)d|
\!d'2\ff f|
)e2. f4\sf(|
)e4 r r2|
R1*9|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
fis2.\p\<(g4|
fis e cis)a|
\!a2\ff c|
r2 r4 d(|
)cis r r2|
r r4 r8 cis|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d4\< r r2|
r r4 r8 d|
e4 r r r8 e|
d4 r8 g f4 r8 c|
bes4 r r2|
R1*11|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
f'2.\p\<(g4|
f e cis)a|
a1|
c\f~|
c\p|
d\f~|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d\p\<~|
d~|
d~|
R1|
d4-. d-. r2|
d4-. d-. r2|
- \property VoiceOne.decrescendoText = "dim."
- \property VoiceOne.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
d4\> r e r|
R1|
\!a,4\p r r2|
\version "1.3.59";
-clarinetto2 = \notes \relative c {
+clarinettoII = \notes \relative c {
R1*2 bes''4-.\ff r r2 |
R1*3 |
cis4-. r r2 |
d~|
d|
%a deux|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
bes'2.\<(c4|
bes a fis)d|
\!d'2\ff f,|
)e2. f4\sf(|
)e4 r r2|
R1*9|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
fis2.\p\<( g4|
fis e cis)a|
%a deux; urg|
c1\f~|
c\p|
a1\f|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d,\p\<~|
d~|
d~|
R1|
a4-. c-. r2|
bes4-. c-. r2|
- \property VoiceTwo.decrescendoText = "dim."
- \property VoiceTwo.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
bes4\> r a r|
R1|
\!a4\p r r2|
c4 r r2 |
}
-$contrabasso_staff = \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
- >
->
+%%%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
+%%% >
+%%%>
\midi{
\tempo 4 = 150;
+
+ \translator {
+ \ThreadContext
+ \name "VoiceCombineThread";
+ }
\translator {
\VoiceContext
- \name "VoiceOne";
+ \name "VoiceCombineVoice";
+ \accepts "VoiceCombineThread";
+ }
+ \translator {
+ \StaffContext
+ \name "VoiceCombineStaff";
+ \accepts "VoiceCombineVoice";
+ }
+
+ \translator {
+ \ThreadContext
+ \name "StaffCombineThread";
}
\translator {
\VoiceContext
- \name "VoiceTwo";
- %\remove "Span_dynamic_engraver";
- %\remove "Dynamic_engraver";
+ \name "StaffCombineVoice";
+ \accepts "StaffCombineThread";
}
\translator {
\StaffContext
- \accepts "VoiceOne";
- \accepts "VoiceTwo";
+ \name "StaffCombineStaff";
+ \accepts "StaffCombineVoice";
+ }
+ \translator {
+ \ScoreContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
}
}
textheight = 295.0\mm;
linewidth = 180.0\mm;
- % slurs are never beautiful (no steep slurs)
- slur_beautiful = 0.0;
-
- \translator {
+ \translator{ \HaraKiriStaffContext }
+ %
+ % The Voice combine hierarchy
+ %
+ \translator{
+ \ThreadContext
+ \name "VoiceCombineThread";
+ \consists "Rest_engraver";
+ \remove "Thread_devnull_engraver";
+ \consists "A2_devnull_engraver";
+ }
+ \translator{
\VoiceContext
- dynamicPadding = #2 % urg, in \pt
- dynamicMinimumSpace = #6 % urg, in \pt
+ \name "VoiceCombineVoice";
+ soloText = #"I."
+ soloIIText = #"II."
+ \remove "Rest_engraver";
+ \accepts "VoiceCombineThread";
+ \consists "A2_devnull_engraver";
+ \remove "Voice_devnull_engraver";
}
- \translator {
+ \translator{
+ \HaraKiriStaffContext
+ \consists "Mark_engraver";
+ \name "VoiceCombineStaff";
+ \accepts "VoiceCombineVoice";
+ }
+
+ %
+ % The Staff combine hierarchy
+ %
+ \translator{
+ \ThreadContext
+ \name "StaffCombineThread";
+ \remove "Thread_devnull_engraver";
+%% \consists "A2_devnull_engraver";
+ }
+ \translator{
\VoiceContext
- \name "VoiceOne";
+ \name "StaffCombineVoice";
+ \accepts "StaffCombineThread";
+
+ \remove "Rest_engraver";
+ \remove "Dot_column_engraver";
+ \remove "Stem_engraver";
+ \remove "Beam_engraver";
+ \remove "Auto_beam_engraver";
+ %\include "auto-beam-settings.ly";
- dynamicPadding = #2 % urg, in \pt
- dynamicMinimumSpace = #6 % urg, in \pt
+ \remove "Chord_tremolo_engraver";
+ \remove "Melisma_engraver";
+ \remove "Text_engraver";
+ \remove "A2_engraver";
+ \remove "Voice_devnull_engraver";
- %%\consists "Line_number_engraver";
- verticalDirection = #1
- stemVerticalDirection = #1
- %dynamicDirection = #-1
- dynamicDirection = #1
+ \remove "Piano_pedal_engraver";
+ \remove "Script_engraver";
+ \remove "Script_column_engraver";
+ \remove "Rhythmic_column_engraver";
+ \remove "Slur_engraver";
+ \remove "Tie_engraver";
+
+ \remove "Voice_devnull_engraver";
+%% \consists "Thread_devnull_engraver";
+ \consists "A2_devnull_engraver";
}
\translator {
- \VoiceContext
- \name "VoiceTwo";
- %%\consists "Line_number_engraver";
- verticalDirection = #-1
- stemVerticalDirection = #-1
- \remove "Dynamic_engraver";
- %% Aargh: absulute dynamics:
- \remove "Text_engraver";
+ \HaraKiriStaffContext
+ \name "StaffCombineStaff";
+ \accepts "StaffCombineVoice";
+
+ \consists "Rest_engraver";
+ \consists "Dot_column_engraver";
+ \consists "Stem_engraver";
+ \consists "Beam_engraver";
+ \consists "Auto_beam_engraver";
+ \include "auto-beam-settings.ly";
+
+ \consists "Chord_tremolo_engraver";
+ \consists "Melisma_engraver";
+ \consists "Text_engraver";
+ \consists "A2_engraver";
+%% \consists "Voice_devnull_engraver";
+%% \consists "A2_devnull_engraver";
+
+ soloADue = ##f
+
+ \consists "Piano_pedal_engraver";
+ \consists "Script_engraver";
+ \consists "Script_column_engraver";
+ \consists "Rhythmic_column_engraver";
+ \consists "Slur_engraver";
+ \consists "Tie_engraver";
}
- \translator {
- \HaraKiriStaffContext
- \accepts "VoiceOne";
- \accepts "VoiceTwo";
+ \translator {
+ \StaffGroupContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
}
- \translator {
- \OrchestralScoreContext
+ \translator{ \HaraKiriStaffContext }
+
+ \translator {
+ %\ScoreContext
+ %\consists "Mark_engraver";
+ \OrchestralScoreContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
+
+ barScriptPadding = #2.0 % dimension \pt
+ markScriptPadding = #4.0
+
+ %% urg: in pt?
+ barNumberScriptPadding = #15
%% URG: this changes dynamics too
%%textStyle = #"italic"
timeSignatureStyle = #"C"
instrumentScriptPadding = #55 %% urg, this is in pt
- instrScriptPadding = #35 %% urg, this is in pt
+ instrScriptPadding = #40 %% urg, this is in pt
marginScriptHorizontalAlignment = #1
maximumRestCount = #1
}
--- /dev/null
+\paper {
+
+ textheight = 295.0\mm;
+ linewidth = 180.0\mm;
+
+ \translator{ \HaraKiriStaffContext }
+ %
+ % The Voice combine hierarchy
+ %
+ \translator{
+ \ThreadContext
+ \name "VoiceCombineThread";
+ \consists "Rest_engraver";
+ \remove "Thread_devnull_engraver";
+ \consists "A2_devnull_engraver";
+ }
+ \translator{
+ \VoiceContext
+ \name "VoiceCombineVoice";
+ soloText = #"I."
+ soloIIText = #"II."
+ \remove "Rest_engraver";
+ \accepts "VoiceCombineThread";
+ \consists "A2_devnull_engraver";
+ \remove "Voice_devnull_engraver";
+ }
+ \translator{
+ \HaraKiriStaffContext
+ \consists "Mark_engraver";
+ \name "VoiceCombineStaff";
+ \accepts "VoiceCombineVoice";
+ }
+
+ %
+ % The Staff combine hierarchy
+ %
+ \translator{
+ \ThreadContext
+ \name "StaffCombineThread";
+ \remove "Thread_devnull_engraver";
+%% \consists "A2_devnull_engraver";
+ }
+ \translator{
+ \VoiceContext
+ \name "StaffCombineVoice";
+ \accepts "StaffCombineThread";
+
+ \remove "Rest_engraver";
+ \remove "Dot_column_engraver";
+ \remove "Stem_engraver";
+ \remove "Beam_engraver";
+ \remove "Auto_beam_engraver";
+ %\include "auto-beam-settings.ly";
+
+ \remove "Chord_tremolo_engraver";
+ \remove "Melisma_engraver";
+ \remove "Text_engraver";
+ \remove "A2_engraver";
+ \remove "Voice_devnull_engraver";
+
+ \remove "Piano_pedal_engraver";
+ \remove "Script_engraver";
+ \remove "Script_column_engraver";
+ \remove "Rhythmic_column_engraver";
+ \remove "Slur_engraver";
+ \remove "Tie_engraver";
+
+ \remove "Voice_devnull_engraver";
+%% \consists "Thread_devnull_engraver";
+ \consists "A2_devnull_engraver";
+ }
+ \translator {
+ \HaraKiriStaffContext
+ \name "StaffCombineStaff";
+ \accepts "StaffCombineVoice";
+
+ \consists "Rest_engraver";
+ \consists "Dot_column_engraver";
+ \consists "Stem_engraver";
+ \consists "Beam_engraver";
+ \consists "Auto_beam_engraver";
+ \include "auto-beam-settings.ly";
+
+ \consists "Chord_tremolo_engraver";
+ \consists "Melisma_engraver";
+ \consists "Text_engraver";
+ \consists "A2_engraver";
+%% \consists "Voice_devnull_engraver";
+%% \consists "A2_devnull_engraver";
+
+ soloADue = ##f
+
+ \consists "Piano_pedal_engraver";
+ \consists "Script_engraver";
+ \consists "Script_column_engraver";
+ \consists "Rhythmic_column_engraver";
+ \consists "Slur_engraver";
+ \consists "Tie_engraver";
+ }
+ \translator {
+ \StaffGroupContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
+ }
+ \translator{ \HaraKiriStaffContext }
+
+ \translator {
+ \ScoreContext
+ \accepts "VoiceCombineStaff";
+ \accepts "StaffCombineStaff";
+ skipBars = ##t
+
+ barScriptPadding = #2.0 % dimension \pt
+ markScriptPadding = #4.0
+
+ %% urg: in pt?
+ barNumberScriptPadding = #15
+ %% URG: this changes dynamics too
+ %%textStyle = #"italic"
+ timeSignatureStyle = #"C"
+ instrumentScriptPadding = #60 %% urg, this is in pt
+ instrScriptPadding = #40 %% urg, this is in pt
+ marginScriptHorizontalAlignment = #1
+ maximumRestCount = #1
+ }
+}
+
textheight = 295.0\mm;
linewidth = 180.0\mm;
- % slurs are never beautiful (no steep slurs)
- slur_beautiful = 0.0;
+ \translator{ \HaraKiriStaffContext }
\translator {
- \VoiceContext
- %dynamicPadding = #5 % urg, in \pt
- %dynamicMinimumSpace = #10 % urg, in \pt
- }
- \translator {
- \VoiceContext
- \name "VoiceOne";
- %%\consists "Line_number_engraver";
- verticalDirection = #1
- stemVerticalDirection = #1
- %dynamicDirection = #-1
- dynamicDirection = #1
- }
- \translator {
- \VoiceContext
- \name "VoiceTwo";
- %%\consists "Line_number_engraver";
- verticalDirection = #-1
- stemVerticalDirection = #-1
- \remove "Dynamic_engraver";
- %% Aargh: absulute dynamics:
- \remove "Text_engraver";
- }
- \translator {
- \OrchestralPartStaffContext
- \accepts "VoiceOne";
- \accepts "VoiceTwo";
- }
- \translator {
- \ScoreContext skipBars = ##t
+ \ScoreContext
+ skipBars = ##t
+
+ barScriptPadding = #2.0 % dimension \pt
+ markScriptPadding = #4.0
+ %% urg: in pt?
+ barNumberScriptPadding = #15
%% URG: this changes dynamics too
%%textStyle = #"italic"
timeSignatureStyle = #"C"
\include "violoncello.ly"
-legni = \context StaffGroup = legni_group <
- \$flauti_staff
- \$oboi_staff
- \$clarinetti_staff
- \$fagotti_staff
+legniGroup = \context StaffGroup = legni_group <
+ \flautiStaff
+ \oboiStaff
+ \clarinettiStaff
+ \fagottiStaff
>
-ottoni = \context StaffGroup = otonni_group <
- \$corni_staff
- \$trombe_staff
+ottoniGroup = \context StaffGroup = otonni_group <
+ \corniStaff
+ \trombeStaff
>
-$timpani_g = \context StaffGroup = timpani_group <
- \$timpani_staff
+timpaniGroup = \context StaffGroup = timpani_group <
+ \timpaniStaff
% Force a staff bracket (?)
\context Staff = timpany { \skip 1*314; }
>
-violini = \context GrandStaff = violini_group <
- \$violino1_staff
- \$violino2_staff
+violiniGroup = \context GrandStaff = violini_group <
+ \violinoIStaff
+ \violinoIIStaff
>
-violi = \context GrandStaff = violi_group <
- \$viola1_staff
- \$viola2_staff
+violiGroup = \context PianoStaff = violi_group <
+ \context StaffCombineStaff=one {
+ \clef "alto";
+ \skip 1*314;
+ \bar "|.";
+ }
+ \context StaffCombineStaff=two {
+ \clef "alto";
+ \skip 1*314;
+ \bar "|.";
+ }
+
+ \context StaffCombineStaff=one \partcombine StaffCombineStaff
+ \context StaffCombineThread=one \violaI
+ \context StaffCombineThread=two \violaII
>
-bassi = \context GrandStaff = bassi_group <
- \$violoncello_staff
- \$contrabasso_staff
+bassiGroup = \context PianoStaff = bassi_group <
+ \context StaffCombineStaff=one {
+ \clef "bass";
+ \skip 1*314;
+ \bar "|.";
+ }
+ \context StaffCombineStaff=two {
+ \clef "bass";
+ \skip 1*314;
+ \bar "|.";
+ }
+
+ \context StaffCombineStaff=one \partcombine StaffCombineStaff
+ \context StaffCombineThread=one \violoncello
+ \context StaffCombineThread=two \contrabasso
>
-archi = \context StaffGroup = archi_group <
- \$violini
- \$violi
- \$bassi
+
+archiGroup = \context StaffGroup = archi_group <
+ \violiniGroup
+ \violiGroup
+ \bassiGroup
>
\score{
<
- \legni
- \ottoni
- \$timpani_g
- \archi
+ \legniGroup
+ \ottoniGroup
+ \timpaniGroup
+ \archiGroup
>
\header{
title = "Coriolan";
\include "global.ly"
\include "corni.ly"
\score{
- \$corni_staff
- \include "coriolan-part-paper.ly"
+ \corniStaff
+ \include "coriolan-part-combine-paper.ly"
\include "coriolan-midi.ly"
}
\include "corno-1.ly"
\include "corno-2.ly"
-$corni_staff = \context Staff = corni <
+corniStaff = \context Staff = corni <
\property Staff.midiInstrument = #"french horn"
\property Staff.instrument = #"2 Corni\n(E\\textflat)"
\property Staff.instr = #"Cor.\n(E\\textflat)"
% urg: can't; only My_midi_lexer:<non-static> () parses pitch?
%\property Staff.transposing = "es"
\property Staff.transposing = #3
- %\notes \context Voice=corni <
- \notes \context Staff=corni <
- \time 4/4;
- \skip 1*341; \bar "|.";
- \context VoiceOne=cornoi
- \$corno1
- \context VoiceTwo=cornoii
- \$corno2
- >
+ \time 4/4;
+ \skip 1*341; \bar "|.";
+ \context Voice=one \partcombine Voice
+ \context Thread=one \cornoI
+ \context Thread=two \cornoII
>
\version "1.3.59";
-corno1 = \notes \relative c {
+cornoI = \notes \relative c {
R1*2 |
f''4-.\ff r r2 |
R1*3 |
r4 g-.\f r2 |
R1*2 |
% `a 2
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r8 f\p\< f2 e4 |
r8 f f2 e4 |
f4. e8 f4. e8 |
e~|
e~|
e~|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
e\<~|
e~|
e|
\version "1.3.59";
-corno2 = \notes \relative c {
+cornoII = \notes \relative c {
R1*2 |
d''4-.\ff r r2 |
R1*3 |
R1*2 |
% `a 2
% urg, yes this is a-deux, but lily doesn't know about I. / a2 yet.
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r8 f'\p\< f2 e4 |
r8 f f2 e4 |
f4. e8 f4. e8 |
e~|
e~|
e~|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
e\<~|
e~|
e~|
%a deux|
r4 r8 e,\p e4. e8|
r4 r8 e e4. e8|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r4 r8 e\< e4. e8|
r4 r8 e e4. e8|
r4 r8 e e4. e8|
e~|
e~|
e~|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
e\<~|
e~|
e|
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
\include "global.ly"
\include "fagotti.ly"
\score{
- \$fagotti_staff
- \include "coriolan-part-paper.ly"
+ \fagottiStaff
+ \include "coriolan-part-combine-paper.ly"
\include "coriolan-midi.ly"
}
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
\include "fagotto-1.ly"
\include "fagotto-2.ly"
-$fagotti_staff = \context Staff = fagotti <
+fagottiStaff = \context Staff = fagotti <
\property Staff.midiInstrument = #"bassoon"
\property Staff.instrument = #"2 Fagotti"
\property Staff.instr = #"Fg."
\clef "bass";
- %\notes \context Voice=fagotti <
- \notes \context Staff=fagotti <
- \global
- \context VoiceOne=fagottoi
- \$fagotto1
- \context VoiceTwo=fagottoii
- \$fagotto2
- >
+ \global
+ \context Voice=one \partcombine Voice
+ \context Thread=one \fagottoI
+ \context Thread=two \fagottoII
>
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
-fagotto1 = \notes \relative c {
+fagottoI = \notes \relative c {
R1*2 |
as'4-.\ff r r2 |
R1 *3 |
R1*5 |
r2 r4 g4-.\f |
R1*5 |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
ges'2\p\< f2 ~ |
f4 \!e-.\f r2 |
R1 |
f2\p()es |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d1\< |
d |
d2 d |
)d4 r r2|
R1*9|
\clef "tenor";
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
g'2.(as4 \p\<|
g f d)bes
\clef "bass";
c~|
c~|
c~|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c\<~|
c|
\!c2\ff bes|
bes(a bes)g|
fis r8 a\pp a4. a8|
r4 r8 a a4. a8|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r4 r8 bes\< bes4. bes8|
r4 r8 bes bes4. bes8|
r4 r8 c8 c4. c8|
e4 r r2|
R1*3|
r4 r8 f' es4 r8 bes|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c4\< r4 r2|
R1*2|
r4 r8 ges' f4 r8 c|
[g,: bes: c: des:][f,: bes: c: des:]||
[e,: g: bes: des:][c: e: g: c:]||
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c1\p\< ~|
c1~|
c1~|
es(d es)c|
b r8 d\p d4. d8|
r4 r8 d d4. d8|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r4 r8 es\< es4. es8|
r4 r8 es es4. es8|
r4 r8 %
es d b)g|
g'2.(as4|
g2)f|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
es2.\<( f4|
es d b)g|
R1|
d\f|
es\p|
e\f|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
as,4.\p\< as8 g4. g8|
f4. f8 es4. es8|
as4. as8 g4. g8|
R1|
g,4-. g-. r2|
as4-. bes-. r2|
- \property VoiceOne.decrescendoText = "dim."
- \property VoiceOne.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
c4\> r d r|
R1|
\!c,4\p r r2|
g4 r r2|
R1|
c4\pp r r2|
- \property VoiceOne.decrescendoText = "sempre pi\\`u piano"
- \property VoiceOne.decrescendoSpanner = ""
+ \property Voice.decrescendoText = "sempre pi\\`u piano"
+ \property Voice.decrescendoSpanner = ""
r r4 g\p\>~|
g1~|
g~|
\version "1.3.59";
-fagotto2 = \notes \relative c {
+fagottoII = \notes \relative c {
R1*2 |
f4-.\ff r r2 |
R1*3 |
)d4 r r2|
R1*9|
\clef "tenor";
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
g''2.(as4 \p\<||
g f d)bes||
\clef "bass";
c~|
c~|
c~|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c\<~|
c|
\!c2\ff g'|
fis d|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
g,4 \p\< r r r8 g(|
)c4 r r r8 c(|
\!)b1\sf\>|
R1*2|
r4 r8 fis\pp fis4. fis8|
r4 r8 fis fis4. fis8|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r4 r8 g\< g4. g8|
r4 r8 g g4. g8|
r4 r8 a a4. a8|
e|
f|
g|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
as\<|
g|
as|
g~|
g~|
g~|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
g\<~|
g~|
g~|
a~|
a~|
a~|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
a\<~|
a|
\!f'2\ff e|
R1*3|
r4 r8 b'' b4. b8|
r4 r8 b b4. b8|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r4 r8 c\< c4. c8|
r4 r8 c c4. c8|
\clef "tenor";
g\p|
bes\f|
%a deux|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
as4.\p\< as8 g4. g8|
f4. f8 es4. es8|
as4. as8 g4. g8|
R1|
es,4-. e-. r2|
f4-. g-. r2|
- \property VoiceTwo.decrescendoText = "dim."
- \property VoiceTwo.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
as4\> r b r|
R1|
%a deux|
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
\include "flauti.ly"
\score{
- \$flauti_staff
- \include "coriolan-part-paper.ly"
+ \flautiStaff
+ \include "coriolan-part-combine-paper.ly"
\include "coriolan-midi.ly"
}
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
\include "flauto-1.ly"
\include "flauto-2.ly"
-$flauti_staff = \context Staff = flauti <
+flautiStaff = \notes \context Staff = flauti <
\property Staff.midiInstrument = #"flute"
\property Staff.instrument = #"2 Flauti"
\property Staff.instr = #"Fl."
- %\notes \context Voice=flauti <
- \notes \context Staff=flauti <
- \global
- \context VoiceOne=flautoi
- \$flauto1
- \context VoiceTwo=flautoii
- \$flauto2
- >
+ \global
+ \context Voice=one \partcombine Voice
+ \context Thread=one \flautoI
+ \context Thread=two \flautoII
>
\version "1.3.59";
-flauto1 = \notes \relative c {
+flautoI = \notes \relative c {
R1 *2 |
c'''4-.\ff r r2 |
R1 *3 |
g4-. r r2 |
b,4-. r r2 |
R1 *4 |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r2 g'\p\< ( |
)fis2. \!g4-.\f |
R1*5 |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r2 f\p\< ~ |
f4 \!e-.\f r2 |
R1 |
f2\p()es |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d1\< |
d1 |
d2 d2 |
)f2. ges4\sf|
f4 r r2 |
R1*9|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
g2.\p\<(f4|
as g d)bes
\!bes2\ff des|
c~|
c~|
c~|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c\<~|
c~|
\!c2\ff es|
d1~|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d\p\<~|
d~|
d2.()f4|
\!fis\pp r r2|
r2 r4 r8 a|
bes4 r r2|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r r4 r8 bes\<|
c4 r r r8 c |
d4 r r r8 d|
r4 r8 f' es4 r8 bes|
c4 r r2|
R1*2|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = ""
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = ""
r4 r8 ges'\< f4 r8 c|
des4 r r2|
R1*5|
)d2. es4\sf(|
)d r r2|
R1*9|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
e2.\p\<(f4|
e d b )g|
\!g2\ff bes|
a1~a4\p r r2|
R1*3|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
a1\<~|
a|
\!a2\ff c|
c r8 f8 es4 r8 bes|
as4-. des4-. r2|
R1*11|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
es2.\p\<(f4|
es d b)g|
g1|
R1|
c4-. c4-. r2|
c4-. c4-. r2|
- \property VoiceOne.decrescendoText = "dim."
- \property VoiceOne.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
c4\> r d r|
R1|
\!es4\p r r2|
enteredby = "JCN";
copyright = "public domain";
}
+
\version "1.3.59";
-flauto2 = \notes \relative c {
+
+flautoII = \notes \relative c {
R1 *2 |
as'''4-.\ff r r2 |
R1 *3 |
bes\f~|
bes\p|
c1\f~|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c\p\<~|
c~|
c~|
R1|
c4-. g'-. r2|
as4-. e-. r2|
- \property VoiceTwo.decrescendoText = "dim."
- \property VoiceTwo.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
f4\> r f r|
R1|
\!es4\p r r2|
\version "1.3.59";
-oboe1 = \notes \relative c'' {
+oboeI = \notes \relative c'' {
R1*2 |
as'4-.\ff r r2 |
R1*3 |
g4-. r r2 |
g4-. r r2 |
R1 *4 |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
as2\p\< ( g |
)fis2. \!g4-.\f |
R1*5 |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
ges2\p\< f ~ |
f4 \!e\f r2 |
R1 |
f2\p()es |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d1\< |
d |
d2 d |
)f2. ges4(|
)f4 r r2|
R1*9|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
g2.\p\<( as4|
g f d)bes|
\!bes'2\ff des|
c bes|
as4\p r r2|
R1*3|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
as2.\p\<( bes4|
as g e)c|
\!c'2\ff es,|
d1~|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
d\p\< ~|
d~|
\!d2.\sf\>()f4|
fis\pp r r2|
r r4 r8 fis' |
g4 r r2|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r r4 r8 g\<|
a4 r r r8 a|
bes4 r r r8 bes|
des4 r r r8 c|
bes4 r8 es f4 r8 f|
g4 r8 g e4 r 8 e|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c'1\p\< ~|
c~|
c~|
)g2. fis4\sf(|
)g4 r r2|
R1*5|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
e2.\p\< (f4|
e d b)g|
g'2.(a4 g2)f|
a~|
a~|
a|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
f2.\<( g4|
f e cis)a|
\!a'2\ff c|
es(d es)c|
b r r2|
r r4 r8 d|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
es4\< r r2|
r r4 r8 es|
f4 r r r8 f|
es d b)g|
g'2.(as4|
g2)f|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
es2.\<( f4|
es d b)g|
c1|
f\f|
g\p|
g\f|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c\p\<~|
c~|
c~|
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
-oboe2 = \notes \relative c{
+oboeII = \notes \relative c{
R1*2|
f''4-.\ff r r2 |
R1*3 |
bes4 r8 bes bes4 r8 bes|
bes4\p r r2|
R1*15|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r4 r8 as'\< ges4 r8 des|
es4 r8 bes' as4 r8 es|
f4 r r2|
des4 r r r8 c|
bes4 r8 bes bes4 r8 bes|
bes4 r8 bes bes4 r8 bes|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c1\p\< ~||
c~|
c~|
d\f|
es\p|
e\f|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c\p\< ~|
c~|
c~|
R1|
c4-. c-. r2|
c4-. c-. r2|
- \property VoiceTwo.decrescendoText = "dim."
- \property VoiceTwo.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
c4\> r d r|
R1|
\!c4\p r r2|
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
\include "oboi.ly"
\score{
- \$oboi_staff
- \include "coriolan-part-paper.ly"
+ \oboiStaff
+ \include "coriolan-part-combine-paper.ly"
\include "coriolan-midi.ly"
}
\include "oboe-1.ly"
\include "oboe-2.ly"
-$oboi_staff = \context Staff = oboi <
+oboiStaff = \context Staff = oboi <
\property Staff.midiInstrument = #"oboe"
\property Staff.instrument = #"2 Oboi"
\property Staff.instr = #"Ob."
- %\notes \context Voice=oboi <
- \notes \context Staff=oboi <
- \global
- \context VoiceOne=oboei
- \$oboe1
- \context VoiceTwo=oboeii
- \$oboe2
- >
+ \global
+ \context Voice=one \partcombine Voice
+ \context Thread=one \oboeI
+ \context Thread=two \oboeII
>
-
\include "timpani.ly"
\score{
- \$timpani_staff
+ \timpaniStaff
\include "coriolan-part-paper.ly"
\include "coriolan-midi.ly"
}
R1*18|
}
-$timpani_staff = \context Staff = timpani <
+timpaniStaff = \context Staff = timpani <
\property Staff.midiInstrument = #"timpani"
\property Staff.instrument = #"2 Timpani\n(C-G)"
\property Staff.instr = #"Timp."
% \global
\time 4/4;
\context Voice=timpani
- \$timpani
+ \timpani
>
>
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
\include "global.ly"
\include "trombe.ly"
\score{
- \$trombe_staff
- \include "coriolan-part-paper.ly"
+ \trombeStaff
+ \include "coriolan-part-combine-paper.ly"
\include "coriolan-midi.ly"
}
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
\include "trombo-1.ly"
\include "trombo-2.ly"
-$trombe_staff = \context Staff = trombe <
+trombeStaff = \context Staff = trombe <
\property Staff.midiInstrument = #"trumpet"
\property Staff.instrument = #"2 Trombe\n(C)"
\property Staff.instr = #"Tbe.\n(C)"
- %\notes \context Voice=trombe <
- \notes \context Staff=trombe <
-% \global
- \time 4/4;
- \context VoiceOne=tromboi
- \$trombo1
- \context VoiceTwo=tromboii
- \$trombo2
- >
+ \time 4/4;
+ \context Voice=one \partcombine Voice
+ \context Thread=one \tromboI
+ \context Thread=two \tromboII
>
\version "1.3.59";
-trombo1 = \notes \relative c {
+tromboI = \notes \relative c {
R1*2 |
c''4-.\ff r r2 |
R1*3 |
R1*6 |
r4 c-.\f r2 |
R1*2 |
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r2 c4\p\< r |
r2 c4 r |
r2 c4 r |
c4 r r2|
R1*18|
e1\f(|
- \property VoiceOne.crescendoText = "cresc."
- \property VoiceOne.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
)c\p\< ~|
c~|
c~|
R1|
c4-. c-. r2|
c4-. c-. r2|
- \property VoiceOne.decrescendoText = "dim."
- \property VoiceOne.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
c4\> r g r|
R1|
\!g4\p r r2|
\version "1.3.59";
-trombo2 = \notes \relative c {
+tromboII = \notes \relative c {
R1*2 |
c'4-.\ff r r2 |
R1*3 |
R1*6 |
r4 c-.\f r2 |
R1*2 |
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
r2 c4\p\< r |
r2 c4 r |
r2 c4 r |
c4 r r2|
R1*18|
c1\f~|
- \property VoiceTwo.crescendoText = "cresc."
- \property VoiceTwo.crescendoSpanner = "dashed-line"
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
c\p\< ~|
c~|
c~|
R1|
c,4-. c-. r2|
c4-. c-. r2|
- \property VoiceTwo.decrescendoText = "dim."
- \property VoiceTwo.decrescendoSpanner = "dashed-line"
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
c4\> r g r|
R1|
\!g4\p r r2|
\version "1.3.59";
-viola1 = \notes \relative c {
+violaI = \notes \relative c {
c'1\ff ~ |
c |
f,4-. r r2 |
%60
)es4 r r r8 es(|
)as4 r r r8 as |
- bes2:16 as: |
+ \!bes2:16\ff as: |
g: e: |
- \!f4\p r r r8 f(|
+ f4\p r r r8 f(|
%65
)bes4 r r r8 bes(|
)as4 r r r8 as(|
)b r r2 |
R1
% ugh, should be quoted and transposed
- c4\p r r r8 c8(|
+ c,4\p r r r8 c8(|
)f4 r r r8 f8(|
%180
)e4 r r r8 e8(|
)b'4 r r r8 b8(|
)c4 r r r8 c,8(|
)f4 r r r8 f8|
- \!g2:16\ff f: |
+ \!g'2:16\ff f: |
e: cis: |
%190
- c,4\p r r r8 c8(|
- )g'4 r r r8 g8(|
+ 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"
)d4 r r r8 d8(|
%195
)g4 r r r8 g8|
- % check
[\!a16\ff a' a a]a4: a2: |
fis: dis: |
g'2: g: |
%214
- bes,2:16\ff bes4: c: |
+ b,2:16\ff b4: c: |
g'2: g: |
e2:16\ff e4: f: |
b,: c: b: c: |
%220
- r4 r8 as as2|
- r4 r8 as as2|
- r4 r8 as as2|
- r4 r8 as as2|
- [des'16 des f f]des4: [b16 b d d]b4: |
+ r4 r8 as as2\sf|
+ r4 r8 as as2\sf|
+ r4 r8 as as2\sf|
+ r4 r8 as as2\sf|
+ [des16 des f f]des4: [b16 b d d]b4: |
%225
- % check
[bes16 bes c c]bes4: [a16 a c c]a4: |
[f16 f b b]f4: [as16 as c c]as4: |
[as16 as d d]as4: [as16 as c c]as4: |
\property Voice.crescendoText = "cresc."
\property Voice.crescendoSpanner = "dashed-line"
c'4\p\< r r r8 c8(|
- % check slur and oct
- )f4 r r r8 f8 |
- % f,8 (|
- es1 |
+ )f4 r r r8 f,8(|
+ )es1 |
%255
\!ges\f |
f\p |
as\f |
g\p
- e2:16\f e: |
+ e'2:16\f e: |
%260
\property Voice.crescendoText = "cresc."
c4 r r2 |
}
-% urg
-\include "viola-2.ly";
-
-
-% $viola1_staff = \context Staff = viola1 <
-$viola1_staff = \context Staff = violai <
- \property Staff.midiInstrument = #"viola"
- \property Staff.instrument = #"Viola"
- \property Staff.instr = #"Vla."
- \clef "alto";
- \notes \context Voice=one <
- \global
- \$viola1
- >
->
+%%% 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
+%%% >
+%%%>
\version "1.3.59";
-viola2 = \notes \relative c {
- % starts on (actualy, most part is on) same staff as viola1
- %urg, parse error
-%urg \translator Staff=viola1
- \context Thread
- \translator Staff=violai
- \translator Voice=one
- c1 ~ |
+violaII = \notes \relative c {
+ c1\ff ~ |
c |
- s1*2 |
+ f4-. r r2 |
+ r1 |
% copied 3 bars from three back...
- c ~ |
+ %5
+ c1 ~ |
c |
- s1*2 % |
-% \translator Staff=viola
- c ~ |
+ f4-. r r2 |
+ r1 |
+ c1 ~ |
c |
- s1*2 |
- g'4-. r r2 |
+ fis4-. r r2 |
+ r1 |
g4-. r r2 |
+ g4-. r r2 |
+ % copied from violino-1...
%15
- s1*14
- % same as viola-1, octave lower
+ [c,8-.\p es-.] [es()d] [d-. g-.] g4-"ten." |
+ [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"
+ es4.\< es8 d4. d8 |
+ %20
+ c4. c8 \!b4\f r4 |
+ R1 |
+ r4 [des,8\p()c][c-. f-.]f4-"ten." |
+ r4 [des8\p()c][c-. f-.]f4-"ten." |
+ 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"
+ 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"
[c8\< c-.]c2.~ |
+ %30
[c8 c-.]c2.~ |
[c8 c-.] c4. c8-. c4~ |
- [c8 c8-.] c4. c8-. c4 |
+ [c8 c-.] c4. c8-. c4 |
+ [\!as'16\ff as as as][as as as as]as2:16 |
%35
- [\!as'16\ff as a as][as as as as]as2:16 |
+ [f16 f f f][g g g g][f f f f][es es es es] |
+ f2:16 es: |
+ f: es: |
+ g: as: |
+ bes: c: |
+ %40
+ c,2\sf [c8-. es-.][es()d] |
+ c2\sf [c8-. es-.][es()d] |
+ b'2\f r8 [d,-. d()c] |
+ b'2\f r8 [d,-. d()c] |
+ b'2\f r8 [des,-. des()c] |
+ %45
+ a'2\sf [a8-. c-.][c()bes] |
+ r4 [a8-. c-.][c()bes] r4 |
+ r4 [a8-. c-.][c()bes] r4 |
+ r4 [a8-. c-.][c()bes] r4 |
+ r4 [a8-. c-.][c()bes][bes()a] |
+ %50
+ bes4 r r2 |
+ R1 |
+ es,4\p r r r8 es(|
+ )as4 r r r8 as (|
+ )g4 r r r8 g(|
+ %55
+ )d4 r r r8 d(|
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
+ )es4 r\< r r8 es(|
+ )as4 r r r8 as(|
+ )g4 r r r8 g(|
+ )d4 r r r8 d(|
+ %60
+ )es4 r r r8 es(|
+ )as4 r r r8 as |
+ \!g2:16\ff f: |
+ e: c: |
+ f4\p r r r8 f(|
+ %65
+ )bes4 r r r8 bes(|
+ )as4 r r r8 as(|
+ )e4 r r r8 e(|
+ \property Voice.crescendoText = "cresc."
+ \property Voice.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"
+ g4\p\< r r r8 g(|
+ )c,4 r r r8 c |
+ [\!f8\sf(\>as f as][f g d)\!g] |
+ %75
+ r [c\p(g)c] r [bes(g)bes] |
+ r [g(es)g] r [g(d)g] |
+ r [g(es)g] r [g(e)g] |
+ [d-.\pp d'-.] es4. es8-. d4 ~ |
+ [d8 d-.] es4. es8-. d4 ~ |
+ %80
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
+ [d8\< d-.] es4. es8-. d4 ~ |
+ [d8 d-.] es4. es8-. d4 ~ |
+ [d8 d-.] es4. es8-. d4 ~ |
+ [d8 d-.] es4. es8-. d4 (|
+ \!)fis,2:\ff fis4: g: |
+ %85
+ d2: d: |
+ fis: fis4: g: |
+ c,: d: c: d: |
+ b2: b4: c: |
+ f': es: f: es: |
+ %90
+ b2: b4: c: |
+ d: c: d: c: |
+ c,4 r8 c' c4\sf()des |
+ r r8 c c4\sf()des |
+
+ r r8 c c4\sf()des |
+
+ r r8 c c4\sf()des |
+
+ [c16 es es es]es4:[es16 fis fis fis]fis4: |
+ [b,16 d d d]d4:[bes16 e e e]e4: |
+ [as,16 c c c ]c4:[g16 c c c]c4: |
+ [a16 c c c]c4:[g16 c c c]c4: |
+ %100
+ [c8 d,]d4. es8-. es4 ~ |
+ [es8 c-.]c4. d8-. d4 |
+ % shared with cello from here on;
+ % except for some abbrevs below...
+ [g8\p bes cis d][es d bes g]|
+ [fis a cis d][es d a fis\f] |
+ [g bes cis\p d][es d bes g]
+ %105
+ [fis a cis d][es d a fis\f] |
+ [g bes cis\p d][f, a cis d] |
+ [es, g b c][d, g a bes] |
+ [c, es g a]r[d, fis g] |
+ r[c, es g][d fis a d] |
+ %110
+ % cello has eighth notes here...
+ [g,16 g bes bes][d d es es][f, f a a][cis cis d d] |
+ [es,8: g: b: c!:][d,: f: a: bes:] |
+ [c,: es: g: a:][cis,: e: g: bes:] |
+ [d,: g: bes: d:][d,: fis: a: d:] |
+ g,2: g:
+ %115
+ |
+ g: g: |
+ g: g: |
+ g: g: |
+ % urg, 2 copied from 102
+ [g8\p bes cis d][es d bes g]|
+ [fis a cis d][es d a fis] |
+ %120
+ [g bes c des][c des bes g]|
+ [f as c des][c des as f]|
+ [e g b c][b c g e]|
+ [f as b c][b c as f]|
+ [e g b c][b c g e]|
+ %125
+ [c e fis g][fis g e c]|
+ [f as b c][des c as f]|
+ [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"
+ [as\< c d es][f es c as]|
+ %131
+ [g bes d es][f es bes g]|
+ % shared with cellos until here
+ % shared with violino-2 from here on
+ [as as c es][f es c as]|
+ [a c es f][ges f c a]|
+ [bes des f ges][as ges des bes]|
+ %135
+ [c es g as][bes as es c]|
+ [\!des\p f a bes][c, es g as]|
+ [bes, des f ges][as, c e f]|
+ [ges, bes d es][f, as c des]|
+ [es, ges bes des][as c es as,]|
+ %140
+ % shared with cello from here on;
+ % except cello has eighth notes
+ [des,16\f des f f][a a bes bes][c, c es es][g g as as]|
+ [bes8: des: f: ges:][as,: c: e: f:]|
+ [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"
+ [f,8\p\< as c des][es, g b c]|
+ [des, f a bes][c, es g as]|
+ % uhuh, still 'same as cello';
+ % but now rests for notes that viola cannot reach...
+ %145
+ r[des, e g]r[c, e f]|
+ % hmm, don't want to miss more than one note,
+ % take bes octave higher
+ r[bes des, f][c e g c]|
+ % cello has eight notes;
+ % viola has rest where can't reach
+ [\!f,:\ff as: c: des:][es,: g: b: c:]|
+ [des,: f: a: bes:][c,: es: g: as:]|
+ %150
+ r[des,16 des][e e g g]r8[c,16 c][e e f f]|
+ r8[des16 des][f f g g][c, c e e][g g c c]|
+ f,1\ff ~ |
+ f |
+ bes4 r r2
+ %155
+ R1
+ f1 ~ |
+ f |
+ b2\sf [f8-. as-.][as()g] |
+
+ b2\sf [f8-. as-.][as()g] |
+ % ugh, should be quoted and transposed...
+ %160
+ [f8-.\p as-.][as()f][g-. c-.][c()b] |
+ R1*2 |
+
+ e,2\ff [es8-. g-.][g()f] |
+ e2\sf [es8-. g-.][g()f] |
+ %165
+ [e-.\p bes'-.][bes()as][g-. des'-.][des()c] |
+ R1*2 |
+ r4 [e,8-.\ff g-.][g()f] r4 |
+ r4 [e8-. g-.][g()f] r4 |
+ %170
+ r4 [e8-. g-.][g()f] r4 |
+ r4 [e8-. g-.][g()f][fis-.fis-.] |
+
+ g4 [fis8-.as-.][as()g] r4 |
+ r4 [fis8-.as-.][as()g] r4 |
+ r4 [fis8-.as-.][as()g] r4 |
+ %175
+ r4 [fis8-.as-.][as()g] c4\sf(|
+ )b r r2 |
+ R1
+ % ugh, should be quoted and transposed
+ c,4\p r r r8 c8(|
+ )f4 r r r8 f8(|
+ %180
+ )e4 r r r8 e8(|
+ )b'4 r r r8 b8(|
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
+ )c4 r\< r r8 c,8(|
+ % copied
+ )f4 r r r8 f8(|
+ )e4 r r r8 e8(|
+ %185
+ )b'4 r r r8 b8(|
+ )c4 r r r8 c,8(|
+ )f4 r r r8 f8|
+ \!e'2:16\ff d: |
+ cis: a: |
+ %190
+ 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"
+ )cis4\< r r r8 cis8(|
+ )d4 r r r8 d8(|
+ %195
+ )g4 r r r8 g8|
+ [\!f16\ff f' f f]f4: f2: |
+ dis: b: |
+
+ e,4\p r r r8 e8(|
+ )a4\< r r r8 a8(|
+ %200
+ [)g(g e g][e g e)g] |
+ % quote and transpose
+ [f(g f g][f g f)\!g] |
+ [c\f\>(g c,)g']r[bes(g)\!bes] |
+ r[as\p(f)as]r[g(es)g] |
+ r[f(c)f]r[g(es)g] |
+ %205
+ 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"
+ [g8 g-.\<] as4. as8-. g4 ~ |
+ [g8 g-.] as4. as8-. g4 ~ |
+ %210
+ [g8 g-.] as4. as8-. g4 ~ |
+ [g8 g-.] as4. as8-. g4 (|
+ \!)b,2:16\ff b4: c: |
+ g'2: g: |
+
+ %214
+ b,2:16\ff b4: c: |
+ g'2: g: |
+
+ bes,2:16\ff bes4: as: |
+ g: f: g: f: |
+
+ bes2:16\ff bes4: as: |
+ g: f: g: f: |
+
+ %220
+ r4 r8 f f4\sf()ges|
+ r4 r8 f f4\sf()ges|
+ r4 r8 f f4\sf()ges|
+ r4 r8 f f4\sf()ges|
+ [des'16 des f f]des4: [b16 b d d]b4: |
+ %225
+ [bes16 bes c c]bes4: [a16 a c c]a4: |
+ [f16 f b b]f4: [as16 as c c]as4: |
+ [as16 as d d]as4: [as16 as c c]as4: |
+ [g8 g]g4. as8 as4 ~ |
+ [as8 as]f4. f8 g4 |
+ %230
+ c\p r r2 |
+ r r4 r8 b\f |
+ c4 r r2 |
+ r r4 r8 b\f |
+ c4 r r2 |
+ R1*3 |
+ [c,16c es es][g g as as][bes bes d d][fis fis g g] |
+ [as, as c c][e e f f][g, g bes bes][d d es es] |
+ %240
+ f,4 r r2 |
+ R1*11 |
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
+ c'4\p\< r r r8 c8(|
+ )f4 r r r8 f,8(|
+ )es1|
+
+ %255
+ \!ges\f |
+ f\p |
+ as\f |
+ g\p
+ bes2:16\f bes: |
+
+ %260
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = "dashed-line"
+ [as8\p\< f']f4. es8 es4 ~ |
+ [es8 as]as4. g8 g4 ~ |
+ [g8 f]f4. es8 es4 ~ |
+ [es8 as]as4. g8 g4 |
+ r r8 \!d\ff es4.\sf()d8 |
+ %265
+ r4 r8 d es4.\sf()d8 |
+ r4 r8 e f4.\sf()e8 |
+ r4 r8 e f4.\sf()e8 |
+ r4 r8 e g4.\sf()f8 |
+ r4 r8 f as4.\sf()g8 |
+ %270
+ g2:16-"sempre" g:\ff |
+ g: g: |
+ g: g: |
+ g: g: |
+ [g8 b, c g][c b c g] |
+ %275
+ [c b c g][c b c g] |
+ c,1 ~ |
+ c |
+ f4-. r r2 |
+ R1 |
+ c1 ~ |
+ c |
+ f4-. r r2 |
+ R1 |
+ c1 ~ |
+ c |
+ fis4-. f-. r2 |
+ R1 |
+ es4-. e-. r2 |
+ f4-. g-. r2 |
+ %290
+ \property Voice.decrescendoText = "dim."
+ \property Voice.decrescendoSpanner = "dashed-line"
+ as4\> r g r |
+ R1 |
+ \!c4\p r r2 |
+ R1 |
+ g4-"pizz." r r2 |
+ R1 |
+ c,4 r r2 |
+ R1*15 |
+ c4\pp r r2 |
+ c4 r r2 |
+ c4 r r2 |
}
-
-% $viola2_staff = \context Staff = viola_2 <
-$viola2_staff = \context Staff = violaii <
- \property Staff.midiInstrument = #"viola"
- \property Staff.instrument = #"Viola II"
- \property Staff.instr = #"Vla. II"
- \clef "alto";
- % notes must go to Staff context: we want to switch Staff translators
- %\notes \context Voice=one<
- \global
- \$viola2
- %>
->
-
--- /dev/null
+\header{
+filename = "violi-part.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 <
+ \context StaffCombineStaff=one {
+ \clef "alto";
+ \skip 1*314;
+ \bar "|.";
+ }
+ \context StaffCombineStaff=two {
+ \clef "alto";
+ \skip 1*314;
+ \bar "|.";
+ }
+
+ \context StaffCombineStaff=one \partcombine StaffCombineStaff
+ \context StaffCombineThread=one \violaI
+ \context StaffCombineThread=two \violaII
+>
+
+\score{
+ \violiGroup
+ \include "coriolan-part-combine-paper.ly"
+ \include "coriolan-midi.ly"
+}
+
\include "violino-1.ly"
\score{
- \$violino1_staff
+ \violinoIStaff
\include "coriolan-part-paper.ly"
\include "coriolan-midi.ly"
}
\version "1.3.59";
-violino1 = \notes \relative c {
+violinoI = \notes \relative c {
c'1\ff ~ |
c |
<f4-. c'-. as'-.> r r2 |
c4 r r2 |
}
-$violino1_staff = \context Staff = violino1 <
+violinoIStaff = \context Staff = violino1 <
\property Staff.midiInstrument = #"violin"
\property Staff.instrument = #"Violino I"
\property Staff.instr = #"Vl. I"
\notes<
\global
\context Voice=violinoi
- \$violino1
+ \violinoI
>
>
\include "violino-2.ly"
\score{
- \$violino2_staff
+ \violinoIIStaff
\include "coriolan-part-paper.ly"
\include "coriolan-midi.ly"
}
\version "1.3.59";
-violino2 = \notes \relative c {
+violinoII = \notes \relative c {
c'1\ff ~ |
c |
<f4-. c'-. as'-.> r r2 |
c4 r r2 |
}
-$violino2_staff = \context Staff = violino2 <
+violinoIIStaff = \context Staff = violino2 <
% MIDI hoort geeneens verschil tussen een
% eerste en tweede viool ;-)
\property Staff.midiInstrument = #"violin"
\notes<
\global
\context Voice=violinoii
- \$violino2
+ \violinoII
>
>
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
copyright = "public domain";
-
-
}
\version "1.3.59";
c4 r r2 |
}
-$violoncello_staff = \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
- >
->
+%%%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
+%%% >
+%%%>
;; (cons (lambda (slur dir) (begin (display "before head") (newline))#f) #f)
+ ;; urg: don't crash on a slur without note-columns
+ (cons (lambda (slur dir)
+ (< (length (ly-get-elt-property slur 'note-columns)) 1)) 'head)
+
+ ;; urg: don't crash on a slur without note-columns
+ (cons (lambda (slur dir)
+ (< (length (ly-get-elt-property slur 'note-columns)) 1)) 'head)
+
(cons (lambda (slur dir)
;; urg, code dup
(let* ((note-columns (ly-get-elt-property slur 'note-columns))
((stem 1 1) . (0 . 0.5))
((stem -1 -1) . (0 . -0.5))
+
+ ((loose-end -1 1) . (-4 . 0))
+ ((loose-end -1 -1) . (-4 . 0))
+ ((loose-end 1 1) . (-0.4 . 0))
+ ((loose-end 1 -1) . (-0.4 . 0))
))