>
)
+question(How do I combine multiple pieces into one document)
+
+There are several solutions:
+
+itemize(
+it()
+verb(
+ ly2dvi foo.ly bar.ly
+)
+produces one combined file(foo.dvi)
+it() make a toplevel file(.ly) file that contains al pieces:
+verb(
+ % booklet.ly
+ \input "piece-1.ly"
+ \input "piece-2.ly"
+ \input "piece-3.ly"
+)
+it() make a hybrid TeX()/LilyPond file(.doc) document (see the
+ file(Documentation/tex) directory).
+)
+
+For the first two solutions, you will need to move code(\header) info
+in each individual piece from toplevel into the code(\paper) block.
+
+There are several examples in the file(mutopia) directory.
+
question(How do I get bar numbers?)
See file(input/test/bar-scripts.ly).
+question(How do I change the tagline 'Lily was here')
+
+In the code(\header) field, add a code(tagline) entry, eg
+verb(
+tagline="Typeset by GNU LilyPond"
+)
+
+to get a bit less frivolous tagging.
+
sect(Development)
COMMENT(look out: can't have line breaks in subsect() macro)
\mudelafile{noteheadstyle.ly}
-Noteheads can have dots, and ---although this is bad style--- rests
-can too. Augmentation dots should never be printed on a staff line,
-but rather be shifted: down stem notes shift dots down, up stem up.
-In case of chords, all dots should be in a column. The dots go along
-as rests are shifted to avoid collisions.
+Noteheads can have dots, and ---although this is bad style in duple
+meters--- rests can too. Augmentation dots should never be printed on
+a staff line, but rather be shifted: down stem notes shift dots down,
+up stem up. In case of chords, all dots should be in a column. The
+dots go along as rests are shifted to avoid collisions.
\mudelafile{dots.fly}
point) are mixed.
Stems, beams, ties and slurs should behave similarly, when placed
-on the middle staff line.
+on the middle staff line. Of course stem-direction is down for high
+notes, and up for low notes.
\mudelafile{stem-direction.sly}
\mudelafile{stem-spacing.sly}
-Even if a line is very tightly spaced, there will still be room
-between prefatory matter and the following notes. The same holds at
-the end of line.
+Even if a line is very tightly spaced, there will still be room
+between prefatory matter and the following notes. The space after the
+prefatory is very rigid. In contrast, the space before the barline
+must stretch like the space within the measure.
+
+Tight:
\mudelafile{spacing-tight.ly}
+Natural:
+
+\mudelafile{spacing-natural.ly}
+
+Loose:
+
+\mudelafile{spacing-loose.ly}
+
\section{Global stuff}
\mudelafile{bar-scripts.ly}
Staff margins are also markings attached to barlines. They should be
-left otf the staff, and be centered vertically wrt the staff. They
-may be on normal staffs, but also on compound staffs, like the
-PianoStaff
+left of the staff, and be centered vertically wrt the staff. They may
+be on normal staffs, but also on compound staffs, like the PianoStaff
\mudelafile{staff-margin.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
-to match the staff dimensions.
+to match the staff dimensions.
\mudelafile{size11.ly}
also contain identifier assignments and parameter assignments. Unlike
at the top level, these assignments must be terminated by a semicolon.
+subsect(Changing Font Size and Paper Size)
+
+The Feta font provides musical symbols at six different sizes. These
+fonts are 11 point, 13 point, 16 point, 20 point, 23 point, and 26
+point. The point size of a font is the height of the five line staff
+when displayed in the font. The default font is 20 points. To select
+a different font size you must load the desired size with an
+code(\include) keyword at the top level and then you must select the
+desired size with an identifier in the code(\paper) block. To load a
+font use the command code(\include "paper)var(N)code(.ly") where
+var(N) is the desired font size. For example, using code(\include
+"paper26.ly") will produce very large music. This statement should
+appear at the top level at the top of your Mudela file. To select the
+font for printing, this you must include code(\paper_twentysix) in the
+code(\paper) block of your file. The identifiers that are used to
+select different font sizes are code(paper_eleven),
+code(paper_thirteen), code(paper_sixteen), code(paper_twenty),
+code(paper_twentythree), and code(paper_twentysix).
+
+To change the paper size, you must first set the code(papersize)
+variable at the top level. Set it to code(a4), code(letter), or
+code(legal). After this specification, you must set the font as
+described above. If you want the default font, then use the 20 point
+font. The new paper size will not take effect if the font is not
+loaded and selected afterwords. Paper size selection works by loading
+a file named after the paper size you select.
+
+
subsect(Paper variables)
.* TODO before 1.2
. * align left edge of broken (de)cresc/slur/tie/tuplet/volta
. * auto-staff-switching.
+. * warning if feta-nummer.tfm not found
. * broken examples:
input/star-spangled-banner.ly: hw?
-mutopia/J.S.Bach/Petites-Preludes/preludes-paper.ly? hw?
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-cello.ly: hw: slurs + autobeamer ?
mutopia/Coriolan/*
-
. * spacing of accidentals
. * key restorations & repeats
. * spanners from grace to normal ctxt
+. * rename \paper?
. * Grace_slur_engraver.
. * paperXX.ly \quartwidth, font setting not up to date. (Should read from AFM?)
. * input/star-spangled-banner.ly: fold for lyrics?
. * Break_req handling is silly (break_forbid () + \break fucks up.)
. * account for accidentals in spacing.
-. * indent = 0.0 with linewidth=-1.0
. * \shape 1st dim skipped?
-. * PostScript
-. * half notes in pfa
. * We need feta-din*.mf files for more sizes than 10.
. * fix dynamics decently, ie. use kerning & ligatures.
The words are aligned with the main note, not the start of the
grace note. This is usually wrong, but is sometimes right.
. * decimal point in \paper {}
+. * tie-direction
. * use melismaBusy in Lyric context to typeset melismata correctly.
. * ly2dvi/lilypond logfile.
. * hang Item on Spanner
Address 0xefffeca8 is 728 bytes below frame pointer in function
. * GNU diff 2.7: diff -rN does not see a new directory with empty file
. * patch: don't touch timestamp if all patches fail.
-. * mf-to-table -> add space before ; in AFM output. (-> check AFM
- spec. Is this a bug in afm2tfm?)
+. * MetaPost: should not generate setgray for unfill
+. * mfplain.ini not in tetex 0.9
+. * mf-to-table -> add space 'before ; in AFM output. (-> check AFM
+spec. Is this a bug in afm2tfm?)
. * check out GCC signatures?
. * glibc 2.0:
f = fopen ("/dev/null", "r")
assert (feof (f))
-
. * tetex: mfplain.mem
. * timesig: sometimes bottom digit too high: Xdvi doesn't handle
newly created fonts correctly.
Recommends: python-base (>= 1.5.1), python-misc (>= 1.5.1), tetex-base (>= 0.9.981030-1), tetex-extra (>= 0.9.981030-1)
Conflicts: musixtex-fonts, tetex-base (<< 0.9)
Description: The GNU Project music typesetter.
- LilyPond produces beautiful sheet music using a high level description
- file as input. LilyPond is part of the GNU project.
+ LilyPond is a music typesetter. It produces beautiful sheet music
+ using a high level description file as input. It is part of the GNU
+ project.
.
--- /dev/null
+
+ \score {\notes \context Voice = VA \relative c' {
+ <g4. e'> <g'4. e'> <a4. e' a> <a,4. a'>} }
--- /dev/null
+
+<f, c' d e f>
\score { \notes
\relative c'' \context Staff {
- \repeat "semi" 2 { \time 4/4; c4^"foo" }
- \alternative { d-4 e-\fermata } \grace { c16 } f-\ff
+ \property Staff.textEmptyDimension = "1"
+ \repeat "semi" 2 { \time 4/4; c4^"cuivr\\'e"_\fermata }
+ \alternative {
+ { \property Voice.textStyle = "italic" d-4_"cantabile" }
+ { e } } \grace { c16 }
+ \property Voice.textStyle = "large"
+ f4-\ff^""^"Largo" \mark "B"; g
+ }
+ \paper { linewidth = -1.0;
+ \translator { \BarNumberingStaffContext}
}
- \paper { linewidth = -1.0; }
}
%<c1 e g>
c1-m c-min c4-dim c-aug c-sus c-maj
c1-6 c4-7 c-9 c-11 c-13
+ c-m7 c-m.sus c-m7.sus
c1-7^5 c-13^5.7.9.11
% c1-7^5 c-13^5
c1 g d a e b fis
d''4. b c4 | <b4. c d e> <f g a b>
-%This doesn't really work yet.
+<g b d> <c, g' d' a'>
+
\context Staff <
\context Voice = VA { \stemup <b c> r4. }
--- /dev/null
+% the Gm7sus4/D chord prints as Gm/4/7/D
+% it took me quite a while by experiment to work out how to enter it -- PC
+
+% perhaps the current modifier approach is too simplistic
+
+\version "1.1.52";
+
+gmsus=\notes\relative c \chords{
+ g1
+ % Gm7sus4: the hard way
+ g1-3-.4.7
+
+ % another hard way:
+ \notes< g'1 bes c d f >
+
+ % bit easier:
+ g1-m.4.7
+
+ g1-m7.sus
+ g1-m7.sus4
+
+ % and finally:
+ \property Score.chordInversion = 1
+ g1-m7.sus/d
+}
+
+\score{
+ <
+ \context ChordNames \gmsus
+ \context Staff \gmsus
+ >
+}
--- /dev/null
+\score {
+ \notes { \time 2/2; c'2 c'2 \time 2/2; }
+ \paper { linewidth = 5.0\cm;
+ indent = 0.0;
+ }
+}
--- /dev/null
+
+\score {
+ \notes { \time 2/2; c'2 c'2 \time 2/2; }
+ \paper { linewidth = -1.0 \cm;
+ indent = 0.0;
+ }
+}
+
\score {
\notes { \time 2/2; c'2 c'2 \time 2/2; }
- \paper { linewidth = 2.9\cm; }
+ \paper { linewidth = 2.5 \cm;
+ indent = 0.0;
+ }
}
-b''4 ~ b8()b8
+b''4 ~ b8()b8 e4 e,
bool
Duration_iterator::ok ()
{
- return (cursor_dur_.durlog_i_
- && !((cursor_dur_.durlog_i_ == 0) && (cursor_dur_.dots_i_ > 2)));
+ return cursor_dur_.length_mom () <= Moment (4);
}
Axis_align_item::do_pre_processing();
- Real pre_space = elems[0]->extent (X_AXIS)[LEFT];
- Real spring_len = elems.top ()->extent (X_AXIS)[RIGHT];
+
+ Real pre_space = elems[0]->extent (X_AXIS)[LEFT]
+ + elems[0]->relative_coordinate (column_l ()->dim_cache_[X_AXIS], X_AXIS);
+ Real spring_len = elems.top ()->extent (X_AXIS)[RIGHT]
+ + elems.top ()->relative_coordinate (column_l ()->dim_cache_[X_AXIS], X_AXIS);
+
Real stretch_distance =0.;
if (SCM_CAR (symbol_list) == extra_space_scm_sym)
/*
Hint the spacing engine how much space to put in.
+
+
+ The pairs are in the format of an interval (ie. CAR < CDR).
*/
column_l ()->set_elt_property (extra_space_scm_sym,
scm_cons (gh_double2scm (pre_space),
gh_double2scm (spring_len)));
column_l ()->set_elt_property (stretch_distance_scm_sym,
- gh_cons (gh_double2scm (dists[0]),
+ gh_cons (gh_double2scm (-dists[0]),
gh_double2scm (stretch_distance)));
}
fifth.transpose (Musical_pitch (2));
fifth.transpose (Musical_pitch (2, -1));
+ /*
+ remove double adds (urg: sus4)
+ */
+ for (int i = add_arr_p->size () - 1; i >= 0 ; i--)
+ {
+ int j = ::find_pitch_i (add_arr_p, (*add_arr_p)[i]);
+ if ((j != -1) && (i != j))
+ {
+ add_arr_p->get (i);
+ }
+ }
+
/*
default chord includes upto 5: <1, 3, 5>
*/
add_arr_p->insert (tonic, 0);
- int highest_trap = trap_i (tonic, add_arr_p->top ());
+ Array<Musical_pitch> tmp = *add_arr_p;
+ int highest_trap = trap_i (tonic, tmp.top ());
if (highest_trap < 5)
- add_arr_p->push (fifth);
+ tmp.push (fifth);
/*
find missing triads
*/
- Array<Musical_pitch> missing_arr = missing_triads_pitch_arr (add_arr_p);
+ Array<Musical_pitch> missing_arr = missing_triads_pitch_arr (&tmp);
+ if (highest_trap < 5)
+ missing_arr.push (fifth);
/*
- if additions include 4, assume sus4 and don't add third implicitely
+ if additions include some 3, don't add third
*/
Musical_pitch third = tonic;
third.transpose (Musical_pitch (2));
+ if (::find_notename_i (add_arr_p, third) != -1)
+ {
+ int i = ::find_pitch_i (&missing_arr, third);
+ if (i != -1)
+ missing_arr.get (i);
+ }
+
+ /*
+ if additions include 4, assume sus4 and don't add third implicitely
+ C-sus (4) = c f g (1 4 5)
+ */
Musical_pitch sus = tonic;
sus.transpose (Musical_pitch (3));
if (::find_pitch_i (add_arr_p, sus) != -1)
if (i != -1)
missing_arr.get (i);
}
+
+ /*
+ if additions include some 5, don't add fifth
+ */
+ if (::find_notename_i (add_arr_p, fifth) != -1)
+ {
+ int i = ::find_pitch_i (&missing_arr, fifth);
+ if (i != -1)
+ missing_arr.get (i);
+ }
+
/*
complete the list of triads to be added
break;
}
if (j == sub_arr_p->size ())
- pitch_arr_.push (p);
+ pitch_arr_.push (p);
}
pitch_arr_.sort (Musical_pitch::compare);
set_axes(X_AXIS,X_AXIS);
}
+/*
+ Will fuck up in this case.
+
+ X. .
+ X.X .
+ |X .
+ |
+ |
+ |X .
+ |
+ |
+
+
+ Should be smarter.
+ */
void
Dot_column::do_post_processing ()
{
return;
Slice s;
s.set_empty ();
-
+
+ Array<int> taken_posns;
+ int conflicts = 0;
for (int i=0; i < dot_l_arr_.size (); i++)
{
+ for (int j=0; j < taken_posns.size (); j++)
+ if (taken_posns[j] == dot_l_arr_[i]->position_i_)
+ conflicts++;
+ taken_posns.push (dot_l_arr_[i]->position_i_);
s.unite (Slice (dot_l_arr_[i]->position_i_,dot_l_arr_[i]->position_i_));
}
+
+ if (!conflicts)
+ return;
+
int middle = s.center ();
/*
+1 -> off by one
if (Span_req * sp = dynamic_cast<Span_req*> (m))
{
if (sp->span_type_str_ == "slur")
- return true;
+ // return true;
+ return false;
}
return false;
}
TODO
Glissando
*/
-
+#include <math.h>
#include <ctype.h>
#include "lookup.hh"
#include "debug.hh"
/**
Magnification steps. These are powers of 1.2. The numbers are
taken from Knuth's plain.tex: */
-static Real mag_steps[] = {1, 1, 1.200, 1.440, 1.7280, 2.074, 2.488};
+
/**
TODO: THIS IS UGLY. Since the user has direct access to TeX
{
font_h = paper_l->get_var ("font_" + style);
}
-
+
+
+ Real realmag = 1.0;
if (paper_l->scope_p_->elem_b ("magnification_" + style))
{
font_mag = (int)paper_l->get_var ("magnification_" + style);
+ realmag = pow (1.2, font_mag);
}
/*
}
}
- if (font_mag > 1 && font_mag < 7 )
- {
- /* UGH */
- w *= mag_steps[font_mag];
- ydims *= mag_steps[font_mag];
- }
-
if(brace_count)
{
warning (_f ("Non-matching braces in text `%s', adding braces.", text.ch_C()));
}
}
-
- DOUT << "\n" << to_str (w) << "\n";
- m.dim_.x () = Interval (0, w);
+ ydims *= realmag;
+ m.dim_.x () = Interval (0, w*realmag);
m.dim_.y () = ydims;
stem_l_ = 0;
}
- /*
- since ncol_p_ is announced, it already has its grace_scm_sym set, if we're
- in a Grace context.
- */
- if (ncol_p_->get_elt_property (grace_scm_sym) == SCM_BOOL_F)
+
+ bool wegrace = get_property ("weAreGraceContext",0).to_bool ();
+
+ if (!wegrace)
for (int i=0; i < grace_slur_endings_.size(); i++)
grace_slur_endings_[i]->add_column (ncol_p_);
grace_slur_endings_.clear ();
void
Rhythmic_column_engraver::acknowledge_element (Score_element_info i)
{
- if (get_property ("weAreGraceContext",0).to_bool () !=
+ if ((get_property ("weAreGraceContext",0).to_bool () !=
(i.elem_l_->get_elt_property (grace_scm_sym) != SCM_BOOL_F))
+ && !dynamic_cast<Slur*> (i.elem_l_))
return ;
Item * item = dynamic_cast <Item *> (i.elem_l_);
stem_l_ =0;
}
-
-
-
-
ADD_THIS_TRANSLATOR(Rhythmic_column_engraver);
Item* combinations[4][2]={{l,r}, {lb,r}, {l,rb},{lb,rb}};
- for (int i=0; i < 4; i++)
+ for (int j=0; j < 4; j++)
{
- Score_column * lc = dynamic_cast<Score_column*> (combinations[i][0]);
- Score_column *rc = dynamic_cast<Score_column*> (combinations[i][1]);
+ Score_column * lc = dynamic_cast<Score_column*> (combinations[j][0]);
+ Score_column *rc = dynamic_cast<Score_column*> (combinations[j][1]);
if (!lc || !rc)
continue;
}
s.distance_f_ = left_distance;
- if (!lc->musical_b () || !rc->musical_b ())
+ /*
+ Only do tight spaces *after* barlines, not before.
+
+ We want the space before barline to be like the note
+ spacing in the measure.
+ */
+ if (!lc->musical_b ())
s.strength_f_ = non_musical_space_strength;
Real right_dist = 0.0;
if (next_hint != SCM_BOOL_F)
{
next_hint = SCM_CADR(next_hint);
- right_dist += gh_scm2double (next_hint);
+ right_dist += - gh_scm2double (next_hint);
}
else
{
stretch_dist += left_distance;
if (next_stretch_hint != SCM_BOOL_F)
- {
- // see regtest spacing-tight
- // stretch_dist += gh_scm2double (SCM_CADR (next_stretch_hint));
- }
+ // see regtest spacing-tight
+ stretch_dist += - gh_scm2double (SCM_CADR (next_stretch_hint));
else
stretch_dist += right_dist;
Direction
Stem::get_default_dir () const
{
- return (get_center_distance (UP) >
- get_center_distance (DOWN))
- ? DOWN
- : UP;
+ int du = get_center_distance (UP);
+ int dd = get_center_distance (DOWN);
+
+ if (sign (dd - du))
+ return Direction (sign (dd -du));
+
+ return Direction (int(paper_l ()->get_var ("stem_default_neutral_direction")));
}
Direction
\translator{\RhythmicStaffContext}
VoiceContext = \translator {
\type "Engraver_group_engraver";
+ dynamicPadding = "5.0";
\consists "Dynamic_engraver"; % must come before text_engraver.
\name Voice ;
% ugh. Order matters here.
\consists "Melisma_engraver";
+ textScriptPadding = "3.0";
\consists "Text_engraver";
\consists "Script_engraver";
\consists "Script_column_engraver";
--- /dev/null
+
+% ledger.ly
+
+hsize = 11.0 \in;
+vsize = 17.0 \in;
+
+
--- /dev/null
+% letter.ly
+
+hsize = 8.5 \in;
+vsize = 11.0 \in;
+
+
Dis = \musicalpitch { -2 1 1 }
Disis = \musicalpitch { -2 1 2 }
Eses = \musicalpitch { -2 2 -2 }
+ Eeses = \musicalpitch { -2 2 -2 }
Es = \musicalpitch { -2 2 -1 }
+ Ees = \musicalpitch { -2 2 -1 }
E = \musicalpitch { -2 2 0 }
Eis = \musicalpitch { -2 2 1 }
Eisis = \musicalpitch { -2 2 2 }
staffheight = 11.0\pt;
% ugh see table11 for sizes
- quartwidth = 3.63\pt;
- wholewidth = 5.45\pt;
+ quartwidth = 3.63 \pt;
+ wholewidth = 5.45 \pt;
font_large = 8.;
font_Large = 6.;
font_number = 4.;
font_dynamic = 10.;
font_mark = 6.;
-
+ magnification_dynamic = -4.0;
-1=\font "feta11"
-2=\font "feta11"
0=\font "feta11"
% relative strength of space following tprefatory matter, and inline clefs.
-non_musical_space_strength = 40.0;
+non_musical_space_strength = 8.0;
%If columns do not have spacing information set, set it to this much
loose_column_distance = 2.0 * \interline;
+% if stem is on middle line, choose this direction.
+stem_default_neutral_direction = 1.0;
\include "engraver.ly";
STEPMAKE_TEMPLATES=metafont metapost install install-out
-EXTRA_DIST_FILES += README feta.mp
-
-# wtf is feta.mp ?
+EXTRA_DIST_FILES += README
FET_FILES = $(wildcard feta[0-9]*.mf)
$(PYTHON) $(buildscripts)/mf-to-table.py --package=$(topdir) --outdir=$(outdir) --dep $(outdir)/$(<F:.log=.dep) --afm $(outdir)/$(<F:.log=.afm) --tex $(outdir)/$(<F:.log=.tex) $<
localclean:
- rm -f mfplain.mem mfplain.log
+ rm -f mfplain.mem mfplain.log mpout.log
def breapth_endchar =
scantokens extra_endchar;
if proofing > 0: makebox_with_breapth(proofrule); fi
-% chardx := 10*(w + b);
+ chardx := (w + b); %what the hack is chardx
shipit;
endgroup
enddef;
else:
% input feta-bolletjes;
% input feta-banier;
- input feta-eindelijk;
+% input feta-eindelijk;
% input feta-klef;
% input feta-toevallig;
% input feta-schrift;
Midi_parser::get_u (int n)
{
assert (n <= (int)sizeof(int));
- return String_convert::bin2_i (get_str (n));
+ return String_convert::bin2_u (get_str (n));
}
String
\paper {
\translator { \OrchestralPartStaffContext }
- \translator { \ScoreContext
- skipBars = 1;
- }
+ \translator { \VoiceContext beamAuto=0; }
+ \translator { \ScoreContext skipBars = 1; }
castingalgorithm = \Wordwrap;
-
}
\$strijkers
>
\paper{
- % Give hara-kiri something to do...
- % URG fixme Score+HaraKiri!
linewidth = 130.0\mm;
+ \translator { \VoiceContext beamAuto=0; }
+ \translator { \HaraKiriStaffContext }
\translator { \OrchestralScoreContext }
}
\midi{ \tempo 4 = 160; }
fis4-. r r2 | r1 | g4-. r r2 | g4-. r r2 | R1 *5 |
%20
r2 r4 g,4-. |
- R1*6 | r4 g'\f r2 | R1*5 | as1\ff %~ |
+ R1*6 | r4 g'\f r2 | R1*6 | as1\ff %~ |
%35
}
c4-. r r2 | r1 | es4-. r r2 | d,4-. r r2 | R1 *4 |
r2 r2 |
%20
- r2 r4 b4-. | R1*6 | r4 c r2 | R1*5 | c1 % ~ |
+ r2 r4 b4-. | R1*6 | r4 c r2 | R1*6 | c1 % ~ |
%35
}
[d8-"cresc." d-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
[d8 d-.] es4. es8-. d4 ~ |
- [d8 d-.] es4. es8-. d4 |
- fis,2:\ff fis4: g: |
+ [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
[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: |
+ [g8 g-.] as4. as8-. g4 (|
+ )b,2:16\ff b4: c: | g'2: g: |
%214
b,2:16\ff b4: c: | g'2: g: |
e2:16\ff e4: f: | b,: c: b: c: |
\include "viola-1.ly"
\include "viola-2.ly"
-$viola_staff = \context Staff = violai <
- \property Staff.midiInstrument = "viola"
- \property Staff.instrument = "Viola"
- \property Staff.instr = "Vla."
- \clef "alto";
- \notes \context Voice=one <
- \global
- \$viola1
- \$viola2
- >
+$viola_staff = \context GrandStaff = viola <
+ \$viola1_staff
+ \$viola2_staff
>
\score{
\$viola_staff
- \include "coriolan-part-paper.ly"
+ %%\include "coriolan-part-paper.ly"
+ \paper{
+ castingalgorithm = \Wordwrap;
+ \translator { \VoiceContext beamAuto=0; }
+ \translator { \HaraKiriStaffContext }
+ % \translator { \ScoreContext skipBars = 1; }
+ \translator { \OrchestralScoreContext skipBars = 1; }
+ }
\midi{ \tempo 4 = 160; }
}
[a8 bes-.] bes4. bes8-. bes4~|
[bes8 bes-.] bes4. bes8-. bes4~|
[bes8 c-.] c4. c8-. c4~|
- [c8 d-.] d4. d8-. d4~|
- es2:16\ff es4: d: |
+ [c8 d-.] d4. d8-. d4(|
+ )es2:16\ff es4: d: |
%85
fis: g: fis: g: |
es2: es4: d: |
%185
[g(f' d f][g f d )g,~] |
[g(e' c d][g e c )g~] |
- [g(d' b d][g d b )g~] |
- e2\ff d' | cis a ~ |
+ [g(d' b d][g d b )g(] |
+ )e2\ff d' | cis a ~ |
%190
[a8( f' d f][a f d )a!~] |
[a( e' cis e][a e c )a!~] |
\header {
-title = "Stille Nacht";
-subtitle = "(Silent Night)";
-filename = "stille.ly";
-enteredby = "Peter Chubb";
-composer = "Franz X. Gruber";
-poet = "Joseph Mohr";
+ title = "Stille Nacht";
+ subtitle = "(Silent Night)";
+ filename = "stille.ly";
+ enteredby = "Peter Chubb";
+ composer = "Franz X. Gruber";
+ poet = "Joseph Mohr";
}
\version "1.1.52";
+%{
+ Note: there are other verses, but the three here seem to be
+ the most commonly sung ones.
+ I don't know who did the translation or the arrangement.
+%}
+
global=\notes {
- \time 6/4;
- \key Bes;
+ \time 6/4;
+ \key Bes;
+ \skip 1.*12;
+ \bar "|.";
}
sop=\notes \relative f' {
+ \property Voice . articulationScriptVerticalDirection = \up
%1
- f4. ( ) g8 f4 d2. |
- f4. ( ) g8 f4 d2 r4 |
- c'2 c4 a2 r4 |
- bes2 bes4 f2. |
+ f4. ( ) g8 f4 d2. |
+ f4. ( ) g8 f4 d2 r4 |
+ c'2 c4 a2 r4 |
+ bes2 bes4 f2. |
%5
- g2 g4 bes4.( )a8 g4 |
- f4.()g8 f4 d2 r4 |
- g2 g4 bes4.( )a8 g4 |
- f4.()g8 f4 d2 r4 |
+ g2 g4 bes4.( )a8 g4 |
+ f4.()g8 f4 d2 r4 |
+ g2 g4 bes4.( )a8 g4 |
+ f4.()g8 f4 d2 r4 |
%9
- c'2 c4 es4.()c8 a4 |
- bes2.~ ( <bes2-- )d2-- > r4 |
- bes4 ( )f d f4.( )es8 c4 |
- bes2. ~ bes2 r4 \bar "|.";
+ c'2 c4 es4. c8 a4 |
+ bes2. ( < ~bes2-- )d2-- > r4 |
+ bes4 ( )f d f4.( )es8 c4 |
+ bes2. ~ bes2 r4
}
alt=\notes\relative c' {
+ \property Voice . articulationScriptVerticalDirection = \down
%1
- d4. es8 d4 bes2. |
- d4. es8 d4 bes2 r4 |
- es2 es4 ges2 r4 |
- f2 es4 d2. |
+ d4. es8 d4 bes2. |
+ d4. es8 d4 bes2 r4 |
+ es2 es4 ges2 r4 |
+ f2 es4 d2. |
%5
- es2 es4 es4. f8 es4 |
- d4. es8 d4 bes2 r4 |
- es2 es4 es4. f8 es4 |
- d4. es8 d4 c( )bes r4 |
+ es2 es4 es4. f8 es4 |
+ d4. es8 d4 bes2 r4 |
+ es2 es4 es4. f8 es4 |
+ d4. es8 d4 c( )bes r4 |
%9
- es4( )f g a4. a8 ges4|
- f2.~ e!2-- r4 |
- d2 bes4 d4. c8 c4 |
- bes2. ~ bes2 r4 \bar "|.";
+ es4( )f g a4. a8 ges4|
+ f2.( )e!2-- r4 |
+ d2 bes4 d4. c8 c4 |
+ bes2. ~ bes2 r4
}
ten=\notes\relative c' {
- bes2 bes4 f2. |
- bes2 a4 f2 r4 |
- a2 a4 c2 r4 |
- bes2 a4 f2 ( ) bes4 |
+ \property Voice . articulationScriptVerticalDirection = \up
+
+ bes2 bes4 f2. |
+ bes2 a4 f2 r4 |
+ a2 a4 c2 r4 |
+ bes2 a4 f2 ( ) bes4 |
%5
- bes2 bes4 g4. a8 bes4 |
- bes4. bes8 bes4 f2 r4 |
- bes2 bes4 g4. a8 bes4 |
- bes4. bes8 bes4 f2 r4 |
+ bes2 bes4 g4. a8 bes4 |
+ bes4. bes8 bes4 f2 r4 |
+ bes2 bes4 g4. a8 bes4 |
+ bes4. bes8 bes4 f2 r4 |
%9
- g2 bes4 c4. c8 c4 |
- bes2. ~ g2-- r4 |
- bes2 g4 a4. bes8 a4 |
- bes2. ~ bes2 r4 \bar "|.";
+ g2 bes4 c4. c8 c4 |
+ bes2. ( ) g2-- r4 |
+ bes2 g4 a4. bes8 a4 |
+ bes2. ~ bes2 r4
}
bass=\notes\relative c {
+ \property Voice . articulationScriptVerticalDirection = \down
%1
- bes2 bes4 bes2. |
- bes2 bes4 bes2 r4 |
- f'2 f4 es2 r4 |
- d2 c4 bes2. |
+ bes2 bes4 bes2. |
+ bes2 bes4 bes2 r4 |
+ f'2 f4 es2 r4 |
+ d2 c4 bes2. |
%5
- es2 es4 es2 es4 |
- bes4. bes8 bes4 bes2 r4 |
- es2 es4 es4. es8 es4 |
- bes4. bes8 bes4 bes2 r4 |
+ es2 es4 es2 es4 |
+ bes4. bes8 bes4 bes2 r4 |
+ es2 es4 es4. es8 es4 |
+ bes4. bes8 bes4 bes2 r4 |
%9
- c4 d es f4. f8 es4 |
- d2. ~ c2-- r4 |
- f2 f4 f4. g8 a4 |
- bes2. ~ bes2 r4 \bar "|.";
-}
-
-chords=\lyrics{
- "B\\textflat"1 ""2
- "B\\textflat maj7"1 ""2
- "F7"2. "E\\textflat dim"2. |
- "B\\textflat /D"2 "Cm7"4 "B\\textflat"2. |
- "E\\textflat"1 ""2 |
- "B\\textflat"1 ""2 |
- "E\\textflat"1 ""2 |
- "B\\textflat"1 ""2 |
- "Cm "4 "Gm7sus4/D "4 "Cm/E\\textflat "4 "F7"2 "E\\textflat dim"4 |
- "B\\textflat /D"2. "C9"2 ""4 |
- "B\\textflat /F"2. "F7"2. |
- "B\\textflat"2 ""2 ""2
+ c4 d es f4. f8 es4 |
+ d2. ( ) c2-- r4 |
+ f2 f4 f4. g8 a4 |
+ bes2. ~ bes2 r4
+}
+
+harm=\chords{
+ \property Score.chordInversion = 1
+
+ bes1. |
+ bes-7+ |
+ f2.-7 es-dim |
+ bes2/d c4-m7 bes2. |
+ es1. |
+ bes1. |
+ es1. |
+ bes1. |
+ c4-m
+ g-m7.4/d % should be Gm7sus4
+ c-m/es f2-7 es4-dim |
+ bes2./d c2.-9 |
+ bes2./f f-7 |
+ bes1.
}
v1 = \lyrics {
- Stil-2 le4 Nacht,2. hei-4. li-8 ge4 Nacht,2.
- Al-2 les4 schl\"aft,2. ein-2 sam4 wacht2.
- Nur2 das4 trau-2 te,4 hoch-4. heil8 ige4 Paar,2.
- Hold-2 er4 Knabe2 im4 lock-4. i-8 gen4 Haar2.
- Schlaf2 in4 himm-4. li-8 scher4 Ruh'!2 - -
- Schlaf2 in4 himm-4. li-8 scher4 Ruh'!2 - -
+ Stil2 -- le4 Nacht,2. hei4. -- li8 -- ge4 Nacht,2.
+ Al2 -- les4 schl\"aft,2. ein2 -- sam4 wacht2.
+ Nur2 das4 trau2 -- te,4 hoch4. -- heil8 ige4 Paar,2.
+ Hold2 -- er4 Knabe2 im4 lock4. -- i8 -- gen4 Haar2.
+ Schlaf2 in4 himm4. -- li8 -- scher4 Ruh'!1 __ ""2
+ Schlaf2 in4 himm4. -- li8 -- scher4 Ruh'!1 __ ""2
}
+
v2 = \lyrics {
- Stil-2 le4 Nacht,2. hei-4. li-8 ge4 Nacht,2.
- Hir-2 ten4 erst2. kund2 ge-4 macht2.
- Durch2 der4 En-2 gel4 Ha-4. lle-8 lu4 ja2.
+ Stil2 -- le4 Nacht,2. hei4. -- li8 -- ge4 Nacht,2.
+ Hir2 -- ten4 erst2. kund2 ge4 -- macht2.
+ Durch2 der4 En2 -- gel4 Ha4. -- lle8 -- lu4 ja2.
T\"ont2 es4 laut2 von4 fern2 und4 nah:2.
- "``Christ,"2 der4 Ret-4. ter,8 ist4 "da!''"2 - -
- "``Christ,"2 der4 Ret-4. ter,8 ist4 "da!''"2 - -
+ "``Christ,"2 der4 Ret4. -- ter,8 ist4 "da!''"1 __ ""2
+ "``Christ,"2 der4 Ret4. -- ter,8 ist4 "da!''"1 __ ""2
}
v3 = \lyrics {
- Stil-2 le4 Nacht,2. hei-4. li-8 ge4 Nacht,2.
- Go-2 ttes4 Sohn,2. o-2 wie4 lacht2.
- Lieb'2 aus4 dei-2 nem4 g\"ott-4. li-8 chen4 Mund,2.
- Da2 uns4 schlägt2 die4 ret-2 tende4 Stund'.2.
- Christ,2 in4 Dei-4. ner8 Ge-4 burt!2 - -
- Christ,2 in4 Dei-4. ner8 Ge-4 burt!2 - -
+ Stil2 -- le4 Nacht,2. hei4. -- li8 -- ge4 Nacht,2.
+ Go2 -- ttes4 Sohn,2. o2 -- wie4 lacht2.
+ Lieb'2 aus4 dei2 -- nem4 g\"ott4. -- li8 -- chen4 Mund,2.
+ Da2 uns4 schlägt2 die4 ret2 -- tende4 Stund'.2.
+ Christ,2 in4 Dei4. -- ner8 Ge4 -- burt!1 __ ""2
+ Christ,2 in4 Dei4. -- ner8 Ge4 -- burt!1 __ ""2
}
v1e = \lyrics {
- Sil-2 ent4 night,2. Ho-2 ly4 night,2.
+ Si2 -- lent4 night,2. Ho2 -- ly4 night,2.
All2 is4 calm,2. all2 is4 bright,2.
- 'Round2 yon4 Vir-2 gin4 Mo-4. ther8 and4 Child2.
- Ho-2 ly4 In-4. fant8 so4 ten-4. der8 and4 mild,2.
- Sleep2 in4 hea-4. ven-8 ly4 peace,2 - -
- Sleep2 in4 hea-4. ven-8 ly4 peace.2 - -
+ 'Round2 yon4 Vir2 -- gin4 Mo4. -- ther8 and4 Child2.
+ Ho2 -- ly4 In4. -- fant8 so4 ten4. -- der8 and4 mild,2.
+ Sleep4. __ ""8 in4 hea4. -- ven-8 ly4 peace,1 __ ""2
+ Sleep4. __ ""8 in4 hea4. -- ven-8 ly4 peace.1 __ ""2
}
+
v2e = \lyrics {
- Si-2 lent4 night,2. Ho-2 ly4 night,2.
- Shep-2 herds4 quake2. at2 the4 sight,2.
- Glo-2 ies4 stream2 from4 hea-4. ven8 a-4 far,2.
- Hea-2 v'nly4 hosts2 sing4 "``A-"4. lle-8 lu-4 ia;2.
- Christ2 the4 Sa-4. viour8 is4 born,2.
- Christ2 the4 Sa-4. viour8 is4 "born.''"2.
+ Si2 -- lent4 night,2. Ho2 -- ly4 night,2.
+ Shep2 -- herds4 quake2. at2 the4 sight,2.
+ Glo2 -- ries4 stream4. __ ""8 from4 hea4. -- ven8 a4 -- far,2.
+ Hea2 -- v'nly4 hosts4. __ ""8 sing4 "``A"4. -- lle8 -- lu4 -- ia;2.
+ Christ4. __ ""8 the4 Sa4. -- viour8 is4 born,1 __ ""2
+ Christ4. __ ""8 the4 Sa4. -- viour8 is4 "born.''"1 __ ""2
}
v3e = \lyrics {
- Si-2 lent4 night,2. Ho-2 ly4 night,2.
+ Si2 -- lent4 night,2. Ho2 -- ly4 night,2.
Son2 of4 God,2. love's2 pure4 light2.
- Ra-2 diant4 beams4. from8 Thy4 ho-4. ly8 face,2.
- With2 the4 dawn2 of4 sa-4. ving8 grace2.
- Je-2 sus,4 Lord,4. at8 Thy4 birth,2.
- Je-2 sus,4 Lord,4. at8 Thy4 birth.2.
+ Ra2 -- diant4 beams4. from8 Thy4 ho2 -- ly4 face,2.
+ With2 the4 dawn4. __ ""8 of4 sa2 -- ving4 grace2.
+ Je2 -- sus,4 Lord,4. at8 Thy4 birth,1 __ ""2
+ Je2 -- sus,4 Lord,4. at8 Thy4 birth.1 __ ""2
}
upper= \notes {
\context Staff = upper {
- \clef "treble"; \global
+ \clef "treble";
\context Staff <
+ \global
{ \voiceone \sop }
{ \voicetwo \alt }
>
lower = \notes {
\context Staff = lower {
- \clef "bass"; \global
+ \clef "bass";
\context Staff <
+ \global
{ \voicethree \ten }
{ \voicefour \bass }
>
}
}
+GermanWords=\context Lyrics=upper <
+ \v1
+ \v2
+ \v3
+>
+
+EnglishWords=\context Lyrics=upper <
+ \v1e
+ \v2e
+ \v3e
+>
+
\score {
- \context ChoirStaff
- <
- { \context Lyrics = top \chords }
- \upper
- { \context Lyrics = upper \v1 }
- { \context Lyrics = upper \v2 }
- { \context Lyrics = upper \v3 }
- \lower
- >
+ \context ChoirStaff <
+ \context ChordNames \harm
+ \upper
+% \EnglishWords
+ \GermanWords
+ \lower
+ >
+ \paper { % fit onto single A4 page
+ textheight=290.0\mm;
+ indent=0.0\mm;
+ }
+ \midi{
+ }
}
+
+pl 79
+ - empty sed script fix for aix
+
+pl 78
+ - yodl mode, mp fixes
+
pl 77
- mfmode
PACKAGE_NAME=StepMake
MAJOR_VERSION=0
MINOR_VERSION=1
-PATCH_LEVEL=78
+PATCH_LEVEL=79
MY_PATCH_LEVEL=
# use the above to send patches, always empty for released version:
-# urg
-# i've got no idea what this scaling could be for, on both sides...
-# it seems that 'low_res', which should be all we ever need according
-# to the metapost mfplain guru, really does 200dpi, iso 600dpi (minimun)
-# -$(METAPOST) "&mfmp \mode=ljfour; \mag=100.0; batchmode; input $<"
-# -$(METAPOST) "&mfplain \mode=lowres; \mag=100.0; batchmode; input $<"
-
$(outdir)/%.0: %.mf mfplain.mem
-$(METAPOST) "&mfplain \mode=lowres; \mag=1.0; nonstopmode; input $<"
-
-
-mfplain.mem: mfplain.ini
- $(INIMETAPOST) mfplain.ini
+MFPLAIN_MP=/usr/share/texmf/metapost/base/mfplain.mp
+mfplain.mem: $(MFPLAIN_MP)
+ $(INIMETAPOST) -interaction=nonstopmode $(MFPLAIN_MP) dump
$(outdir)/%.pfa: $(outdir)/%.0
rm -f $(basename $(@F)).[0-9]*
rm -f $(basename $<).log $(basename $<).tfm
-
-
-#dokkum:~/usr/src/lilypond/mf$ inimpost /usr/share/texmf/metapost/base/mfplain.mp
-#[....] \dump
-
# for all FILE in AT_FILES:
# substitute occurrences of @FILE@ with contents $(at-dir)BLA$(at-ext)
-sed-atfiles = -e '' $(foreach i, $(AT_FILES), \
+sed-atfiles = -e '\#' $(foreach i, $(AT_FILES), \
-e '/@$i@/r $(at-dir)$i$(at-ext)' -e 's%@$i@%%g')
# for all VAR in ATVARIABLES
# substitute occurrences of @VAR@ with $(VAR)
-sed-atvariables = -e '' $(foreach i, $(ATVARIABLES), -e 's!@$i@!$($i)!g')
+sed-atvariables = -e '\#' $(foreach i, $(ATVARIABLES), -e 's!@$i@!$($i)!g')
# these are obsolete
# use ATVARIABLES