From: fred Date: Tue, 26 Mar 2002 22:24:29 +0000 (+0000) Subject: lilypond-1.1.66 X-Git-Tag: release/1.5.59~2218 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c2b7c32dc48b3d855fa7cbb4e4bbb15a6999791d;p=lilypond.git lilypond-1.1.66 --- diff --git a/Documentation/tex/lilypond-regtest.doc b/Documentation/tex/lilypond-regtest.doc index 8286332d3d..5859571740 100644 --- a/Documentation/tex/lilypond-regtest.doc +++ b/Documentation/tex/lilypond-regtest.doc @@ -1,4 +1,4 @@ -% -*-LaTeX-*- +% -*-LaTeX-*- vim:tw=72 \documentclass{article} \title{LilyPond feature test} @@ -49,12 +49,13 @@ tremolo must be parallel to the beam. If the stem is invisible \mudelafile{stem-tremolo.ly} -Abbreviation beams (official naming?) are a kind of repeat symbol. -To avoid confusion, abbreviation beams do not touch the stems, but -leave a gap. Abbreviation beams on half notes are not ambiguous, -and should touch the stems. - -\mudelafile{abbreviation-beam.sly} +Chord tremolos look like beams, but are a kind of repeat symbol. +To avoid confusion, chord tremolo beams do not reach the stems, but +leave a gap. Chord tremolo beams on half notes are not ambiguous, +as half notes cannot appear in a regular beam, and should reach the +stems. + +\mudelafile{chord-tremolo.sly} Beams, stems and noteheads often have communication troubles, since the two systems for y dimensions (1 unit = staffspace, 1 unit = 1 @@ -166,11 +167,12 @@ Folded. This doesn't make sense without alternatives, but it works. Lyrics can be set to a melody automatically. Excess lyrics will be dumped. Lyrics will not be set over rests. You can have melismata either by setting a property melismaBusy, or by setting -automaticMelismas (which will set melismas during slurs). If you want a -different order than first Music, then Lyrics, you must precook a -chord of staffs/lyrics and label those. Of course \verb+\rhythm+ -ignores any other rhythms in the piece. Hyphens and extenders do not -assume anything about lyric lengths, so they continue to work. +automaticMelismas (which will set melismas during slurs and ties). If +you want a different order than first Music, then Lyrics, you must +precook a chord of staffs/lyrics and label those. Of course +\verb+\rhythm+ ignores any other rhythms in the piece. Hyphens and +extenders do not assume anything about lyric lengths, so they continue +to work. \mudelafile{lyric-combine.ly} @@ -182,13 +184,19 @@ inside the staff, and by half spaces outside. Notice that the half and whole rests just outside the staff get ledger lines in different cases. -\mudelafile{rest-collision.ly} +% \m udelafile{rest-collision.ly} Normal collisions. We have support for four voice polyphony, where the middle voices are horizontally shifted in a limited number of cases. \mudelafile{collisions.ly} +In some cases, collisions may be hairy to resolve, or the typesetter +may have special whishes. For those special cases, note shifts can be +set by hand. + +\mudelafile{note-shift.sly} + The number of stafflines of a staff can be set with the property numberOfStaffLines. Ledger lines both on note heads and rests are adjusted. Barlines also are adjusted. diff --git a/Documentation/tex/reference-manual.yo b/Documentation/tex/reference-manual.yo index 836bd1f2f8..a82396c82f 100644 --- a/Documentation/tex/reference-manual.yo +++ b/Documentation/tex/reference-manual.yo @@ -62,7 +62,12 @@ includefile(html-disclaimer.yo-urg) ) -This document describes the the GNU LilyPond input format, which is a + +sect(Overview) + + +This bind(document)footnote(This document was revised for LilyPond +1.2.) describes the the GNU LilyPond input format, which is a language for defining music. We call this language (rather arrogantly) The Musical Definition Language or Mudela, for short.footnote(If anybody comes up with a better name, we'd gladly @@ -70,59 +75,60 @@ take this. Gourlay already uses Musical Description Language, G-Sharp Score Definition Language. ISO standard 10743 defines a Standard Music Description Language. We're not being original here.) -This document was revised for LilyPond 1.2. +Mudela is a language that allows you to +itemize( +it() create musical expressions by combining pitches, durations to +it() output those musical expressions to various formats +it() give those musical expressions and output definitions names, so +you can enter them in manageable chunks. +) -The first aim of Mudela is to define a piece of music, being complete -from both from a musical typesetting, as from a musical performing -point of view. +Mudela aims to be a language that defines a piece of music completely +both for typesetting and for a performance point of view. -The Musical Definition Language (Mudela), has a logical structure, -making use of identifiers, that allows for flexible input, and -definition reuse. See the documentation file file(MANIFESTO), included -with the LilyPond sources for reasons and design considerations. +sect(General syntax) +The percent sign introduces line comments. -sect(Running LilyPond) +The syntax for most constructions follows this pattern: A keyword that +is the name of the construction, followed by a list of items, which is +enclosed in braces, e.g. a paper block looks like this +verb(\paper { + linewidth = 14.0 \cm; % one item + indent = \linewidth / 12.0 ; % another one. +}) +Keywords are prefixed by a backslash. Words without backslashes are +strings, like ``linewidth'' in the above example. When you do an +assigment, the left hand side is a string, the name name of the +identifier you wish to assign to. When you refer to an identifier, +you must put a backslash before the name, like in second item of the +example. -When invoked with a filename that has no extension, LilyPond will try -adding a file(.ly) extension first, then a file(.sly) and then a -file(.ly) extension second. If the filename ends with file(.fly), -LilyPond processes the file as music using file(init.fly). In this -case, LilyPond does something like: COMMENT( +sect(Music expressions) -)verb(\score { - \notes\relative c { - \input "yourfile.fly" - } - \paper{} - \midi{} -}) -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 called -file(init.)var(ext) and process this file. The file -file(init.)var(ext) must contain the code(\maininput) keyword or LilyPond -will not read the user specified file. +Music in mudela is entered as a music expression. Notes, rests, lyric +syllables are music expressions (the atomic expressions), and you can +combine music expressions to form new music expressions. This example +forms a compound expressions out of the quarter code(c) note and a +code(d) note:COMMENT( -When LilyPond processes file(filename.ly) it will produce -file(filename.tex) as output. If file(filename.ly) contains a second -code(\paper) keyword, then LilyPond will produce file(filename-1.tex) -as well. Subsequent code(\paper) keywords will produces sequentially -numbered file names. Several files can be specified; they will each -be processed independently.footnote(Not entirely true: the status of -GUILE is kept). +)verb(\sequential { c4 d4 })COMMENT( +)The meaning of this compound expression is to play the code(c) first, +and then the code(d) (as opposed to playing them simultaneously, for +instance). +We shall first review how to make atomic music expressions, and then +how to make compound expressions. -sect(Syntax) +subsect(Atomic music expressions) +subsect(Composition music expressions) subsect(Basic Mudela) -Mudela is a declarative input format: in a file you can declare items -with identifiers, and instruct LilyPond to typeset music - A Mudela file consists of keywords with arguments and identifier assignments separated by spaces, tabs or newlines. Semicolons are @@ -160,8 +166,7 @@ dit(dimension) Consists of a real followed by one of the dimension keywords: code(\mm), code(\pt), code(\in), or code(\cm). Dimensions are converted immediately to a real which gives the dimension in points, so they can be mixed with reals, but the result is no longer -of type dimension. The keywords that require a dimension -(code(\shape)). +of type dimension. dit(pitch) A pitch is a string which is the name of a pitch. Example: code(a). @@ -237,7 +242,7 @@ verb(foo = \paper{ linewidth = 6.0\in; } \paper{ \foo } }) If code(\foo) is used here without the surrounding code(\paper) then -an error will result. Note however that the following is acceptible +an error will result. Note however that the following is acceptable verb(foo = \notes { ... } \score{ \foo }) It is not necessary to specify code(\notes). @@ -245,7 +250,7 @@ It is not necessary to specify code(\notes). Identifiers can be set equal to integers, reals, strings, music, durations (specified with code(\duration)), note ornaments (specified with code(\script), dynamics commands, or code(:)), note name tables -(specified with code(\notenames), translator definitions, the +(specified with code(\notenames)), translator definitions, the code(\paper) block, the code(\midi) block or the code(\score) block. When identifiers are used for translators, the code(\paper), code(\midi), and code(\score) blocks, they may only be referred to as @@ -622,13 +627,19 @@ Tremolo marks can be printed by a note by adding code(:)[var(length)] after the note. The length must be at least 8. A var(length) value of 8 gives one line across the note stem. If the length is omitted, -then the last value is used, or the value of the code(Abbrev) -property if there was no last value. - +then the last value is used, or the value of the code(abbrev) +property if there was no last value. To place tremolo marks in +between two notes, begin with code([:)var(length) and end with code(]). +The tremolo marks will appear instead of beams. Putting more than two +notes in such a construction will produce odd effects. + mudela(fragment,verbatim,center)( -c'2:8 c':32 c' -)) - + c'2:8 c':32 [:16 e'1 g'] [:8 e'4 f'] +) + +mudela(fragment,verbatim,center)( + c'4:32 [:16 c'8 d'8] +) sect(Other Ways to Enter Pitches) @@ -653,19 +664,32 @@ catalan.ly do re mi fa sol la sid si -d/-s -b) subsect(Relative Pitch Specification) label(relative) -One very common error when entering music is to place notes in the wrong -octave. One way to avoid being confused by large numbers of octave changing -marks is to use -the code(\relative) keyword. -Music which appears within code(\relative) is -interpreted differently. The octave of a note is determined by making it as -close to the previous note as possible. The octave changing marks code(') and -code(,) can then be added to raise or lower this note by octaves. You have to -specify a starting pitch because the first note of a list has no predecessor. +A very common mistake when entering music is to place a note in the wrong +octave. One can easily get confused by the large numbers of octave changing +marks in the music. For most music, a much friendlier way of specifying +a note's octave is by using the Relative Pitch Specification mode, that is +introduced by the code(\relative) keyword. For real world music entry, +Relative mode is being used almost exclusively. + +The octave of notes that appear in code(\relative) mode is calculated +differently: The octave of a note depends on the previous note. +When no octave changing marks are used, the basic interval (without +accidentals) between two notes is always taken to be equal to or smaller +than a quart. The octave changing marks code(') and code(,) can then be +added to raise or lower that interval by octaves. Upon entering +code(\relative) mode, an absolute starting pitch must be specified +that will act as the predecessor of the first note of the following music. + +Thus, entering scales is straightforward + +mudela(fragment,verbatim,center)( +\relative c' { c d e f g a b c c, } +) + +and octave changing marks are used for intervals greater than a quart. mudela(fragment,verbatim,center)( -\relative c'' { c d b c, d b c' d - b c,, d b } +\relative c'' { c g c f, c' a,, e''' } ) When the preceding item is a chord, the first note of the chord is used to @@ -872,9 +896,9 @@ COMMENT( \addlyrics \transpose c'' { c4 d8. e16 f2 } \context Lyrics \lyrics { do4 re mi fa } -) +)COMMENT( -You should use a single rhythm melody, and single rhythm lyrics (a +)You should use a single rhythm melody, and single rhythm lyrics (a constant duration is the obvious choice). If you do not, you will get undesired effects when using multiple stanzas: COMMENT( @@ -1070,12 +1094,6 @@ request identifier containing the fingering `6' (with neutral direction). Since this assignment is possible at top-level and within paper, these are two conflicts. -it() A chord followed by -code(-3) -can be interpreted as a chord substraction, or as the fingering `2' (with -neutral direction) -it() Similarly code(^2) is a conflict. - chord_addition '^' ->? it() If you do a nested repeat, verb ( @@ -1462,8 +1480,7 @@ context is ended as well. So after the third quarter, the code(another) is removed. Almost all music expressions inherit their interpretation context from -their parent. In other words, suppose that the syntax for a music expression is -code(code(\keyword) var(musicexpr1) var(musicexpr2) dots()). +their parent. In other words, suppose that the syntax for a music expression is code(\keyword) var(musicexpr1) var(musicexpr2) dots(). When the interpretation of this music expression starts, the context for var(musicexpr1), var(musicexpr2), etc. that of the total expression. @@ -1631,6 +1648,9 @@ subsubsubsect(Voice properties) description( +dit(code(stemLength)) Set length of stems. Unit is +code(interline)/2, so stemLength defaults to 7. + dit(code(stemLeftBeamCount)) Specify the number of beams to draw on the left side of the next note. Overrides automatic beaming. The value is only used once, and then it is erased. @@ -1703,11 +1723,12 @@ dit(code(slurDash)) Set to 0 for normal slurs, 1 for dotted slurs, and a larger value for dashed slurs. Identifiers code(\slurnormal) and code(\slurdotted) are predefined to set the first two settings. -dit(code(horizontalNoteShift)) Set to 1 to enable LilyPond to shift notes +dit(code(horizontalNoteShift)) Enable LilyPond to shift notes horizontally if they collide with other notes. This is useful when typesetting many voices on one staff. The identifier code(\shift) is -defined to enable this. If there are several voices, every voice must -have a distinct value of this property or no shifting will occur. +defined to enable this. Traditionally, the outer chords (the upmost +and downmost voices), should have no horizontalNoteShift. Voice s + dit(code(forceHorizontalShift)) Force horizontal shift for collision resolution. It overrides automatic collision resolution. @@ -2309,7 +2330,6 @@ COMMENT( The names of these types seem somewhat confusing. ) The engravers for paper output are: description( -dit(code(Abbreviation_beam_engraver)) [FIXME. Broken as of 1.0.?] dit(code(Bar_engraver)) Engraves bar lines. Normally in code(Staff) and code(RhythmicStaff). dit(code(Bar_number_engraver)) Engrave bar numbers. These numbers @@ -2325,6 +2345,7 @@ dit(code(Beam_req_swallow_translator)) Swallows beam requests. In code(LyricVoice). dit(code(Chord_name_engraver)) Engraves chord names. Normally in code(ChordNameVoice) +dit(code(Chord_tremolo_engraver)) dit(code(Clef_engraver)) Engraves the clef symbol. Normally in code(Staff). dit(code(Collision_engraver)) dit(code(Dot_column_engraver)) Engraves dots on dotted notes shifted to the @@ -2393,3 +2414,33 @@ dit(code(Swallow_performer)) ) ) + +sect(Running LilyPond) + + +When invoked with a filename that has no extension, LilyPond will try +adding a file(.ly) extension first, then a file(.sly) and then a +file(.ly) extension second. If the filename ends with file(.fly), +LilyPond processes the file as music using file(init.fly). In this +case, LilyPond does something like: COMMENT( + +)verb(\score { + \notes\relative c { + \input "yourfile.fly" + } + \paper{} + \midi{} +}) +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 called +file(init.)var(ext) and process this file. The file +file(init.)var(ext) must contain the code(\maininput) keyword or LilyPond +will not read the user specified file. + +When LilyPond processes file(filename.ly) it will produce +file(filename.tex) as output. If file(filename.ly) contains a second +code(\paper) keyword, then LilyPond will produce file(filename-1.tex) +as well. Subsequent code(\paper) keywords will produces sequentially +numbered file names. Several files can be specified; they will each +be processed independently.footnote(Not entirely true: the status of +GUILE is kept). diff --git a/NEWS b/NEWS index 8ac7d5e991..a07ce5738a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,25 @@ +pl 65.hwn1 + - refman updates + - added \simultaneous { } , \sequential { } syntax, for +consistency. + +pl 65.jcn2 + - bf: if tie then melisma + +pl 65.uu1 + - bf: squashed 2 sr conflicts in parser. + +pl 64.jcn2 + - stanchen almost without " " hacks + - if tie then melisma..? + - refman updates + - Abbreviation.beam -> Chord_tremolo + - bf: chord tremolo vs beam over rests + - bf: note width for noteless stem + + + +******** pl 64.jcn1 - resurrected abbreviation beam - coriolan fixes diff --git a/input/bugs/auto-melismas.ly b/input/bugs/auto-melismas.ly new file mode 100644 index 0000000000..bafa169559 --- /dev/null +++ b/input/bugs/auto-melismas.ly @@ -0,0 +1,17 @@ +\score{ + \addlyrics + \context Staff { + \notes\relative c''{ c () d r e f } + \notes\relative c''{ c ~ c r c c } + } + { + \context Lyrics \lyrics { foo __ bar baz } + \context Lyrics \lyrics { foo __ bar baz } + } + \paper{ + \translator{ + \VoiceContext + automaticMelismas=1; + } + } +} diff --git a/input/praeludium-fuga-E.ly b/input/praeludium-fuga-E.ly index 214795e22d..896184b5d0 100644 --- a/input/praeludium-fuga-E.ly +++ b/input/praeludium-fuga-E.ly @@ -112,23 +112,34 @@ fugaII_right = \notes \relative c'' { \context Voice = VA { \stemup [b8 fis8] b4 } \context Voice = VB { \stemdown fis2 } > - %{ this chord is usually set like this: - | - x|| - x|| - x| - |x - | - %} - \context Staff < - { \stemup \shiftoff e4 } - { \stemup \shifton cis } - { \stemup \shifton ais } - { \stemdown fis } - > | - %16 - \context Staff < - \context VoiceOne { dis2 dis4 | + + % Wadieuw + \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 + } + > + + %16 + \context Staff < + \context VoiceOne { dis2 dis4 | cis2 cis4 | b4. [cis8 dis e] } \context VoiceThree { \stemup \shifton [b8 fis] b2 ~ | diff --git a/input/test/note-shift.sly b/input/test/note-shift.sly new file mode 100644 index 0000000000..645baea08b --- /dev/null +++ b/input/test/note-shift.sly @@ -0,0 +1,23 @@ +\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 + } +> + diff --git a/lily/melisma-engraver.cc b/lily/melisma-engraver.cc index 434fefbc32..6cae059cce 100644 --- a/lily/melisma-engraver.cc +++ b/lily/melisma-engraver.cc @@ -26,8 +26,10 @@ Melisma_engraver::do_try_music (Music *m ) { if (dynamic_cast(m)) { - Scalar s (get_property ("melismaBusy", 0)); - return s.to_bool (); + Scalar plain (get_property ("melismaBusy", 0)); + Scalar slur (get_property ("slurMelismaBusy", 0)); + Scalar tie (get_property ("tieMelismaBusy", 0)); + return plain.to_bool () || slur.to_bool () || tie.to_bool (); } return false; } diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 00e55ae4db..fb660fb505 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -22,6 +22,8 @@ static Keyword_ent the_key_tab[]={ {"spanrequest", SPANREQUEST}, + {"simultaneous", SIMULTANEOUS}, + {"sequential", SEQUENTIAL}, {"accepts", ACCEPTS}, {"alternative", ALTERNATIVE}, {"bar", BAR}, diff --git a/lily/parser.yy b/lily/parser.yy index 7a6189007b..9fc2b7e3f1 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -136,6 +136,8 @@ yylex (YYSTYPE *s, void * v_l) %token CLEF %token CM_T %token CONSISTS +%token SEQUENTIAL +%token SIMULTANEOUS %token CONSISTSEND %token DURATION %token EXTENDER @@ -182,7 +184,7 @@ yylex (YYSTYPE *s, void * v_l) %token VERSION /* escaped */ -%token E_EXCLAMATION E_SMALLER E_BIGGER E_CHAR +%token E_EXCLAMATION E_SMALLER E_BIGGER E_CHAR CHORD_MINUS CHORD_CARET %type exclamations questions %token DIGIT @@ -729,13 +731,23 @@ Music_sequence: '{' Music_list '}' { } ; -Sequential_music: '{' Music_list '}' { +Sequential_music: + SEQUENTIAL '{' Music_list '}' { + $$ = new Sequential_music ($3); + $$->set_spot ($3->spot ()); + } + | '{' Music_list '}' { $$ = new Sequential_music ($2); $$->set_spot ($2->spot ()); } ; -Simultaneous_music: '<' Music_list '>' { +Simultaneous_music: + SIMULTANEOUS '{' Music_list '}'{ + $$ = new Simultaneous_music ($3); + $$->set_spot ($3->spot ()); + } + | '<' Music_list '>' { $$ = new Simultaneous_music ($2); $$->set_spot ($2->spot ()); } @@ -931,7 +943,7 @@ abbrev_command_req: else THIS->set_abbrev_beam ($3); - Abbreviation_beam_req* a = new Abbreviation_beam_req; + Chord_tremolo_req* a = new Chord_tremolo_req; a->span_dir_ = START; a->type_i_ = THIS->abbrev_beam_type_i_; $$=a; @@ -946,7 +958,7 @@ abbrev_command_req: } else { - Abbreviation_beam_req* a = new Abbreviation_beam_req; + Chord_tremolo_req* a = new Chord_tremolo_req; a->span_dir_ = STOP; a->type_i_ = THIS->abbrev_beam_type_i_; THIS->set_abbrev_beam (0); @@ -1443,7 +1455,7 @@ chord_additions: { $$ = new Array; } - | '-' chord_notes { + | CHORD_MINUS chord_notes { $$ = $2; } ; @@ -1462,7 +1474,7 @@ chord_subtractions: { $$ = new Array; } - | '^' chord_notes { + | CHORD_CARET chord_notes { $$ = $2; } ; diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index b97a0de7b7..5332167199 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -29,12 +29,12 @@ Slur_engraver::do_try_music (Music *req_l) void Slur_engraver::set_melisma (bool m) { - Translator_group *where = daddy_trans_l_; - get_property ("melismaBusy", &where); - if (!where) - where = daddy_trans_l_; + Translator_group *where = daddy_trans_l_; + get_property ("slurMelismaBusy", &where); + if (!where) + where = daddy_trans_l_; - daddy_trans_l_->set_property ("melismaBusy", m ? "1" :"0"); + daddy_trans_l_->set_property ("slurMelismaBusy", m ? "1" :"0"); } void diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 04746dc634..848c5b16a9 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -12,6 +12,7 @@ #include "note-head.hh" #include "musical-request.hh" #include "tie.hh" +#include "translator-group.hh" Tie_engraver::Tie_engraver() { @@ -25,11 +26,26 @@ Tie_engraver::do_try_music (Music *m) if (Tie_req * c = dynamic_cast (m)) { req_l_ = c; + if (get_property ("automaticMelismas",0).to_bool ()) + { + set_melisma (true); + } return true; } return false; } +void +Tie_engraver::set_melisma (bool m) +{ + Translator_group *where = daddy_trans_l_; + get_property ("tieMelismaBusy", &where); + if (!where) + where = daddy_trans_l_; + + daddy_trans_l_->set_property ("tieMelismaBusy", m ? "1" :"0"); +} + void Tie_engraver::acknowledge_element (Score_element_info i) { @@ -172,7 +188,11 @@ Tie_engraver::do_pre_move_processing () void Tie_engraver::do_post_move_processing () { - req_l_ =0; + if (get_property ("automaticMelismas",0).to_bool ()) + { + set_melisma (false); + } + req_l_ = 0; Moment now = now_mom (); while (past_notes_pq_.size () && past_notes_pq_.front ().end_ < now) past_notes_pq_.delmin (); diff --git a/ly/engraver.ly b/ly/engraver.ly index d8cd95439b..0e5e9d2cb1 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -86,7 +86,7 @@ VoiceContext = \translator { \consists "Dynamic_engraver"; % must come before text_engraver. \name Voice ; - \consists "Tie_engraver"; +% \consists "Tie_engraver"; \consists "Breathing_sign_engraver"; \consists "Rest_engraver"; \consists "Dot_column_engraver"; @@ -95,7 +95,7 @@ VoiceContext = \translator { beamAuto = "1"; \consists "Auto_beam_engraver"; \include "auto-beam-settings.ly"; - \consists "Abbreviation_beam_engraver"; + \consists "Chord_tremolo_engraver"; % \consists "Multi_measure_rest_engraver"; % ugh. Order matters here. @@ -107,6 +107,7 @@ VoiceContext = \translator { \consists "Rhythmic_column_engraver"; \consists "Font_size_engraver"; \consists "Slur_engraver"; + \consists "Tie_engraver"; \consists "Tuplet_engraver"; \consists "Grace_position_engraver"; \consists "Skip_req_swallow_translator"; diff --git a/mutopia/F.Schubert/standchen.ly b/mutopia/F.Schubert/standchen.ly index aa61bf49a7..977682d3d4 100644 --- a/mutopia/F.Schubert/standchen.ly +++ b/mutopia/F.Schubert/standchen.ly @@ -34,7 +34,6 @@ vocalVerse = \notes\relative c''{ R2. | g8. b16 es4. d8 | c8. g16 es4. c8 | - % \times 2/3 { [ as\grace( bes ] ) \grace { as'16 bes } \times 2/3 { [ )as8( )g] as } c4. as8 | g2. | \grace { f16( g } \times 2/3 { [ )f8( )e] f } as4. f8 | @@ -44,8 +43,7 @@ vocalVerse = \notes\relative c''{ c8. g16 e4. c8 | \grace { a'16( b } \times 2/3 { [ )a!8( ) gis] a } c4. a8 | g!2. | - % \times 2/3 { [ a\grace( b] ) - \times 2/3 { [ d'8\f cis] d } f4. b,8 | + \times 2/3 { [ d'8\f( )cis] d } f4. b,8 | c!2. | } @@ -61,7 +59,7 @@ vocalThrough = \notes\relative c{ R2. | \grace { a16( b } \times 2/3 { [ )a!8( ) gis] a } c4. a8 | g!2. | - \times 2/3 { [ d'8\f cis] d } f4. b,8 | + \times 2/3 { [ d'8\f( )cis] d } f4. b,8 | c!2. ~ | c4 r c | as2. | @@ -70,42 +68,42 @@ vocalThrough = \notes\relative c{ } lyricVerseOne = \lyrics{ - Lei- " " se fleh- en mei- " " ne Lie- der - Durch die Nacht " " zu dir; - In " " den stil- len Hain " " her- nie- der - Lieb- chen, komm " " zu mir! + Lei- se fleh- en mei- ne Lie- der + Durch die Nacht zu dir; + In den stil- len Hain her- nie- der + Lieb- chen, komm zu mir! Fl\"us- ternd schlan- ke Wip- fel rau- schen - In " " des Mon- des Licht, - In " " des Mon- des Licht; + In des Mon- des Licht, + In des Mon- des Licht; Des Ver- r\"a- ters feind- lich Lau- schen - F\"urch- " " te, Hol- de, nicht, - F\"urch- " " te, Hol- de, nicht. + F\"urch- te, Hol- de, nicht, + F\"urch- te, Hol- de, nicht. } lyricVerseTwo = \lyrics{ - H\"orst " " die Nach- ti- gal- " " len schla- gen? - Ach! sie fleh- " " en dich, - Mit " " der T\"o- ne s\"u- " " "\ss en" Kla- gen - Fleh- en sie " " f\"ur mich. + H\"orst die Nach- ti- gal- len schla- gen? + Ach! sie fleh- en dich, + Mit der T\"o- ne s\"u- "\ss en" Kla- gen + Fleh- en sie f\"ur mich. Sie- ver- "steh'n" des Bus- ens Seh- nen - Ken- " " nen Lieb- es- schmerz, - Ken- " " nen Lieb- es- schmerz. + Ken- nen Lieb- es- schmerz, + Ken- nen Lieb- es- schmerz. R\"uh- ren mit den Sil- ber- t\"o- nen - Jed- " " es wei- che Herz, - Jed- " " es wei- che Herz. + Jed- es wei- che Herz, + Jed- es wei- che Herz. } lyricThrough = \lyrics{ La\ss auch dir die Brust be- we- gen Lieb- chen, h\"o- re mich! - Be- bend harr' " " ich dir ent- ge- gen! + Be- bend harr' ich dir ent- ge- gen! - Komm, " " be- gl\"uk- ke mich! - Komm, " " be- gl\"uk- ke mich, __ " " + Komm, be- gl\"uk- ke mich! + Komm, be- gl\"uk- ke mich, __ Be- gl\"uk- ke mich! } @@ -326,6 +324,7 @@ vocals = \notes{ \clef treble; % certainly no auto-beaming for vocals \property Voice.beamAuto=0 + \property Staff.automaticMelismas=1 \property Voice.dynamicDir = \up \skip 4 * 12;