When invoked with a filename that has no extension, LilyPond will try
-adding `@file{.ly}' as an extension first, then `@file{.fly}' and
-finally `@file{.sly}' extension. If the filename ends with
-`@file{.fly}', LilyPond processes the file as music using
-`@file{init.fly}'. In this case, LilyPond does something like:
-
-@quotation
-
-@example
-\score @{
- \notes\relative c @{
-1 \input "yourfile.fly"
- @}
- \paper@{@}
- \midi@{@}
-@}
-@end example
-
-@end quotation
-
-The result of `@file{.sly}' is similar except that a single unjustified
-line is produced.
+adding `@file{.ly}' as an extension first.
If you invoke LilyPond with a file `@file{foo.}@var{ext}' that doesn't
have the `@file{.ly}' extension, then LilyPond will look for a file
Beaming can be generated automatically; see section XREF-autobeam [FIXME].
+[OUTDATED, FIXME]
+
To place tremolo marks
@cindex tremolo beams
between two notes, begin
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ c' d e f g a b c
+
+ % A simple scale in Mudela.
+ %
+ % Type:
+ %
+ % ly2dvi example-1
+ % xdvi example-1 # or your dvi viewer here
+ %
+ % For more elaborate examples see twinkle.ly, input/* and mutopia/*.
+ %
+ % A docmument on Mudela is under construction: Documentation/tex/mudela.doc
+ % (available as .ps from the website too).
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ a''2 ~ c4( [e8 )e] [a,16 a a a]
+
+ % Some beamed and slurred notes of different taste in Mudela.
+ %
+ % Type:
+ %
+ % ly2dvi example-2
+ % xdvi example-2 # or your dvi viewer here
+ %
+ % For more elaborate examples see twinkle.ly, input/* and mutopia/*.
+ %
+ % A docmument on Mudela is under construction: Documentation/tex/mudela.doc
+ % (available as .ps from the website too).
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
}
\translator {
\LyricsContext
+ }
+ \translator {
+ \LyricsVoiceContext
\consists "Bar_engraver";
+
}
}
\midi {}
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \time 3/4;
+ cisis'' cisis! cisis? |
+ cis cis! cis? |
+ c c! c? |
+ ces ces! ces? |
+ ceses ceses! ceses? |
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ c''4 c4 cis4 cis [c8 c \clef "bass"; f,, f]
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \time 4/4;
+ g''1 a2 b4. c8
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \time 4/4;
+ g''1 a2 b4. c8
+ \repeat "volta" 2 { a4 b c d } \alternative { { c c c c } { d2 d4 [d8 d] } }
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ c'1:16
+ \stemup
+ c4:8 c4:16 [c8:16 c:] [c,8:16 c'':]
+ \stemboth
+ [c,,8:16 c'':]
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % beam-control.fly
+
+ % from upper staffline (position 4) to centre (position 0)
+ \property Voice.beamVerticalPosition = #4
+ \property Voice.beamHeight = #-4
+ [c'8 c]
+
+ % from center to one above centre (position 2)
+ \property Voice.beamVerticalPosition = #0
+ \property Voice.beamHeight = #2
+ [c c]
+
+ % normal beam-algorithm
+ \property Voice.beamHeight = ##f
+ \property Voice.beamVerticalPosition = ##f
+ [c e] [e c]
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ [b''16 a]
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % beams should look the same
+ [d''8 d d] [d g d]
+ c c
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ [f8 f] [f64 f] \grace { [f8 e8] }
+ \property Voice.noStemExtend = ##t
+ [f8 f]
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ [c''16 b] [a b]
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ \relative c'' \context Staff <
+ \context Voice = one {
+ \property Staff.collisionMergeDotted = ##t
+ \stemup
+ [c8 f g a]
+ }
+ \context Voice = two {
+ \stemdown c,4. f8
+
+ }>
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \time 6/8;
+ d''4. b <b4. c d e> <f g a b>
+ <g b d> <c, g' d' a'>
+
+
+ \context Staff <
+ \context Voice = VA { \stemup f'' <b c> r4. }
+ \context Voice = VB { \stemdown b, <a b> r4. }
+ >
+
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ c''4 \p c \ff c^\ff
+ \property Voice.dynamicPadding = 10
+ c \p \< \! c \ff\> c \!c-\p
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ \context Staff <
+ \context Voice = VA {
+ \property Voice.forceHorizontalShift = #0.1
+ \stemup
+ \property Voice.horizontalNoteShift=1
+ <g' d'>
+ }
+
+ \context Voice = VB {
+ \stemdown
+ \property Voice.horizontalNoteShift=1
+ \property Voice.forceHorizontalShift = #-0.1
+ <bes f'>
+ }
+ >
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ c4 \grace { [d16 d16] }
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ \context Staff <
+ \context Voice =VA {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 0 g'' }
+ \context Voice =VB {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 1 e }
+ \context Voice =VC {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 2 c }
+ \context Voice =VD {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 3 a }
+ \context Voice =VE {\property Voice.verticalDirection=1 \property Voice.horizontalNoteShift = 4 f }
+ >
+
+
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ [c8 c16 c16]
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % test noStemExtend
+ \context Staff <
+ \context Voice = "a" {
+ f2 f8 g a b
+ \property Voice.noStemExtend = ##t
+ f2 f8 g a b
+ }
+ \context Voice = "b" {
+ c''2 c8 b a g
+ \property Voice.noStemExtend = ##t
+ c2 c8 b a g
+ }
+ >
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \context Staff \notes\relative c''<
+ \context Voice=one {
+ \property Voice.horizontalNoteShift=0
+ \property Voice.verticalDirection=1
+ e4
+ }
+ \context Voice=two {
+ \property Voice.verticalDirection=1
+ \property Voice.horizontalNoteShift=1
+ cis
+ }
+ \context Voice=three {
+ \property Voice.horizontalNoteShift=2
+ \property Voice.verticalDirection=1
+ ais
+ }
+ \context Voice=four {
+ \property Voice.verticalDirection=-1
+ \property Voice.horizontalNoteShift=-1
+ fis
+ }
+ >
+
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ c' c c c | g' g g g \property Staff . numberOfStaffLines = 3
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \context Voice=VoiceOne
+ \property Voice.graceFraction = #(make-moment 1 4)
+ \grace c8 d4 d d d d
+ \property Voice.graceFraction = #(make-moment 1 2)
+ \grace { e16 f e f } d4 d d d d
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ c8 c c ~ c c c c ~ c ~ c ~ c c c
+ %\grace { d16 c16 d16 } c8
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ c'' d e f | \repetitions1*3 |
+ \time 3/4;
+ g4 a b | R2.*2 |
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+ \property Staff.restStyle = "mensural"
+ \emptyText
+ r\longa^"restStyle = \"mensural\"" r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % sharp-major
+ % c g d a e b fis cis
+
+ \key c;
+ c' d e f g a b c
+
+ \key g;
+ g a b c d e fis g
+
+ \key d;
+ d, e fis g a b cis d
+
+ \key a;
+ a b cis d e fis gis a
+
+ \key e;
+ e, fis gis a b cis dis e
+
+ \key b;
+ b cis dis e fis gis ais b
+
+ \key fis;
+ fis, gis ais b cis dis eis fis
+
+ \key cis;
+ cis, dis eis fis gis ais bis cis
+
+ % sharp-minor
+ % a e b fis cis gis dis ais
+
+ \key a\minor;
+ a b c d e f gis a
+
+ \key e\minor;
+ e, fis g a b c dis e
+
+ \key b\minor;
+ b cis d e fis g ais b
+
+ \key fis\minor;
+ fis, gis a b cis d eis fis
+
+ \key cis\minor;
+ cis, dis e fis gis a bis cis
+
+ \key gis\minor;
+ gis ais b cis dis e fisis gis
+
+ \key dis\minor;
+ dis, eis fis gis ais b cisis dis
+
+ \key ais\minor;
+ ais bis cis dis eis fis gisis ais
+
+ % flat-major
+ % c f bes es as des ges ces
+
+ \key f;
+ f, g a bes c d e f
+
+ \key bes;
+ bes, c d es f g a bes
+
+ \key es;
+ es,, f g as bes c d es
+
+ \key as;
+ as, bes c des es f g as
+
+ \key des;
+ des,, es f ges as bes c des
+
+ \key ges;
+ ges, as bes ces des es f ges
+
+ \key ces;
+ ces,, des es fes ges as bes ces
+
+ % flat-minor
+ % a d g c f bes es as
+
+ \key d\minor;
+ d, e f g a bes cis d
+
+ \key g\minor;
+ g, a bes c d es fis g
+
+ \key c\minor;
+ c,, d es f g as b c
+
+ \key f\minor;
+ f, g as bes c des e f
+
+ \key bes\minor;
+ bes, c des es f ges a bes
+
+ \key es\minor;
+ es,, f ges as bes ces d es
+
+ \key as\minor;
+ as, bes ces des es fes g as
+
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ %c''4^|^.^"foo"^"klap"
+ c''4^|^.^"foo"^"klap"^"puk"^\fermata^\stopped
+ c4_|_._"foo"_"klap"_"puk"_\fermata_\stopped
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % to see the magic: uncomment size stuff in init/paper20.ly
+
+ c'4 c4
+
+ \property Voice.fontsize= -2
+ b16 * 1 / 2 (
+ \property Voice.fontsize= 0 )
+ g4 *31/32
+
+ a a g2
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % CASE 3
+ d''4 ( ) b a ( ) e' \break
+ g,( \stemdown ) b \stemboth c ( ) f, \break
+
+ % no adjusting...
+ \stemup [d'8 ( b a] \stemboth ) e' \break
+ \stemup [g,8 ( b d] \stemboth ) c \break
+
+ % still ugly
+ g4 ( b d ) c \break
+
+ %TIES
+ d ~ b a ~ e' \break
+ g, ~ \stemdown b \stemboth c ~ f, \break
+
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ e''4-. f-. d-.
+ c,-. b-. c'''-. d-.
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
-
+\score {
+ \context Voice \notes\relative c {
+
+ g''4 \property Voice.stemLength = #14 g4 \property Voice.stemLength = #3 g4 g,,4
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ \time 12/4; c''4 c c c a f' f, a
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ \context Voice {
+ \property Voice.sparseTies = ##t
+ c'' <c e g> ~ <c e g> }
+
+ }
+ \paper {
+ linewidth=-1.0;
+ }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \property Staff.textEmptyDimension = 1
+ \property Voice.textEmptyDimension = 1
+ \property Staff.timeSignatureStyle = "C"
+ \time 1/1;
+ c''1^"timeSignatureStyle = \"C\""
+ \time 2/2;
+ c1
+ \time 2/4;
+ c2
+ \time 3/4;
+ c2.
+ \time 4/4;
+ c1
+ \time 5/4;
+ c2. c2
+ \time 6/4;
+ c1.
+ \time 3/2;
+ c1.
+ \time 7/4;
+ c1 c2.
+ \time 8/4;
+ c\breve
+ \time 9/4;
+ c2. c2. c2.
+ \break
+ \property Staff.timeSignatureStyle = "old"
+ \time 1/1;
+ c1^"timeSignatureStyle = \"old\""
+ \time 2/2;
+ c1
+ \time 2/4;
+ c2
+ \time 3/4;
+ c2.
+ \time 4/4;
+ c1
+ \time 5/4;
+ c2. c2
+ \time 6/4;
+ c1.
+ \time 3/2;
+ c1.
+ \time 7/4;
+ c1 c2.
+ \time 8/4;
+ c\breve
+ \time 9/4;
+ c2. c2. c2.
+ \time 6/8;
+ c2.
+ \time 9/8;
+ c4. c4. c4.
+ \break
+ \property Staff.timeSignatureStyle = ""
+ \time 1/1;
+ c1^"timeSignatureStyle = \"\""
+ \time 2/2;
+ c1
+ \time 2/4;
+ c2
+ \time 3/4;
+ c2.
+ \time 4/4;
+ c1
+ \time 5/4;
+ c2. c2
+ \time 6/4;
+ c1.
+ \time 3/2;
+ c1.
+ \time 7/4;
+ c1 c2.
+ \time 8/4;
+ c\breve
+ \time 9/4;
+ c2. c2. c2.
+ \break
+ \property Staff.timeSignatureStyle = "1"
+ \time 1/1;
+ c1^"timeSignatureStyle = \"1\""
+ \time 2/2;
+ c1
+ \time 2/4;
+ c2
+ \time 3/4;
+ c2.
+ \time 4/4;
+ c1
+ \time 5/4;
+ c2. c2
+ \time 6/4;
+ c1.
+ \time 3/2;
+ c1.
+ \time 7/4;
+ c1 c2.
+ \time 8/4;
+ c\breve
+ \time 9/4;
+ c2. c2. c2.
+ \break
+ \property Staff.textalignment = \center
+ \property Staff.timeSignatureStyle = "old9/8"
+ \time 1/1;
+ c1^"old9/8"
+ \property Staff.timeSignatureStyle = "old6/8"
+ \time 1/1;
+ c1^"old6/8"
+ \property Staff.timeSignatureStyle = "old6/8alt"
+ \time 1/1;
+ c1^"old6/8alt"
+ \property Staff.timeSignatureStyle = "old9/4"
+ \time 1/1;
+ c1^"old9/4"
+ \property Staff.timeSignatureStyle = "old6/4"
+ \time 1/1;
+ c1^"old6/4"
+ \property Staff.timeSignatureStyle = "old3/2"
+ \time 1/1;
+ c1^"old3/2"
+ \property Staff.timeSignatureStyle = "old4/4"
+ \time 1/1;
+ c1^"old4/4"
+ \property Staff.timeSignatureStyle = "old2/2"
+ \time 1/1;
+ c1^"old2/2"
+ \property Staff.timeSignatureStyle = "old2/4"
+ \time 1/1;
+ c1^"old2/4"
+ \property Staff.timeSignatureStyle = "old4/8"
+ \time 1/1;
+ c1^"old4/8"
+ \property Staff.timeSignatureStyle = "C4/4"
+ \time 1/1;
+ c1^"C4/4"
+ \property Staff.timeSignatureStyle = "C2/2"
+ \time 1/1;
+ c1^"C2/2"
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+
+ % \property Score. measurePosition = #(make-moment -1 4)
+ \partial 4;
+ c''4 c4 c4 c2 c1
+ \cadenzaOn [c8 d e f] [g a b c b c b c]
+ \cadenzaOff
+ c4 c4 c4 c4
+ \property Score. measureLength = #(make-moment 5 4)
+
+ c1 c4
+ c1 c4
+ c4 c4
+ \property Score. measurePosition = #(make-moment -3 8)
+ b8 b b
+ c4 c1
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % btw: this is not how transposing is done in mudela,
+ % this is a transposing performer, i.e. for midi-output only
+ \property Staff.transposing = 0 c
+ \property Staff.transposing = 2 c
+ \property Staff.transposing = 4 c
+ \property Staff.transposing = 5 c
+ \property Staff.transposing = 7 c
+ \property Staff.transposing = 9 c
+ \property Staff.transposing = 11 c
+ \property Staff.transposing = 12 c
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+
+ \times 2/3 { c''8 c c }
+ \times 2/3 { c8 c'' c,, }
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ \property Voice.textEmptyDimension = 1
+ \property Voice.textScriptPadding = 10
+ \property Voice.tupletVisibility = 0
+ \times2/3{c'4^"tupletVisibility = 0" d e} \times2/3{[f8 g a]}
+ \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 1
+ \times2/3{c,4^"tupletVisibility = 1" d e} \times2/3{[f8 g a]}
+ \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 2
+ \times2/3{c,4^"tupletVisibility = 2" d e} \times2/3{[f8 g a]}
+ \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 3
+ \times2/3{c,4^"tupletVisibility = 3" d e} \times2/3{[f8 g a]}
+ \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 4
+ \times2/3{c,4^"tupletVisibility = 4" d e} \times2/3{[f8 g a]}
+ \times2/3{b16 c d} c8 | \break
+
+ \property Voice.tupletDirection = \down
+ \property Voice.tupletVisibility = 0
+ \times2/3{c,4^"tupletDirection = down" d e}
+ \times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 1
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 2
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 3
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 4
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |\break
+
+ \property Voice.tupletDirection = \up
+ \property Voice.tupletVisibility = 0
+ \times2/3{c,4^"tupletDirection = up" d e}
+ \times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 1
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 2
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 3
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
+ \property Voice.tupletVisibility = 4
+ \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % this used to work:
+ % <{\voiceone e}
+ % {\voicetwo c}>
+
+ % now we need:
+ \context Staff
+ <{\voiceone e}
+ {\voicetwo c}>
+
+
+ \version "1.0.21";
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
--- /dev/null
+\score {
+ \context Voice \notes\relative c {
+ % Test of prima/secunda volta brackets in conjunction with
+ % line breaks and special bars.
+
+ c' d e f |
+ \repeat "volta" 2 { g a b c }
+ \alternative { { c b a g a g a g} { f e d c } }
+ \repeat "volta" 2 { g a b c }
+ \alternative { { c b a g \break a g a g} { f e d c } }
+ c' d e f |
+ \repeat "volta" 2 { g a b c }
+ \alternative { { c b a g \break a g a g \break a b a b } { f e d c } }
+ c' d e f |
+ \repeat "volta" 2 { g a b c }
+ \alternative { { c b a g } { f e d c \break a g a g} }
+ c' d e f |
+ \repeat "volta" 2 { g a b c }
+ \alternative { { c b a g a g a g} { f e d c \bar "|.";} }
+
+ }
+ \paper { }
+ \midi { }
+}
\ No newline at end of file
ADD_THIS_TRANSLATOR (Auto_beam_engraver);
+
+/*
+ TODO: remove all references to Timing_engraver; should read properties.
+
+ */
Auto_beam_engraver::Auto_beam_engraver ()
{
stem_l_arr_p_ = 0;
Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
{
if (!timer_l_)
- return;
+ return;
int num;
int den;
(c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-
#include "bar-number-engraver.hh"
-#include "timing-translator.hh"
-#include "timing-engraver.hh"
#include "engraver-group-engraver.hh"
#include "text-item.hh"
+#include "moment.hh"
Bar_number_engraver::Bar_number_engraver()
{
void
Bar_number_engraver::do_process_music ()
{
- Translator *tr = daddy_grav_l ()->get_simple_translator ("Timing_engraver");
- Timing_translator *time = dynamic_cast<Timing_translator*>(tr);
-
// todo include (&&!time->cadenza_b_ )
SCM bn = get_property("currentBarNumber");
-
+ SCM smp = get_property ("measurePosition");
+ Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+
if (gh_number_p (bn) &&
- !time->measure_position () && now_mom () > Moment (0))
+ !mp && now_mom () > Moment (0))
{
create_items (0);
(c) 1998--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-#include "timing-engraver.hh"
#include "engraver-group-engraver.hh"
#include "beam-engraver.hh"
#include "musical-request.hh"
#include "beam.hh"
#include "stem.hh"
#include "warn.hh"
-#include "timing-translator.hh"
#include "beaming.hh"
#include "score-engraver.hh"
prev_start_req_ = reqs_drul_[START];
beam_p_ = new Beam;
- Translator * t = daddy_grav_l ()->get_simple_translator ("Timing_engraver");
- Timing_engraver *timer = dynamic_cast<Timing_engraver*> (t);
- beam_start_location_ = (t) ? timer->measure_position () : Moment (0);
+ SCM smp = get_property ("measurePosition");
+ Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+
+ beam_start_location_ = mp;
beam_start_mom_ = now_mom();
beam_info_p_ = new Beaming_info_list;
-/*
- chord-tremolo-engraver.cc -- implement Chord_tremolo_engraver
-
+/*
+ new-chord-tremolo-engraver.cc -- implement Chord_tremolo_engraver
+
source file of the GNU LilyPond music typesetter
+
+ (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
- Jan Nieuwenhuizen <janneke@gnu.org>
-*/
-
-#include "timing-translator.hh"
-#include "stem.hh"
+#include "engraver.hh"
#include "beam.hh"
+#include "repeated-music.hh"
+#include "stem.hh"
+#include "note-head.hh"
+#include "engraver-group-engraver.hh"
#include "musical-request.hh"
-#include "misc.hh"
#include "warn.hh"
-#include "score-engraver.hh"
-#include "engraver.hh"
-#include "drul-array.hh"
-#include "timing-engraver.hh"
-#include "beaming.hh"
+#include "misc.hh"
/**
- Generate a beam tremolo. Eat stems.
+ This acknowledges repeated music with "tremolo" style. It typesets
+ a beam.
+
+ TODO:
+
+ - perhaps use engraver this to steer other engravers? That would
+ create dependencies between engravers, which is bad.
+
+ - create dots if appropriate.
- UGH. Derive me from Beam_engraver.
-
*/
+
class Chord_tremolo_engraver : public Engraver
{
+ void typeset_beam ();
public:
VIRTUAL_COPY_CONS(Translator);
-
-
Chord_tremolo_engraver();
+protected:
+ Repeated_music * repeat_;
+ /// moment (global time) where beam started.
+ Moment start_mom_;
+ Moment stop_mom_;
+
+ /// location within measure where beam started.
+ Moment beam_start_location_;
+
+ int note_head_i_;
+
+ Beam * beam_p_;
+ Beam * finished_beam_p_;
+
protected:
virtual void do_removal_processing();
virtual void do_process_music();
virtual void acknowledge_element (Score_element_info);
virtual void do_pre_move_processing();
virtual void do_post_move_processing();
-
-private:
- void typeset_beam ();
- Drul_array<Chord_tremolo_req*> reqs_drul_;
- Chord_tremolo_req* prev_start_req_;
- Beam* beam_p_;
- Beam* finished_beam_p_;
-
- /// location within measure where beam started.
- Moment beam_start_location_;
-
- /// moment (global time) where beam started.
- Moment beam_start_mom_;
- Beaming_info_list * beam_info_p_;
- Beaming_info_list * finished_beam_info_p_;
};
-ADD_THIS_TRANSLATOR (Chord_tremolo_engraver);
-
-Chord_tremolo_engraver::Chord_tremolo_engraver ()
+Chord_tremolo_engraver::Chord_tremolo_engraver()
{
- reqs_drul_[LEFT] = reqs_drul_[RIGHT] = 0;
- beam_p_ = 0;
- finished_beam_p_ = 0;
- prev_start_req_ = 0;
- finished_beam_info_p_=0;
- beam_info_p_ =0;
+ beam_p_ = finished_beam_p_ = 0;
+ repeat_ =0;
+ note_head_i_ = 0;
}
bool
-Chord_tremolo_engraver::do_try_music (Music* m)
+Chord_tremolo_engraver::do_try_music (Music * m)
{
- if (Chord_tremolo_req* b = dynamic_cast <Chord_tremolo_req *> (m))
+ Repeated_music * rp = dynamic_cast<Repeated_music*> (m);
+ if (rp && rp->type_ == "tremolo" && !repeat_)
{
- Direction d = b->span_dir_;
- if (reqs_drul_[d] && !reqs_drul_[d]->equal_b (b))
- return false;
+ Moment l = rp->body_length_mom ();
+ repeat_ = rp;
+ start_mom_ = now_mom ();
+ stop_mom_ = start_mom_ + l;
- if ((d == STOP) && !beam_p_)
- {
- m->warning (_ ("can't find start of chord tremolo"));
- return false;
- }
-
- reqs_drul_[d] = b;
+ // ugh. should generate dots, triplet beams.
+ note_head_i_ = l.den () <? 4;
return true;
}
-
return false;
}
void
Chord_tremolo_engraver::do_process_music ()
{
- if (reqs_drul_[STOP])
- {
- if (!beam_p_)
- reqs_drul_[STOP]->warning (_ ("can't find start of chord tremolo"));
-
- prev_start_req_ = 0;
-
- finished_beam_p_ = beam_p_;
- beam_p_ = 0;
-
- finished_beam_info_p_ = beam_info_p_;
- beam_info_p_ = 0;
- }
-
- if (beam_p_)
- {
- Score_engraver * e = 0;
- Translator * t = daddy_grav_l ();
- for (; !e && t; t = t->daddy_trans_l_)
- {
- e = dynamic_cast<Score_engraver*> (t);
- }
-
- if (!e)
- programming_error ("No score engraver!");
- else
- e->forbid_breaks ();
- }
-
- if (reqs_drul_[START])
+ if (repeat_ && !beam_p_)
{
- if (beam_p_)
- {
- reqs_drul_[START]->warning (_ ("already have a chord tremolo"));
- return;
- }
-
- prev_start_req_ = reqs_drul_[START];
-
beam_p_ = new Beam;
beam_p_->set_elt_property ("chord-tremolo", SCM_BOOL_T);
- Translator * t = daddy_grav_l ()->get_simple_translator ("Timing_engraver");
- Timing_engraver *timer = dynamic_cast<Timing_engraver*> (t);
- beam_start_location_ = (t) ? timer->measure_position () : Moment (0);
- beam_start_mom_ = now_mom();
- beam_info_p_ = new Beaming_info_list;
-
- announce_element (Score_element_info (beam_p_, reqs_drul_[LEFT]));
- }
-}
-void
-Chord_tremolo_engraver::do_post_move_processing ()
-{
- reqs_drul_ [START] = 0;
+
+ SCM smp = get_property ("measurePosition");
+ Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+ beam_start_location_ = mp;
+ announce_element (Score_element_info (beam_p_, repeat_));
+ }
}
void
-Chord_tremolo_engraver::do_pre_move_processing ()
+Chord_tremolo_engraver::do_removal_processing ()
{
typeset_beam ();
+ if (beam_p_)
+ {
+ repeat_->warning (_ ("unterminated chord tremolo"));
+ finished_beam_p_ = beam_p_;
+ typeset_beam ();
+ }
}
void
{
if (finished_beam_p_)
{
- finished_beam_info_p_->beamify ();
- finished_beam_p_->set_beaming (finished_beam_info_p_);
typeset_element (finished_beam_p_);
finished_beam_p_ = 0;
- delete finished_beam_info_p_;
- finished_beam_info_p_ =0;
-
- reqs_drul_[STOP] = 0;
}
}
-void
-Chord_tremolo_engraver::do_removal_processing ()
-{
- typeset_beam ();
- if (beam_p_)
- {
- prev_start_req_->warning (_ ("unterminated chord tremolo"));
- finished_beam_p_ = beam_p_;
- finished_beam_info_p_ = beam_info_p_;
- typeset_beam ();
- }
-}
void
Chord_tremolo_engraver::acknowledge_element (Score_element_info info)
{
if (Stem* s = dynamic_cast<Stem *> (info.elem_l_))
{
- int type_i = prev_start_req_->type_i_;
- s->set_elt_property ("duration-log", gh_int2scm (intlog2 (type_i) - 2));
-
- s->set_beaming (s->flag_i (), LEFT);
- s->set_beaming ( s->flag_i (), RIGHT);
+ int f = s->flag_i ();
+ f = (f > 2) ? f - 2 : 1;
+ s->set_beaming (f, LEFT);
+ s->set_beaming (f, RIGHT);
/*
URG: this sets the direction of the Stem s.
Stem:: type_i () ->first_head ()->get_direction () ->
directional_element (me).set (d);
-
+
+
+ don't understand this comment.
+ --hwn.
*/
SCM d = s->get_elt_property ("direction");
if (s->type_i () != 1)
{
beam_p_->add_stem (s);
Moment stem_location = now_mom () -
- beam_start_mom_ + beam_start_location_;
- beam_info_p_->add_stem (stem_location,
- (r->duration_.durlog_i_ - 2) >? 1);
+ start_mom_ + beam_start_location_;
}
else
{
::warning (s);
}
}
+ if (Note_head *nh = dynamic_cast<Note_head*> (info.elem_l_))
+ {
+ nh->set_elt_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
+ }
+ }
+}
+
+
+void
+Chord_tremolo_engraver::do_post_move_processing ()
+{
+ if (beam_p_ && stop_mom_ == now_mom ())
+ {
+ finished_beam_p_ = beam_p_;
+
+ repeat_ = 0;
+ beam_p_ = 0;
}
}
+
+void
+Chord_tremolo_engraver::do_pre_move_processing ()
+{
+ typeset_beam ();
+}
+
+ADD_THIS_TRANSLATOR(Chord_tremolo_engraver);
+
Beaming_info ();
};
+/*
+ Generate beaming given durations of notes. Beam uses this to
+ set_beaming () for each of its stems.
+*/
struct Beaming_info_list
{
Array<Beaming_info> infos_;
struct Chord_name;
struct Chord_name_engraver;
struct Chord_tremolo_engraver;
-struct Chord_tremolo_req;
struct Clef_change_req;
struct Clef_engraver;
struct Clef_item;
};
+Moment * unsmob_moment (SCM);
+
IMPLEMENT_ARITHMETIC_OPERATOR (Moment, / );
IMPLEMENT_ARITHMETIC_OPERATOR (Moment, + );
IMPLEMENT_ARITHMETIC_OPERATOR (Moment, * );
public:
VIRTUAL_COPY_CONS(Music);
};
-/**
- Start / stop a tremolo beam. */
-class Chord_tremolo_req : public Span_req
-{
-public:
- VIRTUAL_COPY_CONS (Music);
-
- Chord_tremolo_req ();
- virtual void do_print () const;
-
- int type_i_;
-};
/**
Helping req to signal start of a melisma from within a context, and
Scope *default_header_p_;
-
- // JUNKME
- int chord_tremolo_type_i_;
-
int fatal_error_i_;
Sources * source_l_;
int error_level_i_;
My_lily_lexer * lexer_p_;
bool ignore_version_b_;
-
-
Input here_input() const;
void remember_spot();
/// The duration of this piece of music
virtual Moment length_mom () const;
-
+ Moment body_length_mom () const;
Moment alternatives_length_mom () const;
void print() const;
void
Local_key_engraver::do_process_music()
{
- if (time_trans_l_ && !time_trans_l_->measure_position ())
+
+ SCM smp = get_property ("measurePosition");
+ Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+
+ if (!mp)
{
if (!to_boolean (get_property ("noResetKey")) && key_grav_l_)
local_key_= key_grav_l_->key_;
#include "multi-measure-rest.hh"
#include "paper-column.hh"
#include "engraver-group-engraver.hh"
-#include "timing-translator.hh"
#include "bar.hh"
#include "staff-symbol-referencer.hh"
#include "engraver.hh"
#include "moment.hh"
/**
+ The name says it all: make multi measure rests
*/
class Multi_measure_rest_engraver : public Engraver
{
if (busy_span_req_l_ && !mmrest_p_)
{
- Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
- Timing_translator * time = dynamic_cast<Timing_translator*> (tr);
-
mmrest_p_ = new Multi_measure_rest;
Staff_symbol_referencer_interface si (mmrest_p_);
si.set_interface ();
announce_element (Score_element_info (mmrest_p_, busy_span_req_l_));
start_measure_i_
- = gh_scm2int (time->get_property ("currentBarNumber"));
+ = gh_scm2int (get_property ("currentBarNumber"));
}
}
void
Multi_measure_rest_engraver::do_pre_move_processing ()
{
- Moment now (now_mom ());
- Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
- Timing_translator * time = dynamic_cast<Timing_translator*> (tr);
+ SCM smp = get_property ("measurePosition");
+ Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
- if (mmrest_p_ && (now >= start_moment_)
- && !time->measure_position ()
+ if (mmrest_p_ && (now_mom () >= start_moment_)
+ && !mp
&& (scm_ilength (mmrest_p_->get_elt_property ("columns")) >= 2))
{
typeset_element (mmrest_p_);
void
Multi_measure_rest_engraver::do_post_move_processing ()
{
- Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
- Timing_translator * time = dynamic_cast<Timing_translator*> (tr);
-
Moment now (now_mom ());
-
- if (mmrest_p_ && !time->measure_position ())
+
+
+ SCM smp = get_property ("measurePosition");
+ Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+
+ if (mmrest_p_ && !mp)
{
lastrest_p_ = mmrest_p_;
- int cur = gh_scm2int (time->get_property ("currentBarNumber"));
+ int cur = gh_scm2int (get_property ("currentBarNumber"));
lastrest_p_->set_elt_property ("measure-count",
gh_int2scm (cur - start_measure_i_));
mmrest_p_ = 0;
span_dir_ = CENTER;
}
-Chord_tremolo_req::Chord_tremolo_req ()
-{
- type_i_ = 0;
-}
-
-void
-Chord_tremolo_req::do_print () const
-{
-#ifndef NPRINT
- DEBUG_OUT << type_i_;
-#endif
-}
-
void
Text_script_req::do_print () const
{
{
source_l_ = source_l;
lexer_p_ = 0;
- chord_tremolo_type_i_ = 0;
default_duration_.durlog_i_ = 2;
error_level_i_ = 0;
default_duration_ = *d;
}
-void
-My_lily_parser::set_chord_tremolo (int type_i)
-{
- chord_tremolo_type_i_ = type_i;
-}
-
-
-
-
// junk me
Simultaneous_music *
My_lily_parser::get_chord (Musical_pitch tonic,
Real real;
Request * request;
- /* We use SCMs to do strings, because it saves us the trouble of
+ /* We use SCMs to do strings, because it saves us the trouble of
deleting them. Let's hope that a stack overflow doesnt trigger a move
of the parse stack onto the heap. */
SCM scm;
b->span_type_str_ = "beam";
$$ =b;
}
- | '[' ':' unsigned {
- // JUNKME
- if (!is_duration_b ($3))
- THIS->parser_error (_f ("not a duration: %d", $3));
- else
- THIS->set_chord_tremolo ($3);
-
- Chord_tremolo_req* a = new Chord_tremolo_req;
- a->span_dir_ = START;
- // urg
- a->type_i_ = THIS->chord_tremolo_type_i_;
- $$=a;
- }
| ']' {
- /* URG
- */
- if (!THIS->chord_tremolo_type_i_)
- {
- Span_req*b= new Span_req;
- b->span_dir_ = STOP;
- b->span_type_str_ = "beam";
- $$ = b;
- }
- else
- {
- Chord_tremolo_req* a = new Chord_tremolo_req;
- a->span_dir_ = STOP;
- a->type_i_ = THIS->chord_tremolo_type_i_;
-
- // JUNKME.
- THIS->set_chord_tremolo (0);
- $$ = a;
- }
+ Span_req*b= new Span_req;
+ b->span_dir_ = STOP;
+ b->span_type_str_ = "beam";
+ $$ = b;
}
| BREATHE {
$$ = new Breathing_sign_req;
a->articulation_str_ = ly_scm2string ($2);
a->set_spot (THIS->here_input ());
$$ = a;
-
}
;
n->pitch_ = *$1;
n->duration_ = *$4;
- /*
- URG, JUNKTHIS!
- */
- if (THIS->chord_tremolo_type_i_)
- {
- if (n->duration_.plet_b ())
- // urg, burp. what nonsense / silly implementation
- THIS->parser_error (_ ("can't put stem tremolo on tuplet"));
- else
- n->duration_.set_plet (1, 2);
- }
+
n->cautionary_b_ = $3 % 2;
n->forceacc_b_ = $2 % 2 || n->cautionary_b_;
}
Moment
-Repeated_music::length_mom () const
+Repeated_music::body_length_mom () const
{
- Moment m =0;
- if (fold_b_)
- {
- if (repeat_body_p_)
- m += repeat_body_p_->length_mom ();
- }
- else
+ Moment m = 0;
+ if (repeat_body_p_)
{
- Moment beg = (repeat_body_p_) ? repeat_body_p_->length_mom () : Rational(0);
- if (!volta_fold_b_)
- beg *= Rational (repeats_i_);
- m += beg;
+ m = repeat_body_p_->length_mom ();
+ if (!fold_b_ && !volta_fold_b_)
+ m *= Rational (repeats_i_);
}
-
- m += alternatives_length_mom ();
return m;
}
+Moment
+Repeated_music::length_mom () const
+{
+ return body_length_mom () + alternatives_length_mom ();
+}
+
Staff_group_bar_engraver::acknowledge_element (Score_element_info i)
{
Base_span_bar_engraver::acknowledge_element (i);
+
+ /*
+ UGH. This has to go into the backend.
+ */
if (Span_bar * b = dynamic_cast<Span_bar *> (i.elem_l_))
{
SCM gl = b->get_elt_property ("glyph");
#include "score-element-info.hh"
#include "multi-measure-rest.hh"
-
-
ADD_THIS_TRANSLATOR(Timing_engraver);
-
void
Timing_engraver::do_post_move_processing( )
{
#include "global-translator.hh"
#include "multi-measure-rest.hh"
+/*
+ TODO: change the rest of lily, so communication with
+ Timing_translator is only done through properties. This means the
+ class declaration can go here. */
+
bool
Timing_translator::do_try_music (Music*r)
{
\consists "Beam_engraver";
\consists "Auto_beam_engraver";
\include "auto-beam-settings.ly";
- \consists "Chord_tremolo_engraver";
+ \consists "Chord_tremolo_engraver";
\consists "Melisma_engraver";
textScriptPadding = #3.0
\consists "Text_engraver";
LyricsContext = \translator {
\type "Engraver_group_engraver";
\name Lyrics;
- \consists Vertical_align_engraver;%need this for getting folded repeats right.
+ \consists Vertical_align_engraver; %need this for getting folded repeats right.
Generic_property_list = #generic-lyrics-properties
\consists "Property_engraver";
\consistsend "Axis_group_engraver";
\maininput
}
\paper {
- linewidth=-1.0;
+
% indent = 0.0;
}
\midi{ }