From b25edb663270422d689442336c84269acbbb127e Mon Sep 17 00:00:00 2001 From: Carl Sorensen Date: Mon, 22 Jun 2009 12:03:23 -0600 Subject: [PATCH] Modify autobeam and grouping properties Create new beamSettings property which stores all information about beam creation. Elminate beatGrouping property; grouping is now defined by the default autobeam rule Add \overrideBeamSettings and \revertBeamSettings to allow the complete definition of beamSettings for a time signature in one call. Eliminate the need to revert predefined beam settings in order to get the desired autobeaming behavior. Create new c++ functions (callable from Scheme) to get settings out of the beamSettings property. Update documentation and snippets to reflect the change. --- Documentation/de/notation/rhythms.itely | 495 +++++++----------- Documentation/es/notation/rhythms.itely | 317 ++--------- Documentation/fr/notation/rhythms.itely | 387 ++++---------- Documentation/music-glossary.tely | 3 - Documentation/notation/rhythms.itely | 343 ++++-------- ...wo-per-two-in-4-4-or-2-2-time-signature.ly | 44 +- .../snippets/beam-endings-in-score-context.ly | 22 +- .../snippets/beam-grouping-in-7-8-time.ly | 12 +- .../snippets/chordchanges-for-fretboards.ly | 1 - .../snippets/compound-time-signatures.ly | 15 +- ...onducting-signs,-measure-grouping-signs.ly | 43 +- Documentation/snippets/grouping-beats.ly | 19 +- ...aking-slurs-with-complex-dash-structure.ly | 3 +- .../snippets/non-default-tuplet-numbers.ly | 3 +- .../non-traditional-key-signatures.ly | 3 +- .../reverting-default-beam-endings.ly | 43 +- .../specifying-context-with-beatgrouping.ly | 61 ++- .../using-beatlength-and-beatgrouping.ly | 81 +-- input/manual/fretted-headword.ly | 5 +- input/mutopia/claop.py | 2 +- input/regression/auto-beam-beat-grouping.ly | 30 -- input/regression/beam-beat-grouping.ly | 9 +- lily/auto-beam-engraver.cc | 2 +- lily/beam-setting-scheme.cc | 67 +++ lily/beaming-pattern.cc | 9 +- lily/include/beam-settings.hh | 18 + lily/measure-grouping-engraver.cc | 36 +- ly/bagpipe.ly | 20 +- ly/engraver-init.ly | 127 +++-- ly/music-functions-init.ly | 56 ++ python/convertrules.py | 62 ++- scm/auto-beam.scm | 387 ++------------ scm/beam-settings.scm | 228 ++++++++ scm/c++.scm | 4 +- scm/define-context-properties.scm | 29 +- scm/define-music-display-methods.scm | 57 +- scm/lily.scm | 1 + scm/music-functions.scm | 147 +++--- 38 files changed, 1341 insertions(+), 1850 deletions(-) delete mode 100644 input/regression/auto-beam-beat-grouping.ly create mode 100644 lily/beam-setting-scheme.cc create mode 100644 lily/include/beam-settings.hh create mode 100644 scm/beam-settings.scm diff --git a/Documentation/de/notation/rhythms.itely b/Documentation/de/notation/rhythms.itely index a10e972f60..8d66a0fef9 100644 --- a/Documentation/de/notation/rhythms.itely +++ b/Documentation/de/notation/rhythms.itely @@ -55,12 +55,12 @@ Dauern, Bebalkung und Takten. @funindex breve @funindex maxima -Notenlängen (Dauern) werden durch -Zahlen und Punkte notiert: Dauern werden als reziproke Werte geschrieben. -Zum Beispiel wird eine Viertelnote mit @code{4} notiert (weil sie eine -1/4-Note ist), eine halbe Note mit @code{2} (weil sie eine 1/2-Note ist). -Noten, die länger als eine Ganze sind, müssen mit @code{\longa} -(für die Longa, also vier Ganze) und +Notenlängen (Dauern) werden durch +Zahlen und Punkte notiert: Dauern werden als reziproke Werte geschrieben. +Zum Beispiel wird eine Viertelnote mit @code{4} notiert (weil sie eine +1/4-Note ist), eine halbe Note mit @code{2} (weil sie eine 1/2-Note ist). +Noten, die länger als eine Ganze sind, müssen mit @code{\longa} +(für die Longa, also vier Ganze) und @code{\breve} (für die Brevis, auch Doppelganze genannt) notiert werden. Notendauern bis hin zu 128steln sind unterstützt. Kürzere Notenwerte können auch notiert werden, können allerdings nur als Noten mit Balken auftreten. @@ -89,8 +89,8 @@ Befehl @code{\maxima} eingegeben werden, aber ihre Darstellung ist nur für die Alte Musiknotation unterstützt. Zu Einzelheiten siehe @ref{Notation von alter Musik}. -Wenn die Dauer hinter einer Notenbezeichnung nicht angegeben ist, -wird die Dauer der vorhergehenden Note eingesetzt. Der Standardwert +Wenn die Dauer hinter einer Notenbezeichnung nicht angegeben ist, +wird die Dauer der vorhergehenden Note eingesetzt. Der Standardwert für die erste Note ist eine Viertel. @lilypond[quote,verbatim,relative=2] @@ -104,8 +104,8 @@ a a a2 a a4 a a1 a @cindex Doppelpunktierung @cindex Noten, doppelpunktiert -Um punktierte Notendauern zu erhalten, muss einfach nur ein Punkt -(@code{.}) hinter die Zahl der Dauer gesetzt werden. Zwei Punkte +Um punktierte Notendauern zu erhalten, muss einfach nur ein Punkt +(@code{.}) hinter die Zahl der Dauer gesetzt werden. Zwei Punkte ergeben eine doppelte Punktierung, usw. @lilypond[quote,verbatim,relative=2] @@ -116,7 +116,7 @@ Manche Notenlängen können nicht mit binären Dauern und Punkten dargestellt werden, sie können nur erreicht werden, indem man Noten überbindet. Für Einzelheiten siehe @ref{Bindebögen}. -Wie den Silben von Gesangtext eigene Dauern zu gewiesen werden +Wie den Silben von Gesangtext eigene Dauern zu gewiesen werden können und wie man sie an den Noten ausrichtet ist erklärt in @ref{Notation von Gesang}. @@ -132,7 +132,7 @@ Einstellungen für proportionale Notation siehe @funindex dotsDown @funindex dotsNeutral -Punkte werden normalerweise nach oben verschoben, damit sie die Notenlinien +Punkte werden normalerweise nach oben verschoben, damit sie die Notenlinien nicht berühren. Fertige Befehle können eingesetzt werden, um eine bestimmte Richtung manuell zu erzwingen, zu Einzelheiten siehe @ref{Richtung und Platzierung}. @@ -191,7 +191,7 @@ Maxima (8 Ganze) gesetzt werden. @funindex times @funindex \times -Triolen und andere rhythmische Aufteilungen werden aus einem musikalischen +Triolen und andere rhythmische Aufteilungen werden aus einem musikalischen Ausdruck erstellt, indem dessen Tondauern mit einem Bruch multipliziert werden. @example @@ -199,11 +199,11 @@ Ausdruck erstellt, indem dessen Tondauern mit einem Bruch multipliziert werden. @end example @noindent -Die Dauer eines @var{musikalischen Ausdrucks} wird mit dem Bruch multipliziert. +Die Dauer eines @var{musikalischen Ausdrucks} wird mit dem Bruch multipliziert. Der Nenner des Bruchs wird über (oder unter) den Noten ausgegeben, optional mit einer eckigen Klammer, die die Noten einfasst. -Die üblichste Aufteilung ist die -Triole, in welcher drei Noten die Länge von zwei haben, der Wert jeder +Die üblichste Aufteilung ist die +Triole, in welcher drei Noten die Länge von zwei haben, der Wert jeder einzelnen Note ist also 2/3 der notierten Länge. @lilypond[quote,verbatim,relative=2] @@ -313,16 +313,16 @@ N-tolen gesetzt werden. @cindex Dauern skalieren @cindex Skalieren von Dauern -Die Dauer von einzelnen Noten, Pausen oder Akkorden kann mit einem Bruch multipliziert werden, -indem hinter die Notendauer @qq{*@var{N/M}} (oder @qq{*@var{N}} wenn @var{M} 1 ist) +Die Dauer von einzelnen Noten, Pausen oder Akkorden kann mit einem Bruch multipliziert werden, +indem hinter die Notendauer @qq{*@var{N/M}} (oder @qq{*@var{N}} wenn @var{M} 1 ist) geschrieben wird. Die Erscheinung der Noten oder Pausen wird dadurch nicht beeinflusst, die neue Dauer wird aber dazu benutzt, ihre Position im Takt zu errechnen und die neue Dauer in der MIDI-Ausgabe einzusetzen. Die Faktoren, mit -denen multipliziert wird, können auch kombiniert werden, etwa +denen multipliziert wird, können auch kombiniert werden, etwa @qq{*L*M*/N}. -Im nächsten Beispiel nehmen die drei ersten Noten genau zwei Schläge ein, +Im nächsten Beispiel nehmen die drei ersten Noten genau zwei Schläge ein, aber es wird keine Triolenklammer über ihnen ausgegeben. @lilypond[quote,relative=2,verbatim] @@ -397,16 +397,16 @@ Schnipsel: @funindex ~ -Ein Bindebogen verbindet zwei benachbarte Noten der selben +Ein Bindebogen verbindet zwei benachbarte Noten der selben Tonhöhe. Als Resultat wird die Dauer der Notenlänge verlängert. - -@warning{Bindebögen dürfen nicht mit Legatobögen verwechselt werden, durch -die die Vortragsart bezeichnet wird, noch mit Phrasierungsbögen, + +@warning{Bindebögen dürfen nicht mit Legatobögen verwechselt werden, durch +die die Vortragsart bezeichnet wird, noch mit Phrasierungsbögen, die musikalische Phrasen anzeigen. Ein Bindebogen ist nur eine Art, die Tondauer zu verlängern, ähnlich etwa wie die Punktierung.} -Ein Bindebogen wird mit der +Ein Bindebogen wird mit der Tilde @code{~} (AltGr++) notiert. @lilypond[quote,verbatim,relative=2] @@ -436,10 +436,10 @@ automatisch aufgeteilt, wenn sie über Taktgrenzen reichen. @cindex Überbindungen und Akkorde @cindex Akkorde und Überbindungen -Wenn ein Bindebogen an einen Akkord gehängt wird, werden alle Noten -dieses Akkordes übergebunden. Wenn kein Notenkopf passt, wird auch -kein Bogen erzeugt. Noten in Akkorden können auch einzeln übergebunden -werden, indem sie innerhalb des Akkordes hinter die entsprechende Note +Wenn ein Bindebogen an einen Akkord gehängt wird, werden alle Noten +dieses Akkordes übergebunden. Wenn kein Notenkopf passt, wird auch +kein Bogen erzeugt. Noten in Akkorden können auch einzeln übergebunden +werden, indem sie innerhalb des Akkordes hinter die entsprechende Note geschrieben werden. @lilypond[quote,verbatim,relative=1] @@ -476,8 +476,8 @@ Note anfängt, muss der Bindebogen wie folgt notiert werden: @funindex laissezVibrer @funindex \laissezVibrer -So genannte @notation{laissez vibrer}-Bögen werden verwendet um anzuzeigen, dass -man die Musik ausklingen lassen soll. Sie werden in der Klavier-, Harfen-, +So genannte @notation{laissez vibrer}-Bögen werden verwendet um anzuzeigen, dass +man die Musik ausklingen lassen soll. Sie werden in der Klavier-, Harfen-, anderer Saiteninstrument- und Schlagzeugnotation verwendet. Sie können folgendermaßen notiert werden: @lilypond[quote,verbatim,relative=1] @@ -581,11 +581,11 @@ Referenz der Interna: @knownissues -Der Wechsel zwischen Systemen bei aktiver Überbindung produziert keinen +Der Wechsel zwischen Systemen bei aktiver Überbindung produziert keinen gekrümmten Bogen. -Änderung von Schlüssel oder Oktavierung zwischen übergebundenen Noten -ist nicht richtig definiert. In diesen Fällen kann es besser sein, einen +Änderung von Schlüssel oder Oktavierung zwischen übergebundenen Noten +ist nicht richtig definiert. In diesen Fällen kann es besser sein, einen Legatobogen zu verwenden. @@ -648,17 +648,17 @@ vordefinierten Befehle: @cindex Ganztaktpausen @cindex Mehrtaktpausen -Pausen, die ganze Takte ausfüllen und in der Taktmitte zentriert -werden sollen, müssen als mehrtaktige Pausen eingegeben werden. -Sie können sowohl für einen einzigen Takt als auch für mehrere +Pausen, die ganze Takte ausfüllen und in der Taktmitte zentriert +werden sollen, müssen als mehrtaktige Pausen eingegeben werden. +Sie können sowohl für einen einzigen Takt als auch für mehrere Takte verwendet werden, Näheres im Abschnitt @ref{Ganztaktige Pausen}. -Um die vertikale Position einer Pause explizit festzulegen, -kann eine Note eingegeben werden, gefolgt vom Befehl @code{\rest}. -Die Pause wird dann an die Stelle gesetzt, wo sich sonst die -Note befinden würde. Damit wird die manuelle Formatierung von mehrstimmiger Musik -sehr viel einfacher, da die Formatierungsfunktion zur automatischen +Um die vertikale Position einer Pause explizit festzulegen, +kann eine Note eingegeben werden, gefolgt vom Befehl @code{\rest}. +Die Pause wird dann an die Stelle gesetzt, wo sich sonst die +Note befinden würde. Damit wird die manuelle Formatierung von mehrstimmiger Musik +sehr viel einfacher, da die Formatierungsfunktion zur automatischen Auflösung von Zusammenstößen diese Pausen nicht mit einbezieht. @lilypond[quote,verbatim,relative=2] @@ -707,7 +707,7 @@ Maxima (8 Ganze). @funindex skip @funindex s -Eine unsichtbare Pause (auch als @qq{skip} oder Überspringung bezeichnet) +Eine unsichtbare Pause (auch als @qq{skip} oder Überspringung bezeichnet) kann wie eine Note eingegeben werden, die Notationsbezeichnung ist @code{s}. @lilypond[quote,verbatim,relative=2] @@ -716,8 +716,8 @@ a4 a4 s4 a4 \skip 1 a4 @cindex Gesangstext, überspringen -Die @code{s}-Syntax steht nur im Noten- oder Akkordmodus zur Verfügung. In -anderen Situationen, z. B. innerhalb eines Liedtextes, muss @code{\skip} +Die @code{s}-Syntax steht nur im Noten- oder Akkordmodus zur Verfügung. In +anderen Situationen, z. B. innerhalb eines Liedtextes, muss @code{\skip} benutzt werden. @code{\skip} benötigt eine explizite Dauerangabe. @lilypond[quote,verbatim,relative=2] @@ -740,8 +740,8 @@ Die Überspringung mit @code{s} erstellt @code{Staff} und s1 s s @end lilypond -Der Überspringungsbefehl (@code{\skip}) ist einfach ein leerer Platzhalter. -Durch ihn wird +Der Überspringungsbefehl (@code{\skip}) ist einfach ein leerer Platzhalter. +Durch ihn wird überhaupt nichts gesetzt, auch keine transparenten Objekte. @lilypond[quote,verbatim,fragment] @@ -855,7 +855,7 @@ R2.*2 | @funindex MultiMeasureRestText Textbeschriftung kann Mehrtaktpausen mit @code{\markup} -hinzugefügt werden. Ein +hinzugefügt werden. Ein vordefinierte Befehl @code{\fermataMarkup} fügt eine Fermate ein. @@ -1133,9 +1133,9 @@ Das wird intern übersetzt nach: @end example Die Eigenschaft @code{measurePosition} (Takt-Position) enthält -eine rationale Zahl, -die anezigt, wie groß der Abstand zum Taktanfang ist. Deshalb ist -sie eine negative Zahl; @code{\partial 4} wird also intern übersetzt +eine rationale Zahl, +die anezigt, wie groß der Abstand zum Taktanfang ist. Deshalb ist +sie eine negative Zahl; @code{\partial 4} wird also intern übersetzt zu: @qq{Eine Viertel bleibt übrig vom ganzen Takt.} @seealso @@ -1164,8 +1164,8 @@ Referenz der Interna: @knownissues -@code{\partial} ist nur für den Anfang eines Stückes vorgesehen. Wenn der -Befehl innerhalb eines Stückes verwendet wird, können seltsame Warnungen +@code{\partial} ist nur für den Anfang eines Stückes vorgesehen. Wenn der +Befehl innerhalb eines Stückes verwendet wird, können seltsame Warnungen auftreten. @@ -1185,10 +1185,10 @@ auftreten. @funindex cadenzaOn @funindex cadenzaOff -Taktlinien und Taktzahlen werden automatisch erzeugt. Für Musik -ohne Metrum hingegen (etwa Kadenzen) ist das jedoch nicht -erwünscht. Mit den Befehlen @code{\cadenzaOn} und -@code{\cadenzaOff} kann dieses Verhalten ausgeschaltet und +Taktlinien und Taktzahlen werden automatisch erzeugt. Für Musik +ohne Metrum hingegen (etwa Kadenzen) ist das jedoch nicht +erwünscht. Mit den Befehlen @code{\cadenzaOn} und +@code{\cadenzaOff} kann dieses Verhalten ausgeschaltet und wieder angeschaltet werden. @lilypond[verbatim,quote,relative=2,fragment] @@ -1231,8 +1231,8 @@ Schnipsel: @knownissues -LilyPond fügt Zeilen- und Seitenumbrüche nur an einer Taktlinie -ein. Wenn die Kadenz nicht vor einem Umbruch endet, müssen Sie +LilyPond fügt Zeilen- und Seitenumbrüche nur an einer Taktlinie +ein. Wenn die Kadenz nicht vor einem Umbruch endet, müssen Sie selber unsichtbare Taktlinien mit @example @@ -1407,10 +1407,10 @@ Fall wäre. @funindex Completion_heads_engraver Lange Noten, die über Taktlinien hinüberreichen, können -automatisch in übergebundene Noten aufgeteilt werden. -Dieses Verhalten erreicht man, indem der @rinternals{Note_heads_engraver} -mit dem @rinternals{Completion_heads_engraver} ausgetauscht wird. -Im nächsten Beispiel werden Noten, die über die Taktlinie dauern, aufgeteilt +automatisch in übergebundene Noten aufgeteilt werden. +Dieses Verhalten erreicht man, indem der @rinternals{Note_heads_engraver} +mit dem @rinternals{Completion_heads_engraver} ausgetauscht wird. +Im nächsten Beispiel werden Noten, die über die Taktlinie dauern, aufgeteilt und übergebunden. @lilypond[quote,verbatim,relative=1] @@ -1422,11 +1422,11 @@ und übergebunden. { c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } @end lilypond -Dieser Engraver teilt alle Noten -auf, die über eine Taktlinie dauern und fügt Bindebögen hinzu. -Er kann unter Anderem dann nützlich sein, wenn man komplexe -Partituren auf Fehler überprüfen möchte: Wenn die Takte nicht -vollständig gefüllt sind, zeigt die Überbindung genau an, wie viele +Dieser Engraver teilt alle Noten +auf, die über eine Taktlinie dauern und fügt Bindebögen hinzu. +Er kann unter Anderem dann nützlich sein, wenn man komplexe +Partituren auf Fehler überprüfen möchte: Wenn die Takte nicht +vollständig gefüllt sind, zeigt die Überbindung genau an, wie viele Notenwerte noch in dem jeweiligen Takt fehlen. @seealso @@ -1446,12 +1446,12 @@ Referenz der Interna: @knownissues -Nicht alle Notenwerte (besonders wenn sie andere rhythmische -Aufteilungen beinhalten) können exakt durch normale Noten und +Nicht alle Notenwerte (besonders wenn sie andere rhythmische +Aufteilungen beinhalten) können exakt durch normale Noten und Punktierungen wiedergegeben werden. Der Engraver setzt aber trotzdem keine Triolen etc. -@code{Completion_heads_engraver} wirkt sich nur auf Noten aus; +@code{Completion_heads_engraver} wirkt sich nur auf Noten aus; Pausen werden nicht aufgeteilt. @@ -1462,9 +1462,9 @@ Pausen werden nicht aufgeteilt. @cindex Melodierhythmus: Anzeige @cindex Rhythmus der Melodie anzeigen -Manchmal soll nur der Rhythmus einer Melodie dargestellt werden. Das -erreicht man mit einem Rhythmus-Notensystem. Alle Tonhöhen werden -auf eine Linie reduziert und das System hat auch nur eine einzige +Manchmal soll nur der Rhythmus einer Melodie dargestellt werden. Das +erreicht man mit einem Rhythmus-Notensystem. Alle Tonhöhen werden +auf eine Linie reduziert und das System hat auch nur eine einzige Linie. @lilypond[quote,relative=1,verbatim] @@ -1574,7 +1574,7 @@ LilyPond setzt Balken (engl. beam) automatisch. \time 6/8 c c c c8. c16 c8 @end lilypond -Wenn diese automatischen Entscheidungen nicht gut genug sind, können +Wenn diese automatischen Entscheidungen nicht gut genug sind, können die Balken auch explizit eingegeben werden, siehe @ref{Manuelle Balken}. Balken @emph{müssen} auch auf diese Weise eingegeben werden, wenn sie über Pausen hinwegreichen sollen. @@ -1658,21 +1658,14 @@ Stimmen zusammenstoßen. @cindex Gesangstext und Balken @funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) +@funindex beamSettings @funindex measureLength @funindex beatLength -@funindex beatGrouping @funindex \time @funindex time @funindex \set @funindex set -Es gibt zwei Arten an Balkenregeln: @emph{Balkengruppen}-Regeln und -@emph{Balkenenden}-Regeln. Balkengruppen-Regeln sind am einfachsten, -werden aber von allen Balkenenden-Regeln überschrieben, die gültig sind. - Die Platzierung der automatischen Bebalkung wird entschieden, indem die folgenden Regeln in der dargestellten Reihenfolge angewendet werden: @@ -1682,62 +1675,12 @@ die folgenden Regeln in der dargestellten Reihenfolge angewendet werden: @item wenn @code{\autoBeamOff} eingeschaltet ist, werden keine Balken gesetzt, andernfalls -@item wenn eine Balkenenden-Regel zutrifft, wird sie benutzt, um die Noten mit -Balken zu gruppieren, andernfalls - @item benutze den Wert von @code{beatLength} um die Noten mit Balken zu gruppieren. @end itemize @i{@strong{Die Gruppierung von Noten verändern}} -Wenn keine Regeln für die Beendung von Balken für die aktuelle -Balkendauer in der benutzen Taktart vorhanden sind, wird die -Bebalkung von drei Kontext-Eigenschaften kontrolliert: -@code{measureLength}, @code{beatLength} und @code{beatGrouping}. -Diese Eigenschaften können in den @code{Score}, @code{Staff} oder -@code{Voice}-Kontexten gesetzt werden, um ihre Wirkungsweise zu -begrenzen. Die Standardwerte werden gesetzt, wenn der @code{\time}-Befehl -gelesen wird, sodass alle @code{\set}-Befehle, die diese Werte verändern sollen, nach den @code{\time}-Befehlen -geschrieben werden müssen. - -@warning{Diese drei Eigenschaften werden für einen bestimmten -Balken @strong{nur dann} aktiv, wenn für diese Balkendauer keine -Beendungsregeln für die benutzte Taktart definiert sind, oder -wenn alle diese Enden-Regeln mit @code{\revert} rückgängig gemacht -wurden.} - -Durch sie werden die Balken wie folgt bestimmt: - -Balken können überall beginnen (außer ein Balken ist schon aktiv). -Balken enden zu den Werten, die @code{beatGrouping} und -@code{beatLength} bestimmten, nach folgenden Regeln: - -@itemize - -@item Wenn @code{beatGrouping} und @code{beatLength} den gleichen -Wert wie @code{measureLength} haben, wird @code{beatGrouping} -benutzt, um die Endpunkte der Balken zu bestimmen. - -@item Wenn @code{beatGrouping} und @code{beatLength} nicht mit -@code{measureLength} übereinstimmen, wird @code{beatLength} -benutzt, um die Endpunkte der Balken zu bestimmen. - -@end itemize - -Standardmäßig werden @code{measureLength} -(Taktlänge) und @code{beatLength} von der Taktart entnommen, die -mit @code{\time} gesetzt wurde. @code{measureLength} hat -standardmäßig genau die gleiche Länge wie die Taktlänge und der -Standardwert für @code{beatLength} (Taktzeit-Länge) wird durch -den Nenner des Taktart-Bruches bestimmt. - -Der Standardwert von @code{beatGrouping} wird aus einer Tabelle -in der Datei @file{scm/@/music@/-functions@/.scm} entnommen. Um -sie zu finden, siehe @rlearning{Mehr Information}. -Hier werden Taktzeiten-Gruppen für die Taktarten 5/8, 6/8, 8/8, -9/8 und alle üblichen zusammengestzten Taktarten definiert. - Sowohl @code{measureLength} als auch @code{beatLength} sind @i{Momente}, Einheiten musikalischer Dauer. Eine Größe der Art @i{Moment} wird durch die Scheme-Funktion @@ -1807,78 +1750,32 @@ Syntax verwendet werden: @noindent wobei -@itemize - -@item @code{Balken-Limit} die Art der Balkenbegrenzung ist. Das -kann entweder der Wert @code{begin} (Anfang) oder @code{end} -(Ende) sein, aber nur @code{end} hat eine Auswirkung. - -@item @code{Balken-Zähler/Balken-Nenner} ist die Balken-Dauer, -auf die die Regel sich bezieht. Ein Balken hat per Definition -die Dauer seiner kürzesten Note. Wenn sowohl -@code{Balken-Zähler} als auch @code{Balken-Nenner} auf - @code{'*'} gesetzt werden, gilt die Regel für alle Dauern. - -@item @code{Taktart-Zähler/Taktart-Nenner} bestimmen die -Taktart, auf die die Regel sich bezieht. Wenn @code{Taktart-Zähler} -und @code{Taktart-Nenner} auf @code{'*'} gesetzt werden, gilt -die Regel für alle Taktarten. - -@item @code{Moment-Zähler/Moment-Nenner} ist die Position im -Takt, an welcher der Balken aufhören soll. - -@funindex score-override-auto-beam-setting -@funindex override-auto-beam-setting - -@item @code{Kontext} ist optional und bestimmt den Kontext, in -welchem die Änderungen vorgenommen werden sollen. Der -Standard ist @code{'Voice}. - -@code{#(score-override-auto-beam-setting '(A B C D) E F)} ist -gleichbedeutend mit -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. - -@end itemize - -Wenn beispielsweise die automatischen Balken immer auf der ersten -Viertel enden sollen, unabhängig von der Taktart oder Dauer -des Balkens, kann - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -@noindent -benutzt werden. - -Balkenregeln können aber auch auf Notengruppen beschränkt werden, -deren kürzeste Note einen bestimmten Wert hat: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -Balkenregeln können so definiert werden, dass sie nur in bestimmten -Taktarten angewendet werden: - -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d +@lilypond[quote,relative=2,verbatim] + \time 5/16 + c8^"beats" c16 c8 | + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3))) + c8^"(2+3)" c16 c8 + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2))) + c8^"(3+2)" c16 c8 +@end lilypond + +@lilypond[quote, verbatim,relative=1] +\new Staff << + \time 7/8 + \new Voice = one { + \relative c'' { + \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2))) + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3))) + f8 f f f f f f + } + } +>> @end lilypond Wenn mehrfache Stimmen benutzt werden, muss der @code{Staff}-Kontext @@ -1888,89 +1785,59 @@ angewendet werden sollen: @lilypond[quote,verbatim,relative=2] \time 7/8 % rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) +% Context Voice specified - does not work correctly +% Because of autogenerated voices, all beating will +% be at beatLength (1 . 8) +\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) +% Works correctly with context Staff specified +\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> @end lilypond -@warning{Wenn eine unerwartete Bebalkung auftritt, schauen Sie -zuerste die Balkeneinstellungen in @file{scm/@/auto@/-beam@/.scm} -nach, ob sich hier Überschneidungen ergeben, weil die -Balkenenden, die dort definiert sind, auch noch weiterhin -wirksam sind zusätzlich zu den von Ihnen definierten.} +@funindex revert-beam-setting -@funindex revert-auto-beam-setting - -Jede ungewollte oder störende Balkenbeendigung aus den Standard-Einstellungen -muss für Ihre Taktart rückgängig gemacht werden. Existierende -automatische Bebalkungsregeln werden mit folgender -Syntax entfernt: +Beam settings can be reverted to get back to default behavior. This +is accomplished by using @code{\revertBeamSettings}. The arguments +are the same as for @code{\overrideBeamSettings}, except no value +for @var{grouping} is given: @example -#(revert-auto-beam-setting - '(Balken-Limit - Balken-Zähler Balken-Nenner - Taktart-Zähler Taktart-Nenner) - Moment-Zähler Moment-Nenner [Kontext]) +\revertBeamSettings context time-signature rule-type @end example -@noindent -wobei @code{Balken-Limit}, @code{Balken-Zähler}, @code{Balken-Nenner}, -@code{Taktart-Zähler}, @code{Taktart-Nenner}, @code{Moment-Zähler}, -@code{Moment-Nenner} sowie @code{Kontext} die gleichen sind -wie oben erklärt. - @lilypond[quote,verbatim,relative=2] \time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -Die Regel in einer @code{revert-auto-beam-setting}-Definition -muss exakt der ursprünglichen Regel entsprechen. Dabei werden -keine Platzhalter akzeptiert. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a +\repeat unfold 16 {a16} +% set default rule for (1 1 1 1) grouping +\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1))) +\repeat unfold 16 {a16} +% revert the new rule +\revertBeamSettings #'Score #'(4 . 4) #'end +\repeat unfold 16 {a16} @end lilypond @snippets +@cindex beams, subdividing + @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} +{sub-dividing-beams.ly} + +@cindex measure groupings +@cindex beats, grouping +@cindex grouping beats +@cindex measure sub-grouping + +@funindex autoBeamSettings @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} +{conducting-signs,-measure-grouping-signs.ly} @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] {beam-endings-in-score-context.ly} -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - @cindex Balken, letzter in einer Partitur @cindex letzter Balken einer Partitur @cindex Balken, letzter in einer polyphonen Stimme @@ -1999,12 +1866,12 @@ Schnipsel: @funindex ] @funindex [ -In einigen Fällen kann es nötig sein, den automatischen Algorithmus -für die Balken zu überschreiben. Die automatischen Balken werden +In einigen Fällen kann es nötig sein, den automatischen Algorithmus +für die Balken zu überschreiben. Die automatischen Balken werden beispielsweise nicht über Pausen oder Taktlinien hinweg gesetzt, und in Gesang werden die Balken oft nach dem Rhythmus des Textes und -nicht dem der Musik gesetzt. -Manuell definierte Balken werden mit den Zeichen @code{[} und +nicht dem der Musik gesetzt. +Manuell definierte Balken werden mit den Zeichen @code{[} und @code{]} (AltGr+8 bzw. 9) markiert. @lilypond[quote,relative=1,verbatim] @@ -2016,7 +1883,7 @@ Manuell definierte Balken werden mit den Zeichen @code{[} und @funindex \noBeam @funindex noBeam -Einzelne Noten können mit dem Befehl @code{\noBeam} markiert werden, +Einzelne Noten können mit dem Befehl @code{\noBeam} markiert werden, damit sie nicht mit einem Balken versehen werden. @lilypond[quote,ragged-right,fragment,verbatim,relative=2] @@ -2146,8 +2013,8 @@ Snippets: @funindex \bar @funindex bar -Taktstriche trennen Takte voneinander, werden aber auch verwendet, -um Wiederholungen anzuzeigen. Normalerweise werden sie automatisch +Taktstriche trennen Takte voneinander, werden aber auch verwendet, +um Wiederholungen anzuzeigen. Normalerweise werden sie automatisch nach Vorgabe der aktuellen Taktart eingefügt. Die einfachen, automatisch eingefügten Taktstriche können mit dem @@ -2187,8 +2054,8 @@ kann @end example @noindent -benutzt werden. Damit wird ein unsichtbarer Taktstrich an dieser Stelle eingefügt -und damit ein Zeilenumbruch erlaubt (aber nicht erzwungen), ohne +benutzt werden. Damit wird ein unsichtbarer Taktstrich an dieser Stelle eingefügt +und damit ein Zeilenumbruch erlaubt (aber nicht erzwungen), ohne dass sich die Anzahl der Takte erhöhen würde. Um einen Zeilenumbruch zu erzwingen, siehe @ref{Zeilenumbrüche}. @@ -2257,9 +2124,9 @@ c c c c \break c c c c @end lilypond -In Partituren mit vielen Systemen wird ein @code{\bar}-Befehl in einem -System automatisch auf alle anderen Systeme angewendet. Die resultierenden -Taktstriche sind miteinander verbunden innerhalb einer Gruppe +In Partituren mit vielen Systemen wird ein @code{\bar}-Befehl in einem +System automatisch auf alle anderen Systeme angewendet. Die resultierenden +Taktstriche sind miteinander verbunden innerhalb einer Gruppe (@code{StaffGroup}) oder einem Klaviersystem (@code{PianoStaff} bzw. (@code{GrandStaff}). @@ -2290,8 +2157,8 @@ Taktstriche sind miteinander verbunden innerhalb einer Gruppe @funindex bartype Der Befehl @code{\bar }@var{Taktart} ist eine Kurzform von: -@code{\set Timing.whichBar = }@var{Taktart}. Immer, wenn -@code{whichBar} auf einen Wert gesetzt wird, wird ein +@code{\set Timing.whichBar = }@var{Taktart}. Immer, wenn +@code{whichBar} auf einen Wert gesetzt wird, wird ein Taktstrich dieses Typs erzeugt. Der automatisch erzeugte Taktstrich ist @code{"|"}. Das kann @@ -2414,12 +2281,12 @@ um die Zahl zu verschieben. @funindex barCheckSynchronize @funindex | -Die Taktüberprüfung hilft, Fehler in den Notendauern zu entdecken. -Eine Taktüberprüfung wird mit dem Taktstrichsymbol @qq{|} (Taste AltGr+<) -eingegeben. Immer, wenn LilyPond bei der Ausgabe des Notendrucks -auf dieses Zeichen stößt, sollte hier in den Noten auch ein -Taktstrich erscheinen. Wenn das nicht der Fall ist, wird eine Warnung -ausgegeben. Im nächsten Beispiel resultiert die zweite Taktüberprüfung +Die Taktüberprüfung hilft, Fehler in den Notendauern zu entdecken. +Eine Taktüberprüfung wird mit dem Taktstrichsymbol @qq{|} (Taste AltGr+<) +eingegeben. Immer, wenn LilyPond bei der Ausgabe des Notendrucks +auf dieses Zeichen stößt, sollte hier in den Noten auch ein +Taktstrich erscheinen. Wenn das nicht der Fall ist, wird eine Warnung +ausgegeben. Im nächsten Beispiel resultiert die zweite Taktüberprüfung in einer Fehlermeldung. @example @@ -2435,9 +2302,9 @@ Taktüberprüfungen können auch in Gesangstexten verwendet werden: @} @end example -Besonders in mehrstimmiger komplizierter Musik können -falschen Notenwerte die ganze Partitur durcheinander bringen. -Es lohnt sich also, die Fehlersuche damit zu beginnen, nicht bestandene +Besonders in mehrstimmiger komplizierter Musik können +falschen Notenwerte die ganze Partitur durcheinander bringen. +Es lohnt sich also, die Fehlersuche damit zu beginnen, nicht bestandene Taktüberprüfungen zu kontrollieren. Wenn aufeinander folgende Taktüberprüfungen mit dem gleichen @@ -2448,10 +2315,10 @@ fokussiert. @funindex | @funindex pipeSymbol -Es ist auch möglich, die Bedeutung des Symbols @code{|} +Es ist auch möglich, die Bedeutung des Symbols @code{|} umzudefinieren, so dass hiermit eine andere Aktion als eine -Taktüberprüfung erreicht wird. -Das geschieht, indem man der Pipe (@code{pipeSymbol} einen musikalischen +Taktüberprüfung erreicht wird. +Das geschieht, indem man der Pipe (@code{pipeSymbol} einen musikalischen Ausdruck zuweist. Im nächsten Beispiel wird @code{|} dazu verwendet, eine doppelte Taktlinie auszugeben, woimmer man das Zeichen auchsetzt. Gleichzeitig hört das Zeichen auf, @@ -2470,8 +2337,8 @@ pipeSymbol = \bar "||" @funindex \barNumberCheck @funindex barNumberCheck -Wenn man größere Musikstücke kopiert, kann es hilfreich sein, wenn -LilyPond überprüft, ob die Taktnummer, in der Sie gerade kopieren, +Wenn man größere Musikstücke kopiert, kann es hilfreich sein, wenn +LilyPond überprüft, ob die Taktnummer, in der Sie gerade kopieren, mit der des Originales übereinstimmt. Das kann mit dem Befehl @code{\barNumberCheck} folgenderweise überprüft werden: @@ -2480,7 +2347,7 @@ mit der des Originales übereinstimmt. Das kann mit dem Befehl @end verbatim @noindent -Eine Warnung wird ausgegeben, wenn der interne Zähler +Eine Warnung wird ausgegeben, wenn der interne Zähler @code{currentBarNumber} von LilyPond nicht mit dem Wert 123 übereinstimmt. @@ -2661,10 +2528,10 @@ c4 \grace c16 c4 @end lilypond LilyPond hat auch Unterstützung für zwei besondere Verzierungen, -den Vorschlag und den Vorhalt. Der Vorschlag wird durch eine -verkleinerte Note mit Schrägstrich -und Bogen notiert. Der Vorhalt dagegen ist eine Verzierung, die -einen bestimmten Notenwert der Hauptnote für sich beansprucht. +den Vorschlag und den Vorhalt. Der Vorschlag wird durch eine +verkleinerte Note mit Schrägstrich +und Bogen notiert. Der Vorhalt dagegen ist eine Verzierung, die +einen bestimmten Notenwert der Hauptnote für sich beansprucht. Er wird als verkleinerte Note ohne Schrägstrich notiert. @lilypond[quote,relative=2,verbatim] @@ -2674,7 +2541,7 @@ Er wird als verkleinerte Note ohne Schrägstrich notiert. \acciaccatura { g16[ f] } e4 @end lilypond -Die Position von Verzierungen ist zwischen Notensystemen +Die Position von Verzierungen ist zwischen Notensystemen synchronisiert. Im nächsten Beispiel stehen im einen System zwei 16-Noten für jede 8-Note des zweiten Systems: @@ -2738,9 +2605,9 @@ gesetzt. @cindex Verzierungen verändern @cindex Verzierungen, Aussehen verändern -Ein @code{\grace}-Notenabschnitt wird nach besonderen Satzregeln -gesetzt, um z. B. kleinere Noten zu benutzen und die Richtung der -Hälse einzustellen. Veränderungen am Layout müssen also innerhalb +Ein @code{\grace}-Notenabschnitt wird nach besonderen Satzregeln +gesetzt, um z. B. kleinere Noten zu benutzen und die Richtung der +Hälse einzustellen. Veränderungen am Layout müssen also innerhalb des Verzierungsausdrucks gesetzt werden, damit sie auch eine Auswirkung haben. Die Veränderungen müssen auch innerhalb des Verzierungsausdrucks rückgängig gemacht werden. In diesem Fall wird die Richtung der Hälse geändert und dann wieder der @@ -2798,19 +2665,19 @@ Referenz der Interna: @cindex Synchronisation von Verzierungen @cindex Verzierungen, Synchronisation -Eine Partitur, die mit einem @code{\grace}-Ausdruck beginnt, benötigt -eine explizit gesetzte neue Stimme (@code{\new Voice}), sonst werden +Eine Partitur, die mit einem @code{\grace}-Ausdruck beginnt, benötigt +eine explizit gesetzte neue Stimme (@code{\new Voice}), sonst werden Hauptnote und Verzierung auf verschiedenen Systemen gesetzt. -Ein Vorschlag (@emph{acciaccatura}) mit mehreren Noten und +Ein Vorschlag (@emph{acciaccatura}) mit mehreren Noten und Balken wird ohne den Schrägstrich gesetzt und sieht einem Vorhalt (@emph{appoggiatura}) sehr ähnlich. @c TODO Add link to LSR snippet to add slash when available -Die Synchronisation von Verzierungen kann auch zu Überraschungen führen. -Auch andere Symbole der Systeme, wie Vorzeichen, Taktlinien usw., werden -synchronisiert. Vorsicht ist geboten, wenn nur in bestimmten Systemen +Die Synchronisation von Verzierungen kann auch zu Überraschungen führen. +Auch andere Symbole der Systeme, wie Vorzeichen, Taktlinien usw., werden +synchronisiert. Vorsicht ist geboten, wenn nur in bestimmten Systemen Verzierungen vorkommen: @lilypond[quote,relative=2,verbatim] @@ -2821,9 +2688,9 @@ Verzierungen vorkommen: @end lilypond @noindent -Dem kann abgeholfen werden, indem unsichtbare Verzierungsnoten der selben -Länge in die anderen Systeme gesetzt werden. Im obigen Beispiel müsste -also +Dem kann abgeholfen werden, indem unsichtbare Verzierungsnoten der selben +Länge in die anderen Systeme gesetzt werden. Im obigen Beispiel müsste +also @lilypond[quote,ragged-right,relative=2,verbatim,fragment] << @@ -2834,8 +2701,8 @@ also @noindent gesetzt werden. -Verzierungsabschnitte sollten nur innerhalb von sequentiellen musikalischen -Ausdrücken benützt werden. Wenn sie ineinandergeschachtelt werden, kann es +Verzierungsabschnitte sollten nur innerhalb von sequentiellen musikalischen +Ausdrücken benützt werden. Wenn sie ineinandergeschachtelt werden, kann es zu Fehlermeldungen oder Abstürzen kommen. @@ -2956,7 +2823,7 @@ c4 c1 @end lilypond @noindent -Wie das Beispiel zeigt, erstellt @code{ly:make-moment n m} +Wie das Beispiel zeigt, erstellt @code{ly:make-moment n m} die Dauer Zähler/Nenner einer ganzen Note. Zum Beispiel heißt @code{ly:make-moment 1 8} die Dauer einer Achtelnote, und @code{ly:make-moment 7 16} die Dauer von sieben Sechszehntelnoten. diff --git a/Documentation/es/notation/rhythms.itely b/Documentation/es/notation/rhythms.itely index c898111e46..168ae4f162 100644 --- a/Documentation/es/notation/rhythms.itely +++ b/Documentation/es/notation/rhythms.itely @@ -1643,22 +1643,14 @@ alteraciones accidentales de las otras voces. @cindex letra y barrado @funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) +@funindex beamSettings @funindex measureLength @funindex beatLength -@funindex beatGrouping @funindex \time @funindex time @funindex \set @funindex set -Existen dos tipos de reglas de barrado: las reglas de @emph{agrupación -de barras} y las de @emph{terminación de barra}. Las reglas de -agrupación de barras son las más sencillas, pero se sobreescriben por -cualquier regla de terminación de barra que corresponda. - La colocación de las barras automáticas se determina aplicando las siguientes reglas en este orden: @@ -1669,207 +1661,43 @@ y como está especificado; en caso contrario: @item si está en vigor @code{\autoBeamOff} no poner barras; en caso contrario: -@item si es de aplicación alguna regla de terminación de barra, usarla para -determinar los lugares válidos en que las barras pueden terminar; en -caso contrario: - -@item si es de aplicación alguna regla válida (véase más abajo) de -agrupación de barras, usarla para agrupar las notas con las barras; en -caso contrario: - @item usar el valor de @code{beatLength} para agrupar las notas con barras @end itemize @i{@strong{Modificar las agrupaciones de pulsos}} -Si no hay definida ninguna regla de final de barra para la duración de -una barra en particular dentro del tipo de compás en uso, su barrado -se controla mediante tres propiedades de contexto: -@code{measureLength}, @code{beatLength} y @code{beatGrouping}. Estas -propiedades se deben establecer en los contextos @code{Score}, -@code{Staff} o @code{Voice} para delimitar el ámbito de su efecto. -Los valores predeterminados se establecen al procesarse las -instrucciones @code{\time}, por ello cualquier instrucción @code{\set} -que modifique su valor se deberá escribir después de todas las -instrucciones @code{\time}. - -@warning{Estas tres propiedades se hacen efectivas para una barra -concreta @strong{solamente} si no está predefinida ninguna regla de -terminación de barra para esa duración de la barra dentro del tipo de -compás en uso, o si todas esas reglas de terminación de barras han -sido devueltas a su valor inicial.} - -Dichas propiedades determinan el barrado de la siguiente forma: - -Las barras pueden dar comienzo en cualquier lugar (excepto si ya hay -una barra activa). Las barras terminan en un tiempo determinado por -los valores de @code{beatGrouping} y @code{beatLength}, como se ve a -continuación: - -@itemize - -@item -Si @code{beatGrouping} y @code{beatLength} con consistentes con -@code{measureLength}, se utiliza @code{beatGrouping} para determinar -los puntos finales de las barras. - -@item -Si @code{beatGrouping} y @code{beatLength} no concuerdan con -@code{measureLength}, se usa @code{beatLength} para determinar los -puntos finales de las barras. - -@end itemize - -De forma predeterminada, las propiedades the @code{measureLength} y -@code{beatLength} se derivan del compás establecido por la instrucción -@code{\time}. La longitud @code{measureLength} está establecida de -forma que sea exactamente la misma que la longitud del compás dado por -la indicación de compás, y la longitud del pulso @code{beatLength} -tiene un valor dado igual a una parte de compás (1/n, siendo n el -denominador del compás). - -El valor predeterminado de @code{beatGrouping} se toma de una tabla -que está en @file{scm/@/music@/-functions@/.scm}. Para localizarla, -véase @rlearning{Otras fuentes de información}. Define la agrupación -de pulsos para los compases de 3/8, 4/8, 5/8, 8/8 y todas las -indicaciones de compás compuesto usuales. - Tanto @code{measureLength} como @code{beatLength} son @i{momentos}, unidades de duración musical. Las cantidades del tipo @i{moment} se crean por la función de Scheme @code{ly:make-moment}. Para ver más -información sobre esta función, consulte @ref{Gestión del tiempo}. - -@code{beatGrouping} es una lista de enteros que dan el número de -pulsos en cada grupo. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grouping-beats.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{specifying-context-with-beatgrouping.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-beatlength-and-beatgrouping.ly} - -@funindex subdivideBeams - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{sub-dividing-beams.ly} - -@cindex compases, agrupaciones de -@cindex pulsos, agrupar -@cindex agrupación de pulsos -@cindex compases, subgrupos dentro de - -@funindex autoBeamSettings - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{conducting-signs,-measure-grouping-signs.ly} - - -@strong{@i{Modificar los puntos finales de las barras}} - -Se requieren reglas de terminación de barra cuando barras de distintas -duraciones han de terminar en diferentes puntos dentro del compás. -Por ejemplo, podríamos desear que las barras de corchea en 4/4 -terminaran solamente al final del compás o en la mitad del mismo, pero -que las barras de semicorchea terminasen en las posiciones de negra -para evitar barras continuas demasiado largas. Las reglas funcionan -como sigue: - -Las barras automáticas pueden comenzar en cualquier nota pero -solamente pueden terminar en unas pocas posiciones dentro del compás, -concretamente en las posiciones definidas por las propiedades de -@code{autoBeamSettings}. Estas propiedades consisten en una lista de -reglas que especifican dónde pueden terminar las barras. Las reglas -predeterminadas de @code{autoBeamSettings} están definidas en -@file{scm/@/auto@/-beam@/.scm}. Para localizarlo, consulte -@rlearning{Otras fuentes de información}. - -Para añadir una regla a la lista, utilice - -@example -#(override-auto-beam-setting - '(límite-barra - numerador-barra denominador-barra - numerador-compás denominador-compás) - numerador-momento denominador-momento [contexto]) -@end example - -@noindent -donde: - -@itemize - -@item @code{límite-barra} es el tipo de límite de barra automática que se -define. Puede ser @code{begin} o @code{end}, pero sólo es efectivo -@code{end}. - -@item @code{numerador-barra/denominador-barra} es la duración de la barra -a la que se quiere aplicar la regla. Se considera que una barra tiene -la duración de su nota más breve. Ajuste @code{numerador-barra} y -@code{denominador-barra} a un asterisco @code{'*'} para que la regla -se aplique a las barras de cualquier duración. - -@item @code{numerador-compás/denominador-compás} especifica la indicación de compás -a que se aplica esta regla. Si @code{numerador-compás} y -@code{denominador-compás} tienen el valor de un asterisco @code{'*'}, -esta regla se aplica a cualquier tipo de compás. +información sobre esta función, consulte @ref{Time administration}. -@item @code{numerador-momento/denominador-momento} es la posición dentro del -compás en que la barra debe terminar. - -@funindex score-override-auto-beam-setting -@funindex override-auto-beam-setting - -@item @code{contexto} es opcional, y especifica el contexto en que se debe -hacer el cambio. El valor predeterminado es @code{'Voice}. - -@code{#(score-override-auto-beam-setting '(A B C D) E F)} es -equivalente a @code{#(override-auto-beam-setting '(A B C D) E F -'Score)}. - -@end itemize - -Por ejemplo, si las barras automáticas siempre deben terminar sobre la -primera negra, para cualquier tipo de compás o duración de la barra, -use - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -Podemos forzar los ajustes de las barras para que tengan efecto sólo -sobre las barras cuya nota más breve sea de una cierta duración: - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -Podemos forzar los ajustes de las barras para que tengan efecto -solamente en ciertos tipos de compás: - -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d +@lilypond[quote,relative=2,verbatim] + \time 5/16 + c8^"beats" c16 c8 | + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3))) + c8^"(2+3)" c16 c8 + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2))) + c8^"(3+2)" c16 c8 +@end lilypond + +@lilypond[quote, verbatim,relative=1] +\new Staff << + \time 7/8 + \new Voice = one { + \relative c'' { + \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2))) + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3))) + f8 f f f f f f + } + } +>> @end lilypond En caso de usar varias voces, se debe especificar el contexto @@ -1879,89 +1707,60 @@ pentagrama: @lilypond[quote,verbatim,relative=2] \time 7/8 % rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) +% Context Voice specified - does not work correctly +% Because of autogenerated voices, all beating will +% be at beatLength (1 . 8) +\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) +% Works correctly with context Staff specified +\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> @end lilypond -@warning{Si se produce un comportamiento inesperado de las barras, -compruebe la existencia de una posible interferencia en los ajustes -predeterminados del barrado automático que están en -@file{scm/@/auto@/-beam@/.scm}, porque los finales de barra definidos -aquí aún son válidos además de los suyos.} - -@funindex revert-auto-beam-setting +@funindex revert-beam-setting -Debemos revertir cualquier final predeterminado indeseado o -conflictivo, para nuestro compás concreto. Podemos eliminar una regla -de terminación de barra previamente establecida o definida por el -usuario, usando +Beam settings can be reverted to get back to default behavior. This +is accomplished by using @code{\revertBeamSettings}. The arguments +are the same as for @code{\overrideBeamSettings}, except no value +for @var{grouping} is given: @example -#(revert-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) +\revertBeamSettings context time-signature rule-type @end example -@noindent -@code{límite-barra}, @code{numerador-barra}, @code{denominador-barra}, -@code{numerador-compás}, @code{denominador-compás}, -@code{numerador-momento}, @code{denominador-momento} y @code{contexto} -son los mismos que antes. @lilypond[quote,verbatim,relative=2] \time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -La regla de un enunciado @code{revert-auto-beam-setting} debe -corresponderse exactamente con la regla original. Esto es, no se -tiene en cuenta ninguna expansión de comodines. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a +\repeat unfold 16 {a16} +% set default rule for (1 1 1 1) grouping +\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1))) +\repeat unfold 16 {a16} +% revert the new rule +\revertBeamSettings #'Score #'(4 . 4) #'end +\repeat unfold 16 {a16} @end lilypond @snippets +@cindex beams, subdividing + @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} +{sub-dividing-beams.ly} + +@cindex measure groupings +@cindex beats, grouping +@cindex grouping beats +@cindex measure sub-grouping + +@funindex autoBeamSettings @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} +{conducting-signs,-measure-grouping-signs.ly} @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] {beam-endings-in-score-context.ly} -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - @cindex barra, última en la partitura @cindex barra, última en una voz polifónica diff --git a/Documentation/fr/notation/rhythms.itely b/Documentation/fr/notation/rhythms.itely index f252e073dd..dfa8c446db 100644 --- a/Documentation/fr/notation/rhythms.itely +++ b/Documentation/fr/notation/rhythms.itely @@ -64,17 +64,17 @@ noire, par exemple, qui équivaut à un 1/4 de ronde --- @emph{quarter note} en anglais --- s'écrit @code{4}, alors qu'une blanche --- @emph{half-note}, 1/2 ronde --- s'écrit @code{2}. Pour des notes plus longues qu'une ronde, vous devrez utiliser les commandes @code{\longa} -pour une longue, et @code{\breve} pour une brève, aussi appelée carrée. +pour une longue, et @code{\breve} pour une brève, aussi appelée carrée. Des durées plus courtes que la quintuple-croche --- 1/128 de ronde --- sont possibles, à condition de les ligaturer. - + @c Two 64th notes are needed to obtain beams @lilypond[quote,verbatim,relative=2] \time 8/1 c\longa c\breve c1 c2 c4 c8 c16 c32 c64 c64 @end lilypond - + @noindent Voici ces mêmes durées sans la fonction de ligature automatique. @@ -86,7 +86,7 @@ Voici ces mêmes durées sans la fonction de ligature automatique. c\longa c\breve c1 c2 c4 c8 c16 c32 c64 c64 @end lilypond - + Une note dont la durée est de quatre brèves s'obtient par la commande @code{\maxima}. Celle-ci n'est toutefois disponible que dans le cadre de la notation ancienne. Pour plus de détails, voir @ref{Notations anciennes}. @@ -316,7 +316,7 @@ se placer au sein de l'expression du nolet. Vous pouvez altérer la durée des notes, silences ou accords en leur joignant une fraction @var{N/M}, donnant @qq{@code{*}@var{N/M}} --- ou @qq{@code{*}@var{N}} si @var{M=1}. Ceci ne modifiera en rien l'apparence -des notes ou silences produits, mais affectera le rendu MIDI. +des notes ou silences produits, mais affectera le rendu MIDI. Dans l'exemple suivant, les trois premières notes prennent exactement deux temps, mais aucun triolet n'est imprimé. @@ -335,7 +335,7 @@ b16*4 c4 La durée d'un silence invisible ou saut de notes (@emph{skip}) peut elle aussi être affectée d'un multiplicateur. Cette technique permet -tout simplement de sauter plusieurs mesures, comme par exemple un +tout simplement de sauter plusieurs mesures, comme par exemple un @code{s1*23}. @cindex échelonnement de musique @@ -392,11 +392,11 @@ Morceaux choisis : Une liaison de tenue (ou de prolongation) relie deux notes adjacentes de même hauteur. Dans les faits, elle prolonge la durée d'une note. - + @warning{Une liaison de tenue ne doit pas être confondue avec une liaison d'@strong{articulation} ou de @strong{phrasé}. Une liaison de tenue est un moyen parmi d'autres pour prolonger la durée d'une note, -tout comme les points.} +tout comme les points.} Une liaison de tenue s'indique au moyen d'un tilde @code{~}. @@ -468,7 +468,7 @@ une note liée, la liaison doit être répétée, comme ici : Les liaisons @qq{Laissez vibrer} (@notation{L.v.}) sont utilisées pour le piano, la harpe, et certains instruments de percussion. Elles indiquent à l'instrumentiste de laisser sonner la note ou l'accord au -lieu de l'étouffer. Elles s'indiquent de la manière suivante : +lieu de l'étouffer. Elles s'indiquent de la manière suivante : @lilypond[quote,verbatim,relative=1] \laissezVibrer @@ -648,7 +648,7 @@ une note suivie de @code{\rest}. Un silence de même durée sera placé à la position où serait imprimée la note. Cela rend plus facile la mise en place de musique polyphonique, puisque le formateur automatique de collision des silences laissera ces silences tranquilles. - + @lilypond[quote,verbatim,relative=2] a'4\rest d'4\rest @end lilypond @@ -671,7 +671,7 @@ Manuel de notation : Morceaux choisis : @rlsr{Rhythms}. -Référence du programme : +Référence du programme : @rinternals{Rest}. @@ -747,7 +747,7 @@ du tout, pas même un symbole transparent. Morceaux choisis : @rlsr{Rhythms}. -Référence du programme : +Référence du programme : @rinternals{SkipMusic}. @@ -779,7 +779,7 @@ Ceci ne peut être utile que pour une mesure complètement vide. Sa durée doit donc correspondre à la longueur de la mesure telle que définie par la métrique. C'est la raison pour laquelle on utilisera aussi des points d'augmentation ou des fractions : - + @lilypond[quote,fragment,verbatim] \compressFullBarRests \time 2/4 @@ -848,7 +848,7 @@ R2.*2 | Vous pouvez aussi ajouter du texte à un silence multimesure en utilisant la syntaxe @var{note}-@code{markup} (cf. @ref{Mise en forme du texte}). La variable @code{\fermataMarkup} quant à elle permet d'ajouter un point -d'orgue : +d'orgue : @lilypond[quote,verbatim,fragment] \compressFullBarRests @@ -875,7 +875,7 @@ R1^"ça marche !" Un silence multimesure placé directement après une commande @code{\partial} risque fort de perturber le vérificateur de limites et -numéros de mesure. +numéros de mesure. @funindex \textLengthOn @@ -929,7 +929,7 @@ Manuel de notation : Morceaux choisis : @rlsr{Rhythms}. -Référence du programme : +Référence du programme : @rinternals{MultiMeasureRest}. @rinternals{MultiMeasureRestNumber}, @rinternals{MultiMeasureRestText}. @@ -1086,7 +1086,7 @@ Références internes : Les mesures incomplètes, telles que les anacrouses ou levées, doivent être entrées avec la commande @code{\partial}. La syntaxe de cette -commande est +commande est @example \partial @var{durée} @@ -1216,7 +1216,7 @@ Morceaux choisis : LilyPond ne change de ligne ou de page qu'au niveau des barres de mesure. Si votre musique non mesurée s'étend sur plus d'une ligne, il -vous faudra insérer des barres de mesure invisibles, +vous faudra insérer des barres de mesure invisibles, @example \bar "" @@ -1246,7 +1246,7 @@ pour indiquer où des sauts de ligne peuvent prendre place. @funindex times LilyPond gère les métriques composites, aussi bien de manière explicite -que de manière détournée --- modification de l'indicateur de métrique +que de manière détournée --- modification de l'indicateur de métrique et échelonnement de la durée des notes. @strong{@i{Portées aux métriques différentes, mesures d'égale longueur}} @@ -1385,13 +1385,13 @@ fausser l'espacement régulier entre les portées. On peut convertir automatiquement les notes longues en notes liées. Il suffit pour cela de remplacer le graveur @code{Note_heads_engraver} par le graveur @code{Completion_heads_engraver}. Dans l'exemple -suivant, les notes qui dépassent de la mesure sont divisées et liées. +suivant, les notes qui dépassent de la mesure sont divisées et liées. @lilypond[quote,verbatim,relative=1] \new Voice \with { \remove "Note_heads_engraver" \consists "Completion_heads_engraver" -} +} { c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 } @end lilypond @@ -1404,7 +1404,7 @@ exactement la durée des décalages de mesure. @seealso -Glossaire musicologique : +Glossaire musicologique : @rglos{tie} Manuel d'apprentissage : @@ -1425,7 +1425,7 @@ Références internes : Bien que toutes les durées --- particulièrement celles contenant des nolets --- ne puissent être exactement représentées avec des notes normales et des points, le graveur @code{Completion_heads_engraver} -n'insérera pas de nolet. +n'insèrera pas de nolet. @code{Completion_heads_engraver} affecte seulement les notes, il ne divise pas les silences. @@ -1513,7 +1513,7 @@ grille d'accords : Snippets: @rlsr{Rhythms}. -Référence du programme : +Référence du programme : @rinternals{RhythmicStaff}. @rinternals{Pitch_squash_engraver}. @@ -1546,7 +1546,7 @@ d'imprimer les ligatures. @funindex autoBeamOff @lilypond[quote,verbatim,relative=2] -\time 2/4 c8 c c c +\time 2/4 c8 c c c \time 6/8 c c c c8. c16 c8 @end lilypond @@ -1554,7 +1554,7 @@ Lorsque ce comportement automatisé n'est pas satisfaisant, on peut définir des groupements manuellement --- voir @ref{Barres de ligature manuelles}. Dans le cas où le groupe de notes en question contient un silence, il est @strong{impératif} d'indiquer explicitement les début et fin de la -ligature. +ligature. Lorsque les ligatures automatiques ne sont pas nécessaires, il suffit de désactiver la fonctionnalité par un @code{\autoBeamOff} --- réactivation @@ -1572,8 +1572,8 @@ c16 c8 @cindex ligature et mélisme @warning{Si des ligatures sont utilisées dans les paroles d'une chanson -(pour indiquer des mélismes), les ligatures automatiques doivent être -désactivées, avec @code{\autoBeamOff}, et indiquées manuellement.} +(pour indiquer des mélismes), les ligatures automatiques doivent être +désactivées, avec @code{\autoBeamOff}, et indiquées manuellement.} Des règles de dérogation au comportement automatique par défaut sont possibles ; voir @ref{Définition des règles de ligature automatique}. @@ -1610,7 +1610,7 @@ Fichiers installés : Morceaux choisis : @rlsr{Rhythms}. -Références internes : +Références internes : @rinternals{Beam}. @@ -1635,22 +1635,19 @@ altérations appartenant à d'autres voix. @cindex paroles et ligatures @funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) +@funindex beamSettings @funindex measureLength @funindex beatLength -@funindex beatGrouping @funindex \time @funindex time @funindex \set @funindex set -LilyPond dispose de deux types de règles en matière de ligature : des -règles concernant le @strong{regroupement}, et des règles concernant la -@strong{terminaison} des ligatures. Les règles de regroupement sont des -plus simples mais peuvent être outrepassées par des règles de -terminaison. +The placement of automatic beams is determined by the time signature. +Three types of rules are used for determining the end of automatic +beams: @emph{default} rules +for the time signature, @emph{explicit} rules for the beam in the time +signature, and the @emph{beatLength} for the time signature. Les règles déterminant le positionnement des ligatures automatiques s'appliquent dans l'ordre suivant de priorité : @@ -1658,17 +1655,11 @@ s'appliquent dans l'ordre suivant de priorité : @itemize @item Une ligature explicite --- indiquée par @code{[@dots{}]} --- sera -toujours respectée ; sinon +toujours respectée ; sinon @item si @code{\autoBeamOff} a été activé, il n'y aura pas de ligature ; sinon -@item si une règle de terminaison peut s'appliquer, s'y référer pour -déterminer à quel moment une ligature peut prendre fin ; sinon - -@item si une règle valide de regroupement par ligature (voir ci-dessous) -peut s'appliquer, s'y référer ; sinon - @item utiliser la valeur de @code{beatLength} pour regrouper les notes par des ligatures. @@ -1676,53 +1667,7 @@ par des ligatures. @i{@strong{Modification des ligatures selon la pulsation}} -Lorsque, pour une métrique donnée, aucune règle n'a été définie quant à -la fin ni la longueur d'une ligature particulière, cette ligature sera -contrôlée par trois propriétés : @code{measureLength}, @code{beatLength} -et @code{beatGrouping}. Ces propriétés sont définies, selon la portée -de leur action, au niveau des contextes @code{Score}, @code{Staff} ou -@code{Voice}. Leurs valeurs par défaut sont initialisées par la -commande @code{\time} ; par voie de conséquence, toute commande -@code{\set} destinée à en modifier les valeurs doit se placer après la -commande @code{\time}. - -@warning{Ces trois propriétés s'appliqueront à une ligature donnée dans -@strong{deux cas seulement} : s'il n'existe aucune règle de fin pour la -longueur d'une ligature dans la métrique considérée, ou si toutes les -règles de fin ont été annulées.} - -Ces propriétés déterminent la manière de ligaturer ainsi : - -Une ligature peut débuter n'importe où, à moins qu'il n'y en ait déjà -une d'active. Les ligatures se terminent à un moment déterminé par les -valeurs de @code{beatGrouping} et @code{beatLength}, selon le principe -suivant : - -@itemize - -@item Si @code{beatGrouping} et @code{beatLength} concordent avec -@code{measureLength}, @code{beatGrouping} est utilisé pour déterminer les -terminaisons des ligatures. - -@item Si @code{beatGrouping} et @code{beatLength} ne sont pas en -concordance avec @code{measureLength}, @code{beatLength} est utilisé -pour déterminer les terminaisons des ligatures. - -@end itemize - -@code{measureLength} et @code{beatLength} tirent leur valeur par défaut -à partir de la métrique telle que définie par la commande @code{\time}. -@code{measureLength} est définie comme étant la longueur d'une mesure -complète pour la métrique donnée. Enfin, @code{beatLength} prend la -valeur du dénominateur de la métrique. - -Les valeurs par défaut de @code{beatGrouping} sont répertoriées dans une -table contenue dans le fichier @file{scm/@/music@/-functions@/.scm} --- -consultez @rlearning{Autres sources de documentation} pour savoir où il se -situe. Cette table définit les règles de groupement pour les mesures à -3/8, 4/8, 5/8, 8/8, ainsi que les mesures composées les plus courantes. - -@code{measureLength} et @code{beatLength} constituent tous deux des +@code{beatLength} constituent tous deux des @strong{moments}, autrement dit des unités de durée musicale. La fonction Scheme @code{ly:make-moment} est tout particulièrement chargée de créer cette quantité de type @i{moment} --- pour plus d'information, @@ -1736,131 +1681,34 @@ nombre de pulsations de chaque groupe. @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] {grouping-beats.ly} -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{specifying-context-with-beatgrouping.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-beatlength-and-beatgrouping.ly} - -@funindex subdivideBeams - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{sub-dividing-beams.ly} - -@cindex mesure et regroupements -@cindex pulsation et regroupements -@cindex groupement par pulsation -@cindex mesure, subdivision - -@funindex autoBeamSettings - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{conducting-signs,-measure-grouping-signs.ly} - - -@strong{@i{Modification du bornage des ligatures}} - -Les règles de fin de ligature sont nécessaires lorsque des ligatures -relatives à différentes durées doivent se terminer à différents endroits -au sein de la mesure. Par exemple, il peut être souhaitable, dans une -mesure en 4/4, que les barres de ligature des croches s'achèvent -seulement à la fin d'une mesure ou au milieu de celle-ci ; mais que -pour des doubles-croches les ligatures se terminent toutes les noires, -afin d'éviter de trop longues séries ligaturées. Ces règles fonctionnent -de la manière suivante : - -Dans les métriques courantes, les ligatures automatiques peuvent commencer -sur n'importe quelle note, mais ne peuvent se terminer qu'à certains -points précis dans la mesure : sur une pulsation, ou après toute durée -spécifiée par les propriétés nommées @code{autoBeamSettings}. Ces -propriétés consistent en une liste de règles relatives au début ou à la -fin des ligatures. Par défaut, elles sont définies dans le fichier -@file{scm/@/auto@/-beam@/.scm} --- pour le localiser, voir -@rlearning{Autres sources de documentation}. - -On peut ajouter à cette liste une nouvelle règle, au moyen de la commande - -@example -#(override-auto-beam-setting - '(extrémité - ligature-numérateur ligature-dénominateur - métrique-numérateur métrique-dénominateur) - moment-numérateur moment-dénominateur [contexte]) -@end example - -@noindent -où - -@itemize - -@item @code{extrémité} désigne le début (@code{begin}) ou la fin -(@code{end}) de la ligature. Notez que seul @code{end} ne sera effectif. - -@item @code{ligature-numérateur/ligature-dénominateur} désigne la -valeur rythmique de la note que l'on veut affecter, ou de la plus brève -des notes concernées. Si cette règle doit s'appliquer à toutes les -ligatures, remplacez @code{ligature-numérateur} et -@code{ligature-dénominateur} par des étoiles @qq{@code{*}}. - - -@item @code{métrique-numérateur/métrique-dénominateur} est le chiffre -de mesure dans lequel la règle doit s'appliquer. Si celle-ci doit -s'appliquer dans toutes les métriques, remplacez -@code{métrique-numérateur} et @code{métrique-dénominateur} par des -étoiles @qq{@code{*}}. - -@item @code{moment-numérateur/moment-dénominateur} est l'emplacement, -dans la mesure, auquel les ligatures doivent s'achever. - -@funindex score-override-auto-beam-setting -@funindex override-auto-beam-setting - -@item @code{contexte} est un argument facultatif, qui détermine le -contexte dans lequel la règle doit s'appliquer. Par défaut, il s'agit -de @code{'Voice}. - -@code{#(score-override-auto-beam-setting '(A B C D) E F)} équivaut à -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. - -@end itemize - -Par exemple, si l'on veut que les ligatures s'achèvent toujours après la -première noire, quelles que soient la métrique et la durée de -regroupement : - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -On peut obliger une règle de ligature à ne s'appliquer qu'à des groupes -dont la note la plus brève est d'une valeur précise : - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | +@lilypond[quote,relative=2,verbatim] + \time 5/16 + c8^"beats" c16 c8 | + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3))) + c8^"(2+3)" c16 c8 + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2))) + c8^"(3+2)" c16 c8 +@end lilypond + +@lilypond[quote, verbatim,relative=1] +\new Staff << + \time 7/8 + \new Voice = one { + \relative c'' { + \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2))) + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3))) + f8 f f f f f f + } + } +>> @end lilypond -On peut obliger une règle de ligature à ne s'appliquer que pour une -métrique donnée : - -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d -@end lilypond Lorsque plusieurs voix cohabitent sur une même portée et que les règles de ligature doivent s'appliquer sans distinction, il faut spécifier que @@ -1869,89 +1717,50 @@ ces règles affectent le contexte @code{Staff} : @lilypond[quote,verbatim,relative=2] \time 7/8 % rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) +% Context Voice specified - does not work correctly +% Because of autogenerated voices, all beating will +% be at beatLength (1 . 8) +\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) +% Works correctly with context Staff specified +\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> @end lilypond -@warning{Si une ligature se fait de manière inattendue, pensez à vérifer -les règles automatiques dans le fichier @file{scm/@/auto@/-beam@/.scm} -pour rechercher d'éventuels conflits, étant donné que les règles par -défaut s'ajoutent à vos propres règles.} - -@funindex revert-auto-beam-setting - -Toute règle par défaut ou personnalisée conduisant à des ligatures -indésirables doit être désactivée de la manière suivante : - -@example -#(revert-auto-beam-setting - '(extrémité - ligature-numérateur ligature-dénominateur - métrique-numérateur métrique-dénominateur) - moment-numérateur moment-dénominateur [contexte]) -@end example - -@noindent -@code{extrémité}, @code{ligature-numérateur}, -@code{ligature-dénominateur}, @code{métrique-numérateur}, -@code{métrique-dénominateur}, @code{moment-numérateur}, -@code{moment-dénominateur} et @code{contexte} étant les mêmes que plus -haut. Il est même possible de désactiver des règles que l'on n'a pas -explicitement créées : les règles par défaut, qui se trouvent dans le -fichier @file{scm/@/auto@/-beam@/.scm}. +@funindex revertBeamSettings @lilypond[quote,verbatim,relative=2] \time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -La commande @code{revert-auto-beam-setting} requiert exactement les -mêmes arguments que la règle d'origine. En d'autres termes, les étoiles -ne seront pas prises en compte ici. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a +\repeat unfold 16 {a16} +% set default rule for (1 1 1 1) grouping +\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1))) +\repeat unfold 16 {a16} +% revert the new rule +\revertBeamSettings #'Score #'(4 . 4) #'end +\repeat unfold 16 {a16} @end lilypond @snippets -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} +@cindex beams, subdividing @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} +{sub-dividing-beams.ly} -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-endings-in-score-context.ly} +@cindex measure groupings +@cindex beats, grouping +@cindex grouping beats +@cindex measure sub-grouping -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn +@funindex autoBeamSettings + +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{conducting-signs,-measure-grouping-signs.ly} -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined +@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] +{beam-endings-in-score-context.ly} @cindex ligature en fin de partition @cindex ligature en fin de voix polyphonique @@ -2009,7 +1818,7 @@ effet de l'empêcher d'être ligaturée : @funindex stemRightBeamCount LilyPond peut déterminer automatiquement les sous-groupes à -l'intérieur d'un groupement de notes, bien que le résultat ne soit pas +l'intérieur d'un groupement de notes, bien que le résultat ne soit pas toujours optimal. Les propriétés @code{stemLeftBeamCount} et @code{stemRightBeamCount} permettent alors d'ajuster ce comportement. Lorsque l'une ou l'autre de ces propriétés est définie, elle ne @@ -2374,7 +2183,7 @@ Référence du programme : Les numéros de mesure peuvent entrer en collision avec les crochets d'un @rinternals{StaffGroup}. La propriété @code{padding} --- décalage --- de l'objet @rinternals{BarNumber} permet alors d'ajuster leur -positionnement. +positionnement. @node Vérification des limites et numéros de mesure @@ -2517,12 +2326,12 @@ c1 @end lilypond Le fichier @file{scm/@/translation@/-functions@/.scm} comporte les -définitions de @code{format-mark-numbers} (comportement par défaut), +définitions de @code{format-mark-numbers} (comportement par défaut), @code{format-mark-box-numbers}, @code{format-mark-letters} et @code{format-mark-box-letters}. Vous pouvez vous en inspirer pour d'autres fonctions de formatage. -@code{format-mark-barnumbers}, @code{format-mark-box-barnumbers} et +@code{format-mark-barnumbers}, @code{format-mark-box-barnumbers} et @code{format-mark-circle-barnumbers} permettent d'imprimer le numéro de mesure au lieu des compteurs alphabétique ou numérique. @@ -2550,7 +2359,7 @@ définis. Un @code{\markup} peut néanmoins s'utiliser en argument. @funindex musicglyph Un @code{\mark} peut contenir un glype musical tel que le signe -@emph{segno}. +@emph{segno}. @lilypond[fragment,quote,ragged-right,verbatim,relative] c1 \mark \markup { \musicglyph #"scripts.segno" } @@ -2776,7 +2585,7 @@ correspondant à la durée des petites notes. \new Staff { c4 \bar "|:" \grace s16 d2. } >> @end lilypond - + Seules des expressions musicales séquentielles peuvent être utilisées pour des petites notes ; il n'est pas possible d'imbriquer ni de juxtaposer des sections de petites notes, faute de quoi le traitement du @@ -2869,7 +2678,7 @@ ligatures automatiques. @item measurePosition Le moment où l'on en est dans la mesure en cours. Cette quantité est remise à@tie{}0 dès lors qu'on dépasse @code{measureLength} ; la variable -@code{currentBarNumber} est alors incrémentée. +@code{currentBarNumber} est alors incrémentée. @item timing Lorsqu'on lui assigne la valeur @emph{vrai}, les valeurs ci-dessus @@ -2897,7 +2706,7 @@ c4 c1 @noindent Comme le montre cet exemple, @code{ly:make-moment n m} construit une -durée de n/m fois une ronde. +durée de n/m fois une ronde. Par conséquent, @code{ly:make-moment 1 8} correspond à une croche, et @code{ly:make-moment 7 16} à la durée de sept doubles-croches. @@ -2910,7 +2719,7 @@ Dans ce manuel : Morceaux choisis : @rlsr{Rhythms}. -Références internes : +Références internes : @rinternals{Timing_translator}, @rinternals{Score} diff --git a/Documentation/music-glossary.tely b/Documentation/music-glossary.tely index fdae1814e5..d8a8af3ba0 100644 --- a/Documentation/music-glossary.tely +++ b/Documentation/music-glossary.tely @@ -2233,9 +2233,6 @@ A time signature that additively combines two or more unequal meters, e.g., #(set-time-signature 8 8 '(3 2 3)) \override Staff.TimeSignature #'stencil = #(compound-time "3" "2" "3" "8") - #(override-auto-beam-setting '(end 1 8 8 8) 3 8) - #(override-auto-beam-setting '(end 1 8 8 8) 5 8) - c8 d e f4 d8 c bes c4 g'8 e c f4. \bar "||" diff --git a/Documentation/notation/rhythms.itely b/Documentation/notation/rhythms.itely index 9422068a21..eb6771b617 100644 --- a/Documentation/notation/rhythms.itely +++ b/Documentation/notation/rhythms.itely @@ -506,10 +506,10 @@ c2 ~ c c2 ~ c @end lilypond -Dash pattern definitions for ties have the same structure as +Dash pattern definitions for ties have the same structure as dash pattern definitions for slurs. For more information about complex dash patterns, -see the snippets under @ref{Slurs}. +see the snippets under @ref{Slurs}. @predefined @code{\tieUp}, @@ -538,7 +538,7 @@ Music Glossary: @rglos{tie}, @rglos{laissez vibrer}. -Notation Reference: +Notation Reference: @ref{Slurs}, @ref{Automatic note splitting}. @@ -1543,8 +1543,8 @@ c16 c8 automatic beaming should be switched off with @code{\autoBeamOff} and the beams indicated manually.} -Beaming patterns that differ from the automatic defaults may be -created, see @ref{Setting automatic beam behavior}. +Beaming patterns that differ from the automatic defaults can be +created; see @ref{Setting automatic beam behavior}. @predefined @@ -1597,23 +1597,22 @@ Beams can collide with note heads and accidentals in other voices @cindex lyrics and beaming @funindex autoBeaming -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) +@funindex beamSettings @funindex measureLength @funindex beatLength -@funindex beatGrouping @funindex \time @funindex time @funindex \set @funindex set -There are two types of beaming rules: @emph{beam-grouping} -rules and @emph{beam-ending} rules. Beam-grouping rules are the -simplest, but are over-ridden by any beam-ending rules which apply. +The placement of automatic beams is determined by the time signature. +Three types of rules are used for determining the end of automatic +beams: @emph{default} rules +for the time signature, @emph{explicit} rules for the beam in the time +signature, and the @emph{beatLength} for the time signature. -The placement of automatic beams is determined by applying the -following rules in order: +The following rules, in order of priority, apply when determining +the appearance of beams: @itemize @@ -1622,11 +1621,12 @@ as specified, otherwise @item if @code{\autoBeamOff} is in force do not beam, otherwise -@item if a beam-ending rule applies use it to determine the valid +@item if an explicit beam-ending rule is defined for the beam type +in the time signature, use it to determine the valid places where beams may end, otherwise -@item if a valid (see below) beat-grouping rule applies use it to -group notes with beams, otherwise +@item if a default beam-ending rule is defined in the time signature, +use it to group notes with beams, otherwise @item use the value of @code{beatLength} to group notes with beams @@ -1634,182 +1634,81 @@ group notes with beams, otherwise @i{@strong{Modifying the grouping of beats}} -If there are no beam-ending rules defined for the beam duration of a -particular beam in the time signature in use, its beaming is -controlled by three context properties: @code{measureLength}, -@code{beatLength} and @code{beatGrouping}. These properties may be -set in the @code{Score}, @code{Staff} or @code{Voice} contexts to -delimit their scope. The default values are set while processing -@code{\time} commands, so any @code{\set} commands to modify their -value must be placed after all @code{\time} commands. - -@warning{These three properties become effective for a particular -beam @strong{only} if there are no beam-ending rules predefined for -that beam's duration in the time signature in use, or if these -beam-ending rules have all been reverted.} - -These determine the beaming as follows: - -Beams may begin anywhere (unless a beam is already active). Beams -end at a time determined by the values of @code{beatGrouping} and -@code{beatLength}, as follows: - -@itemize - -@item If @code{beatGrouping} and @code{beatLength} are consistent -with @code{measureLength}, @code{beatGrouping} is used to determine -the end points of beams. - -@item If @code{beatGrouping} and @code{beatLength} are inconsistent -with @code{measureLength}, @code{beatLength} is used to determine -the end points of beams. - -@end itemize - -By default the @code{measureLength} and @code{beatLength} are +By default @code{beatLength} is derived from the time signature set by the @code{\time} command. -The @code{measureLength} is set to be exactly the same length as -the measure length given by the time signature, and the -@code{beatLength} is set to be the same as one over the denominator +The @code{beatLength} is set to be one over the denominator of the time signature. -The default value of @code{beatGrouping} is taken from a table in -@file{scm/@/music@/-functions@/.scm}. To find this, see -@rlearning{Other sources of information}. It defines the beat -grouping for 3/8, 4/8, 5/8, 8/8, and all the common compound time -signatures. - -Both @code{measureLength} and @code{beatLength} are @i{moments}, -units of musical duration. A quantity of type @i{moment} is +@code{beatLength} is a @i{moment}, +a unit of musical duration. A quantity of type @i{moment} is created by the scheme function @code{ly:make-moment}. For more information about this function, see @ref{Time administration}. -@code{beatGrouping} is a list of integers giving the number of -beats in each group. - -@snippets - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{grouping-beats.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{specifying-context-with-beatgrouping.ly} - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{using-beatlength-and-beatgrouping.ly} - -@funindex subdivideBeams - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{sub-dividing-beams.ly} - -@cindex measure groupings -@cindex beats, grouping -@cindex grouping beats -@cindex measure sub-grouping - -@funindex autoBeamSettings - -@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{conducting-signs,-measure-grouping-signs.ly} +Autobeam and beam subdivide settings are stored in the +@code{beamSettings} property. Default values of @code{beamSettings} +are determined in @file{scm/beam-settings.scm}. Entries in +@code{beamSettings} are indexed by time signature and +rule type. +Time signature should be a scheme pair , e.g. @code{#'(4 . 4)}. -@strong{@i{Modifying the beam end points}} +Rule type should be @code{#'end} for beam ending and @code{#'subdivide} for +beam subdivision. -Beam-ending rules are required when beams of different durations are -to end at different points within the measure. For example, it may -be desirable for eighth-note beams in 4/4 time to end only at the -end of the measure or half-way through it, but for sixteenth-note -beams to end at quarter note positions to avoid overly long beamed -runs. The rules work as follows: - -Automatic beams can start on any note but can end at only a few -positions within the measure, namely at positions specified by the -properties in @code{autoBeamSettings}. These properties consist of -a list of rules defining where beams can end. The default -@code{autoBeamSettings} rules are defined in -@file{scm/@/auto@/-beam@/.scm}. To find this file, see -@rlearning{Other sources of information}. - -In order to add a rule to the list, use +The ending and subdivision rules consist of a scheme alist +(or list of pairs) that +indicates the beam type and the grouping to be applied to that +beam type. @example -#(override-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) +#'((beam-type1 . grouping-1) + (beam-type2 . grouping-2) + (beam-type3 . grouping-3)) @end example -@noindent -where - -@itemize - -@item @code{beam-limit} is the type of automatic beam limit -defined. This can be either @code{begin} or @code{end} but -only @code{end} is effective. - -@item @code{beam-numerator/beam-denominator} is the beam duration -to which the rule is to apply. A beam is considered to have the -duration of its shortest note. Set @code{beam-numerator} and -@code{beam-denominator} to @code{'*'} to have this rule apply to beams -of any duration. - -@item @code{time-signature-numerator/time-signature-denominator} -specifies the time signature to which this rule should apply. If -@code{time-signature-numerator} and @code{time-signature-denominator} -are set to @code{'*'} this rule will apply in any time signature. - -@item @code{moment-numerator/moment-denominator} is the position -in the bar at which the beam should end. - -@funindex score-override-auto-beam-setting -@funindex override-auto-beam-setting - -@item @code{context} is optional, and it specifies the context at which -the change should be made. The default is @code{'Voice}. +Beam type is either a scheme pair indicating the duration +of the beam, e.g. @code{(1 . 16)}, or @code{*} to indicate a +default rule, which applies to all beams if no explicit rule is +defined. -@code{#(score-override-auto-beam-setting '(A B C D) E F)} is equivalent to -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. +Grouping is a scheme list indicating the grouping to be applied to +the beam. For default rules (where beam type is +@code{*}, the grouping is in units of @code{beatLength}. +For explicit rules, the grouping is in units of the beam type. -@end itemize - -For example, if automatic beams should always end on the first quarter -note, whatever the time signature or beam duration, use - -@lilypond[quote,verbatim,relative=2] -a8 a a a a a a a -#(override-auto-beam-setting '(end * * * *) 1 4) -a8 a a a a a a a -@end lilypond - -You can force the beam settings to take effect only on beams whose shortest -note is a certain duration - -@lilypond[quote,verbatim,relative=2] -\time 2/4 -% end 1/16 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -% end 1/32 beams for all time signatures at the 1/16 moment -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -You can force the beam settings to take effect only in certain time -signatures +Beam settings are changed with +@code{\overrideBeamSettings} and @code{\revertBeamSettings}. -@lilypond[quote,verbatim,relative=2] -\time 5/8 -% end beams of all durations in 5/8 time signature at the 2/8 moment -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d +@lilypond[quote,relative=2,verbatim] + \time 5/16 + c8^"beats" c16 c8 | + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3))) + c8^"(2+3)" c16 c8 + \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2))) + c8^"(3+2)" c16 c8 +@end lilypond + +Beam setting changes can be limited to specific contexts. If no +setting is included in a lower-level context, the setting of the +enclosing context will apply. + +@lilypond[quote, verbatim,relative=1] +\new Staff << + \time 7/8 + \new Voice = one { + \relative c'' { + \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2))) + a8 a a a a a a + } + } + \new Voice = two { + \relative c' { + \voiceTwo + \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3))) + f8 f f f f f f + } + } +>> @end lilypond When multiple voices are used the @code{Staff} context must be @@ -1819,88 +1718,58 @@ staff: @lilypond[quote,verbatim,relative=2] \time 7/8 % rhythm 3-1-1-2 -% Context not specified - does not work correctly -#(override-auto-beam-setting '(end * * 7 8) 3 8) -#(override-auto-beam-setting '(end * * 7 8) 4 8) -#(override-auto-beam-setting '(end * * 7 8) 5 8) +% Context Voice specified -- does not work correctly +% Because of autogenerated voices, all beating will +% be at beatLength (1 . 8) +\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> -% Works correctly with context specified -#(override-auto-beam-setting '(end * * 7 8) 3 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 4 8 'Staff) -#(override-auto-beam-setting '(end * * 7 8) 5 8 'Staff) +% Works correctly with context Staff specified +\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2))) << {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >> @end lilypond -@warning{If any unexpected beam behavior occurs, check the default -automatic beam settings in @file{scm/@/auto@/-beam@/.scm} for -possible interference, because the beam endings defined there will -still apply in addition to your own.} - -@funindex revert-auto-beam-setting +@funindex revertBeamSettings -Any unwanted or conflicting default endings must be reverted for -your time signature(s). Existing default or user-defined -beam-ending rules are removed by using +Beam settings can be reverted to get back to default behavior. This +is accomplished by using @code{\revertBeamSettings}. The arguments +are the same as for @code{\overrideBeamSettings}, except no value +for @var{grouping} is given: @example -#(revert-auto-beam-setting - '(beam-limit - beam-numerator beam-denominator - time-signature-numerator time-signature-denominator) - moment-numerator moment-denominator [context]) +\revertBeamSettings context time-signature rule-type @end example -@noindent -@code{beam-limit}, @code{beam-numerator}, @code{beam-denominator}, -@code{time-signature-numerator}, @code{time-signature-denominator}, -@code{moment-numerator}, @code{moment-denominator} and @code{context} -are the same as above. @lilypond[quote,verbatim,relative=2] \time 4/4 -a16 a a a a a a a a a a a a a a a -% undo a rule ending 1/16 beams in 4/4 time at 1/4 moment -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -The rule in a @code{revert-auto-beam-setting} statement must exactly -match the original rule. That is, no wildcard expansion is taken into -account. - -@lilypond[quote,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a +\repeat unfold 16 {a16} +% set default rule for (1 1 1 1) grouping +\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1))) +\repeat unfold 16 {a16} +% revert the new rule +\revertBeamSettings #'Score #'(4 . 4) #'end +\repeat unfold 16 {a16} @end lilypond @snippets +@cindex beams, subdividing + @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{beam-grouping-in-7-8-time.ly} +{sub-dividing-beams.ly} + +@cindex measure groupings +@cindex beats, grouping +@cindex grouping beats +@cindex measure sub-grouping @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] -{reverting-default-beam-endings.ly} +{conducting-signs,-measure-grouping-signs.ly} @lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle] {beam-endings-in-score-context.ly} -@funindex \autoBeamOff -@funindex autoBeamOff -@funindex \autoBeamOn -@funindex autoBeamOn - -@predefined -@code{\autoBeamOff}, -@code{\autoBeamOn}. -@endpredefined - - @cindex beam, last in score @cindex beam, last in polyphonic voice @@ -2147,8 +2016,8 @@ Additionally, a bar line can be printed as a simple tick: @lilypond[quote,relative=1,verbatim] f1 \bar "'" @end lilypond -However, as such ticks are typically used in Gregorian chant, it is preferable -to use @code{\divisioMinima} there instead, described in the section +However, as such ticks are typically used in Gregorian chant, it is preferable +to use @code{\divisioMinima} there instead, described in the section @ref{Divisiones} in Gregorian chant. diff --git a/Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly b/Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly index 69537fa17c..fa6de687da 100644 --- a/Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly +++ b/Documentation/snippets/automatic-beams-two-per-two-in-4-4-or-2-2-time-signature.ly @@ -1,10 +1,9 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { - lsrtags = "rhythms" - %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca texidoces = " En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma @@ -25,6 +24,31 @@ En utilisant une macro qui modifie le comportement des ligatures automatiques, voici comment obtenir des ligatures basées sur la valeur d'une noire. +" + doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" + + lsrtags = "rhythms" + +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +En un compás sencillo como 2/2 ó 4/4, las corcheas se barran de forma +predeterminada como dos grupos de cuatro. + +Utilizando un macro que seobreescribe el comportamiento automático del +barrado, este fragmento de código cambia el barrado a pulsos de negra. + +" + doctitlees = "Barras automáticas de dos en dos en los compases de 4/4 o de 2/2" + +%% Translation of GIT committish: 1154b407d42f303a024598296ad36ab6c93e2b5a + texidocfr = " +Dans une métrique simple comme 4/4 ou 2/2, les croches sont ligaturées +par défaut en deux groupes de quatre. + +En utilisant une macro qui modifie le comportement des ligatures +automatiques, voici comment obtenir des ligatures basées sur la valeur +d'une noire. + " doctitlefr = "Ligature automatique deux par deux, aussi bien en 4/4 qu'en 2/2" @@ -33,7 +57,7 @@ In a simple time signature of 2/2 or 4/4, 8th notes are beamed by default as two sets of four. Using a macro which overrides the autobeaming behavior, this snippet -changes the beaming to quarter note beats. +changes the beaming to quarter note beats. " doctitle = "Automatic beams two per two in 4/4 or 2/2 time signature" @@ -47,10 +71,12 @@ changes the beaming to quarter note beats. % macro for beamed two per two in 2/2 and 4/4 time signature qBeam = { - #(override-auto-beam-setting '(end 1 8 * *) 1 4 'Staff) - #(override-auto-beam-setting '(end 1 8 * *) 2 4 'Staff) - #(override-auto-beam-setting '(end 1 8 * *) 3 4 'Staff) -} + \overrideBeamSettings #'Staff #'(4 . 4) #'end #'((* . (1 1 1 1))) + \overrideBeamSettings #'Staff #'(2 . 2) #'end + #'((* . (1 1)) + ((1 . 8) . (2 2 2 2))) +} % begin verbatim + \score { << diff --git a/Documentation/snippets/beam-endings-in-score-context.ly b/Documentation/snippets/beam-endings-in-score-context.ly index 9e12eb1610..23593b8402 100644 --- a/Documentation/snippets/beam-endings-in-score-context.ly +++ b/Documentation/snippets/beam-endings-in-score-context.ly @@ -1,6 +1,7 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { %% Translation of GIT committish: 21c8461ea87cd670a35a40b91d3ef20de03a0409 @@ -38,25 +39,28 @@ sich auf alle Systeme aus, können aber auf @code{Staff}- und texidoc = " Beam-ending rules specified in the @code{Score} context apply to all staves, but can be modified at both @code{Staff} and @code{Voice} -levels: +levels: " doctitle = "Beam endings in Score context" } % begin verbatim + \relative c'' { \time 5/4 % Set default beaming for all staves - #(score-override-auto-beam-setting '(end * * 5 4) 3 8) - #(score-override-auto-beam-setting '(end * * 5 4) 7 8) + \overrideBeamSettings #'Score #'(5 . 4) #'end + #'(((1 . 8) . (3 4 3)) + ((1 . 16) . (6 8 6)) + ((1 . 32) . (12 16 12))) << \new Staff { c8 c c c c c c c c c } \new Staff { % Modify beaming for just this staff - #(override-auto-beam-setting '(end * * 5 4) 6 8 'Staff) - #(revert-auto-beam-setting '(end * * 5 4) 7 8 'Staff) + \overrideBeamSettings #'Staff #'(5 . 4) #'end + #'((* . (3 2))) c8 c c c c c c c c c } \new Staff { @@ -69,8 +73,8 @@ levels: % Modify beaming for this voice only \new Voice { \voiceTwo - #(override-auto-beam-setting '(end * * 5 4) 6 8) - #(revert-auto-beam-setting '(end * * 5 4) 7 8) + \overrideBeamSettings #'Voice #'(5 . 4) #'end + #'((* . (3 2))) a8 a a a a a a a a a } >> diff --git a/Documentation/snippets/beam-grouping-in-7-8-time.ly b/Documentation/snippets/beam-grouping-in-7-8-time.ly index 568ecacd94..c9c17ad7f9 100644 --- a/Documentation/snippets/beam-grouping-in-7-8-time.ly +++ b/Documentation/snippets/beam-grouping-in-7-8-time.ly @@ -1,6 +1,7 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { %% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 @@ -41,18 +42,19 @@ für 2/8 und 5/8 definiert werden: There are no default automatic beam groupings specified for 7/8 time, so if automatic beams are required the grouping must be specified. For example, to group all beams 2-3-2 in 7/8 time, specify beam endings at -2/8 and 5/8: +2/8 and 5/8: " doctitle = "Beam grouping in 7/8 time" } % begin verbatim + \relative c'' { \time 7/8 % rhythm 2-3-2 a8 a a a a a a - #(override-auto-beam-setting '(end * * 7 8) 2 8) - #(override-auto-beam-setting '(end * * 7 8) 5 8) + \overrideBeamSettings #'Score #'(7 . 8) #'end + #'((* . (2 3 2))) a8 a a a a a a } diff --git a/Documentation/snippets/chordchanges-for-fretboards.ly b/Documentation/snippets/chordchanges-for-fretboards.ly index 5f01babdbb..fa1e3626b6 100644 --- a/Documentation/snippets/chordchanges-for-fretboards.ly +++ b/Documentation/snippets/chordchanges-for-fretboards.ly @@ -14,7 +14,6 @@ cuando el acorde cambia o al comienzo de una nueva línea. doctitlees = "Cambios de acorde de posiciones de trastes" - %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d texidocde = " Bunddiagramme können definiert werden, sodass sie nur angezeigt werden, diff --git a/Documentation/snippets/compound-time-signatures.ly b/Documentation/snippets/compound-time-signatures.ly index b3017d0f76..55025e2b19 100644 --- a/Documentation/snippets/compound-time-signatures.ly +++ b/Documentation/snippets/compound-time-signatures.ly @@ -1,10 +1,9 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { - lsrtags = "rhythms" - %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca doctitlees = "Indicaciones de compases compuestos" texidoces = " @@ -42,6 +41,8 @@ métriques. LilyPond est capable de rendre ce type de notation, plus " doctitlefr = "Métrique décomposée" + lsrtags = "rhythms" + texidoc = " Odd 20th century time signatures (such as \"5/8\") can often be played as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or @@ -49,12 +50,13 @@ more inequal metrics. LilyPond can make such music quite easy to read and play, by explicitly printing the compound time signatures and adapting the automatic beaming behavior. (Graphic measure grouping indications can also be added; see the appropriate snippet in this -database.) +database.) " doctitle = "Compound time signatures" } % begin verbatim + #(define ((compound-time one two num) grob) (grob-interpret-markup grob (markup #:override '(baseline-skip . 0) #:number @@ -66,7 +68,8 @@ database.) \relative c' { \override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8") \time 5/8 - #(override-auto-beam-setting '(end 1 8 5 8) 1 4) + \overrideBeamSettings #'Staff #'(5 . 8) #'end + #'((* . (2 3))) c8 d e fis gis c8 fis, gis e d c8 d e4 gis8 diff --git a/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly index 84dbfcf76d..938a7b5909 100644 --- a/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly +++ b/Documentation/snippets/conducting-signs,-measure-grouping-signs.ly @@ -1,10 +1,9 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { - lsrtags = "rhythms" - %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca texidoces = " Las opciones para agrupar los pulsos de un compás están a nuestra @@ -55,30 +54,38 @@ argument à @code{set-time-signature} : @code{'(2 2 2 3)}. " doctitlefr = "Signes de direction, signes de sous-groupe" + lsrtags = "rhythms" + texidoc = " -Options to group beats within a bar are available through the Scheme -function @code{set-time-signature}, which takes three arguments: the +Beat grouping within a bar is controlled by the default grouping +established in @code{beamSettings}. This grouping can be established +by the use of @code{\\overrideBeamSettings}. Alternatively, the +Scheme function @code{set-time-signature} can be used to both +set the time signature and establish the default grouping rule. +@code{set-time-signature}, takes three arguments: the number of beats, the beat length, and the internal grouping of beats in -the measure. If the @code{Measure_grouping_engraver} is included, the -function will also create @code{MeasureGrouping} signs. Such signs -ease reading rhythmically complex modern music. In the example, the -9/8 measure is subdivided in 2, 2, 2 and 3. This is passed to -@code{set-time-signature} as the third argument: @code{'(2 2 2 3)}: +the measure. If the @code{Measure_grouping_engraver} is included +in one of the display contexts, measure grouping signs will be +created. Such signs ease reading rhythmically complex modern music. +In the example, the 9/8 measure is grouped in two different +patterns using the two different methods, while the 5/8 measure +is grouped according to the default setting in +@file{scm/beam-settings.scm}: " doctitle = "Conducting signs, measure grouping signs" } % begin verbatim + \score { \relative c'' { - #(set-time-signature 9 8 '(2 2 2 3)) - #(revert-auto-beam-setting '(end * * 9 8) 3 8) - #(override-auto-beam-setting '(end 1 8 9 8) 1 4) - #(override-auto-beam-setting '(end 1 8 9 8) 2 4) - #(override-auto-beam-setting '(end 1 8 9 8) 3 4) + \time 9/8 + \overrideBeamSettings #'Score #'(9 . 8) #'end #'((* . (2 2 2 3))) + g8 g d d g g a( bes g) | + #(set-time-signature 9 8 '(4 5)) g8 g d d g g a( bes g) | - #(set-time-signature 5 8 '(3 2)) - a4. g4 + \time 5/8 + a4. g4 | } \layout { \context { diff --git a/Documentation/snippets/grouping-beats.ly b/Documentation/snippets/grouping-beats.ly index e7fbf0140e..c145be2dc9 100644 --- a/Documentation/snippets/grouping-beats.ly +++ b/Documentation/snippets/grouping-beats.ly @@ -1,10 +1,9 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { - lsrtags = "rhythms" - %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca texidoces = " Los patrones de barrado se pueden alterar con la propiedad @@ -30,19 +29,23 @@ La manière de gérer les ligatures est influencée par la propriété " doctitlefr = "Regroupement selon la pulsation" + lsrtags = "rhythms" + texidoc = " -Beaming patterns may be altered with the @code{beatGrouping} property: +Beaming patterns may be altered with the @code{beatGrouping} property: " doctitle = "Grouping beats" } % begin verbatim + \relative c'' { \time 5/16 - #(override-auto-beam-setting '(end * * 5 16) 5 16) - \set beatGrouping = #'(2 3) + \overrideBeamSettings #'Score #'(5 . 16) #'end + #'((* . (2 3))) c8^"(2+3)" c16 c8 - \set beatGrouping = #'(3 2) + \overrideBeamSettings #'Score #'(5 . 16) #'end + #'((* . (3 2))) c8^"(3+2)" c16 c8 } diff --git a/Documentation/snippets/making-slurs-with-complex-dash-structure.ly b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly index 1e23f6583c..e954510325 100644 --- a/Documentation/snippets/making-slurs-with-complex-dash-structure.ly +++ b/Documentation/snippets/making-slurs-with-complex-dash-structure.ly @@ -2,7 +2,7 @@ % generated from Documentation/snippets/new % This file is in the public domain. %% Note: this file works from version 2.13.1 -\version "2.13.1" +\version "2.13.4" \header { %% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 @@ -33,7 +33,6 @@ de 1 para una ligadura continua. doctitlees = "Hacer ligaduras de expresión con estructura compleja de discontinuidad" - %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d texidocde = " Legatobögen können mit einem komplizierten Strichelmuster diff --git a/Documentation/snippets/non-default-tuplet-numbers.ly b/Documentation/snippets/non-default-tuplet-numbers.ly index 46509bf4c9..61126b6e08 100644 --- a/Documentation/snippets/non-default-tuplet-numbers.ly +++ b/Documentation/snippets/non-default-tuplet-numbers.ly @@ -2,7 +2,7 @@ % generated from Documentation/snippets/new % This file is in the public domain. %% Note: this file works from version 2.13.1 -\version "2.13.1" +\version "2.13.4" \header { %% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 @@ -16,7 +16,6 @@ agrupación. doctitlees = "Números de agrupación especial distintos a los predeterminados" - %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d texidocde = " LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen diff --git a/Documentation/snippets/non-traditional-key-signatures.ly b/Documentation/snippets/non-traditional-key-signatures.ly index d32dedd922..b213f1c115 100644 --- a/Documentation/snippets/non-traditional-key-signatures.ly +++ b/Documentation/snippets/non-traditional-key-signatures.ly @@ -2,7 +2,7 @@ % generated from Documentation/snippets/new % This file is in the public domain. %% Note: this file works from version 2.13.0 -\version "2.13.1" +\version "2.13.4" \header { %% Translation of GIT committish: da7ce7d651c3a0d1bfed695f6e952975937a1c79 @@ -33,7 +33,6 @@ He aquí un ejemplo de una posible armadura para generar una escala exátona: " - %% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d doctitlede = "Untypische Tonarten" texidocde = " diff --git a/Documentation/snippets/reverting-default-beam-endings.ly b/Documentation/snippets/reverting-default-beam-endings.ly index bab4aa3125..4469b64ba5 100644 --- a/Documentation/snippets/reverting-default-beam-endings.ly +++ b/Documentation/snippets/reverting-default-beam-endings.ly @@ -1,19 +1,9 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { -%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 - texidocfr = " -Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans -une mesure à 12/8, il faudra préalablement annuler les réglages par -défaut relatifs à 12/8, puis ajouter nos propres règles : - -" - doctitlefr = "Annulation des règles de ligature par défaut" - - lsrtags = "rhythms" - %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca texidoces = " Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} @@ -35,32 +25,37 @@ Werte setzen: doctitlede = "Standard-Balkenwerte rückgängig machen" +%% Translation of GIT committish: bee31293920d834cd3698f00ddcc2402c3164619 + texidocfr = " +Pour obtenir des ligatures en groupes de @code{3-4-3-2} croches, dans +une mesure à 12/8, il faudra préalablement annuler les réglages par +défaut relatifs à 12/8, puis ajouter nos propres règles : + +" + doctitlefr = "Annulation des règles de ligature par défaut" + lsrtags = "rhythms" texidoc = " -To typeset beams grouped @code{3-4-3-2} in 12/8 it is necessary first +To typeset beams grouped @code{3-4-3-2} in 12/8 it is no longer +necessary first to override the default beam endings in 12/8, and then to set up the -new beaming endings: +new beaming endings: " doctitle = "Reverting default beam endings" } % begin verbatim + \relative c'' { \time 12/8 % Default beaming a8 a a a a a a a a a a a - % Revert default values in scm/auto-beam.scm for 12/8 time - #(revert-auto-beam-setting '(end * * 12 8) 3 8) - #(revert-auto-beam-setting '(end * * 12 8) 3 4) - #(revert-auto-beam-setting '(end * * 12 8) 9 8) - a8 a a a a a a a a a a a - % Set new values for beam endings - #(override-auto-beam-setting '(end * * 12 8) 3 8) - #(override-auto-beam-setting '(end * * 12 8) 7 8) - #(override-auto-beam-setting '(end * * 12 8) 10 8) + \overrideBeamSettings #'Score #'(12 . 8) #'end + #'((* . (3 4 3 2))) a8 a a a a a a a a a a a + } diff --git a/Documentation/snippets/specifying-context-with-beatgrouping.ly b/Documentation/snippets/specifying-context-with-beatgrouping.ly index 12c8858e8f..2a6315c717 100644 --- a/Documentation/snippets/specifying-context-with-beatgrouping.ly +++ b/Documentation/snippets/specifying-context-with-beatgrouping.ly @@ -1,10 +1,9 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.1 +\version "2.13.4" \header { - lsrtags = "rhythms, tweaks-and-overrides" - %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca texidoces = " Mediante la especificación del contexto, el efecto de @@ -36,6 +35,40 @@ d'outrepasser les règles définies à un niveau supérieur. La commande @code{\\set} destinée à en modifier les valeurs doit se placer après la commande @code{\\time} : +" + doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping" + + lsrtags = "rhythms, tweaks-and-overrides" + +%% Translation of GIT committish: 5c26e815f2ed54e6c4d022bac10dcc87a9916a29 + texidoces = " +Mediante la especificación del contexto, el efecto de +@code{beatGrouping} puede limitarse al contexto especificado, y +sobreescribirse los valores establecidos en contextos de niveles más +altos: + +" + doctitlees = "Especificar el contexto con beatGrouping" + +%% Translation of GIT committish: 0364058d18eb91836302a567c18289209d6e9706 + texidocde = " +Wenn der Kontext angegeben wird, kann die Auswirkung von @code{beatGrouping} +auf den angegebenen Kontext beschränkt werden und die Werte, die in Kontexten +auf höhrer Ebene angegeben wurden, können verändert werden. Der +@code{\\set}-Befehl muss @emph{nach} den @code{\\time}-Befehl geschrieben +werden: +" + doctitlede = "Den Kontext für beatGrouping angeben" + + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +Le fait de spécifier un contexte à @code{beatGrouping} permet d'en +limiter les effets. Par voie de conséquence, il sera possible +d'outrepasser les règles définies à un niveau supérieur. La commande +@code{\set} destinée à en modifier les valeurs doit se placer après la +commande @code{\time} : + " doctitlefr = "Spécification du contexte auquel s'appliquera beatGrouping" @@ -49,21 +82,5 @@ commands must be placed after all @code{\\time} commands: doctitle = "Specifying context with beatGrouping" } % begin verbatim -\score { - \new Staff << - \time 7/8 - \new Voice { - \relative c'' { - \set Staff.beatGrouping = #'(2 3 2) - a8 a a a a a a - } - } - \new Voice { - \relative c' { - \voiceTwo - \set beatGrouping = #'(1 3 3) - f8 f f f f f f - } - } - >> -} + +\markup{This snippet has been deprecated and will be removed in 2.14} diff --git a/Documentation/snippets/using-beatlength-and-beatgrouping.ly b/Documentation/snippets/using-beatlength-and-beatgrouping.ly index d2d4b3d5e7..7decd06cde 100644 --- a/Documentation/snippets/using-beatlength-and-beatgrouping.ly +++ b/Documentation/snippets/using-beatlength-and-beatgrouping.ly @@ -1,8 +1,46 @@ -%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it +%% Do not edit this file; it is auto-generated from input/new %% This file is in the public domain. -\version "2.13.1" +%% Note: this file works from version 2.13.4 +\version "2.13.4" \header { +%% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca + texidoces = " +La propiedad @code{measureLength} determina dónde se deben insertar +líneas divisorias y, con @code{beatLength} y @code{beatGrouping}, cómo +se deben generar las barras autoomáticas para las duraciones de barra +y compases para los que no hay ninguna regla definida para los finales +de barra. Este ejemplo muestra distintas dormas de controlar el +barrado mediante el establecimiento de estas propiedades. Las +explicaciones están en forma de comentarios dentro del código. + +" + doctitlees = "Utilización de beatLength y beatGrouping" + +%% Translation of GIT committish: d96023d8792c8af202c7cb8508010c0d3648899d + texidocde = " +Die Eigenschaft @code{measureLength} bestimmt, wo Taktstriche eingefügt +werden sollen und, zusammen mit @code{beatLength} und +@code{beatGrouping}, wie automtische Balken für Notenlängen und +Taktarten, für die keine definierten Regeln gefunden werden, gesetzt +werden sollen. Dieses Beispiel zeigt verschiedene Möglichkeiten, +die Balken zu kontrollieren, indem man diese Eigenschaften +beeinflusst. Die Erklärungen werden als Kommentare im Quellcode +gegeben. +" + doctitlede = "beatLength und beatGrouping benutzen" + +%% Translation of GIT committish: b3196fadd8f42d05ba35e8ac42f7da3caf8a3079 + texidocfr = " +La propriété @code{measureLength} détermine la pulsation et, combinée à +@code{beatLength} et @code{beatGrouping}, comment générer les ligatures +automatiques selon les durées et la métrique lorsqu'aucune règle n'a été +définie. L'exemple commenté qui suit indique différentes façons de +contrôler les ligatures à l'aide de ces propriétés. + +" + doctitlefr = "Utilisation conjointe de beatLength et beatGrouping" + lsrtags = "rhythms, tweaks-and-overrides" %% Translation of GIT committish: b2d4318d6c53df8469dfa4da09b27c15a374d0ca @@ -37,7 +75,7 @@ La propriété @code{measureLength} détermine la pulsation et, combinée à @code{beatLength} et @code{beatGrouping}, comment générer les ligatures automatiques selon les durées et la métrique lorsqu'aucune règle n'a été définie. L'exemple commenté qui suit indique différentes façons de -contrôler les ligatures à l'aide de ces propriétés. +contrôler les ligatures à l'aide de ces propriétés. " doctitlefr = "Utilisation conjointe de beatLength et beatGrouping" @@ -47,44 +85,11 @@ The property @code{measureLength} determines where bar lines should be inserted and, with @code{beatLength} and @code{beatGrouping}, how automatic beams should be generated for beam durations and time signatures for which no beam-ending rules are defined. This example -shows several ways of controlling beaming by setting these properties. +shows several ways of controlling beaming by setting these properties. The explanations are shown as comments in the code. " doctitle = "Using beatLength and beatGrouping" } % begin verbatim -\relative c'' { - \time 3/4 - % The default in 3/4 time is to beam in three groups - % each of a quarter note length - a16 a a a a a a a a a a a - - \time 12/16 - % No auto-beaming is defined for 12/16 - a16 a a a a a a a a a a a - - \time 3/4 - % Change time signature symbol, but retain underlying 3/4 beaming - \set Score.timeSignatureFraction = #'(12 . 16) - a16 a a a a a a a a a a a - - % The 3/4 time default grouping of (1 1 1) and beatLength of 1/8 - % are not consistent with a measureLength of 3/4, so the beams - % are grouped at beatLength intervals - \set Score.beatLength = #(ly:make-moment 1 8) - a16 a a a a a a a a a a a - - % Specify beams in groups of (3 3 2 3) 1/16th notes - % 3+3+2+3=11, and 11*1/16<>3/4, so beatGrouping does not apply, - % and beams are grouped at beatLength (1/16) intervals - \set Score.beatLength = #(ly:make-moment 1 16) - \set Score.beatGrouping = #'(3 3 2 3) - a16 a a a a a a a a a a a - - % Specify beams in groups of (3 4 2 3) 1/16th notes - % 3+4+2+3=12, and 12*1/16=3/4, so beatGrouping applies - \set Score.beatLength = #(ly:make-moment 1 16) - \set Score.beatGrouping = #'(3 4 2 3) - a16 a a a a a a a a a a a -} +\markup{This snippet has been deprecated and will be removed in 2.14} diff --git a/input/manual/fretted-headword.ly b/input/manual/fretted-headword.ly index dc97841f20..f2d13ee0af 100644 --- a/input/manual/fretted-headword.ly +++ b/input/manual/fretted-headword.ly @@ -107,8 +107,9 @@ bass = \relative c { e,1 | % m. 4 %% new section starts here in A minor - #(revert-auto-beam-setting '(end 1 12 4 4) 1 4) - #(revert-auto-beam-setting '(end 1 12 4 4) 3 4) + \overrideBeamSettings #'Score #'(4 . 4) #'end + #'((* . (1 1 1 1)) + ((1 . 12) . (3 3 3 3))) \once \override TextScript #'staff-padding = #1.7 \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5 diff --git a/input/mutopia/claop.py b/input/mutopia/claop.py index 8edd91fedf..92a8f7351d 100644 --- a/input/mutopia/claop.py +++ b/input/mutopia/claop.py @@ -275,7 +275,7 @@ stemme%s = { sys.stdout.write (r""" << \override Score.BarNumber #'padding = #2.5 - #(override-auto-beam-setting '(end * * * *) 1 4) + %#(override-auto-beam-setting '(end * * * *) 1 4) \set Score.skipBars = ##t \context StaffGroup << \override StaffGroup.Stem #'direction = #UP diff --git a/input/regression/auto-beam-beat-grouping.ly b/input/regression/auto-beam-beat-grouping.ly deleted file mode 100644 index 1a9761d2db..0000000000 --- a/input/regression/auto-beam-beat-grouping.ly +++ /dev/null @@ -1,30 +0,0 @@ -\version "2.12.0" -\header { - - texidoc = "Autobeaming will break beams according to beatGrouping -if the total length of the beat groups is equal to measureLength. -Otherwise, it will break beams according to beatLength." -} - -{ - \time 12/16 - - % default beatLength is 1/16; beatGrouping for this time is '() - b16 b b b b b b b b b b b % beatlength is used to breatk these beams - % use beatGrouping to get 1/8 groups - \set Timing.beatGrouping = #'(2 2 2 2 2 2) % 6*2 = 12 so beatGrouping applies - b16 b b b b b b b b b b b % beam groups are 1/8 - % use beatLength to get 1/8 groups -- beatGrouping no longer applies - \set Score.beatLength = #(ly:make-moment 2 16 ) % 12*2/16 = 24/16 - % bad beatGrouping; use - % beatLength (1/8 notes) - b16 b b b b b b b b b b b - % make custom beatGrouping - \set Timing.beatGrouping = #'(3 1 2) % 6*2/16 = 12/16 - b16 b b b b b b b b b b b - % change beatLength - \set Score.beatLength = #(ly:make-moment 3 16 ) % 6*3/16 = 18/16; use beatLength - b16 b b b b b b b b b b b - \set Score.beatLength = #(ly:make-moment 4 16 ) % 6*4/16 = 24/16; use beatLength - b16 b b b b b b b b b b b -} diff --git a/input/regression/beam-beat-grouping.ly b/input/regression/beam-beat-grouping.ly index e3af9219b5..2be98d88bd 100644 --- a/input/regression/beam-beat-grouping.ly +++ b/input/regression/beam-beat-grouping.ly @@ -1,18 +1,19 @@ \header { - texidoc = "Beaming patterns obey the @code{beatGrouping} property. " + texidoc = "Default beaming patterns can be set for the current time +signature by @code{\\setBeatGrouping}. " } \layout { ragged-right = ##t } -\version "2.12.0" +\version "2.13.4" \relative c'' { \time 5/16 - \set beatGrouping = #'(2 3) + \setBeatGrouping #'(2 3) c8[^"(2+3)" c16 c8] - \set beatGrouping = #'(3 2) + \setBeatGrouping #'(3 2) c8[^"(3+2)" c16 c8] } diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 4c813a7038..c44e59ccde 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -434,7 +434,7 @@ ADD_TRANSLATOR (Auto_beam_engraver, /* read */ "autoBeaming " - "autoBeamSettings " + "beamSettings " "beatLength " "subdivideBeams ", diff --git a/lily/beam-setting-scheme.cc b/lily/beam-setting-scheme.cc new file mode 100644 index 0000000000..9ac70202cd --- /dev/null +++ b/lily/beam-setting-scheme.cc @@ -0,0 +1,67 @@ +/* + beam-setting-scheme.cc -- Retrieving beam settings + + source file of the GNU LilyPond music typesetter + + Copyright (c) 2009 Carl Sorensen +*/ + +#include "beam-settings.hh" +#include "context.hh" +#include "guile-compatibility.hh" + +LY_DEFINE (ly_grouping_rules, "ly:grouping-rules", + 3, 0, 0, (SCM settings, SCM time_signature, SCM rule_type), + "Return grouping rules for @var{time-signature} and" + " @var{rule-type} from @var{settings}.") +{ + LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1); + LY_ASSERT_TYPE (scm_is_pair, time_signature, 2); + LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3); + + SCM grouping_rules = SCM_EOL; + if (scm_is_pair (settings)) + grouping_rules = + ly_assoc_get (scm_list_2 (time_signature, rule_type), + settings, + SCM_EOL); + return grouping_rules; +} + +LY_DEFINE (ly_beam_grouping, "ly:beam-grouping", + 4, 0, 0, (SCM settings, SCM time_signature, SCM rule_type, + SCM beam_type), + "Return grouping for beams of @var{beam-type} in" + " @var{time-signature} for" + " @var{rule-type} from @var{settings}.") +{ + LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1); + LY_ASSERT_TYPE (scm_is_pair, time_signature, 2); + LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3); + SCM_ASSERT_TYPE (scm_is_symbol(beam_type) || scm_is_pair(beam_type), + beam_type, SCM_ARG4, __FUNCTION__, "symbol or pair"); + SCM beam_grouping = + ly_assoc_get (beam_type, + ly_grouping_rules (settings,time_signature,rule_type), + SCM_EOL); + return beam_grouping; +} + +LY_DEFINE (ly_beat_grouping, "ly:beat-grouping", + 1, 0, 0, (SCM context), + "Return default beat grouping currently active in @var{context}.") +{ + LY_ASSERT_SMOB (Context, context, 1); + Context *c = unsmob_context (context); + SCM time_signature = + c->get_property ("timeSignatureFraction"); + SCM settings = + c->get_property("beamSettings"); + SCM beat_grouping = + ly_beam_grouping (settings, + time_signature, + ly_symbol2scm ("end"), + ly_symbol2scm ("*")); + return beat_grouping; +} + diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index 251e65bb99..5e6d29ca68 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -13,8 +13,9 @@ (c) 1999--2009 Han-Wen Nienhuys */ -#include "beaming-pattern.hh" #include "context.hh" +#include "beam-settings.hh" +#include "beaming-pattern.hh" /* Represents a stem belonging to a beam. Sometimes (for example, if the stem @@ -52,7 +53,7 @@ Beam_rhythmic_element::de_grace () { if (start_moment_.grace_part_) { - start_moment_.main_part_ = start_moment_.grace_part_; + start_moment_.main_part_ = start_moment_.grace_part_; start_moment_.grace_part_ = 0; } } @@ -150,7 +151,7 @@ Beaming_pattern::beamify (Beaming_options const &options) void Beaming_pattern::find_rhythmic_importance (Beaming_options const &options) { - Moment measure_pos (0); + Moment measure_pos (0); SCM grouping = options.grouping_; vsize i = 0; @@ -243,7 +244,7 @@ Beaming_pattern::beamlet_count (int i, Direction d) const void Beaming_options::from_context (Context *context) { - grouping_ = context->get_property ("beatGrouping"); + grouping_ = ly_beat_grouping (context->self_scm ()); subdivide_beams_ = to_boolean (context->get_property ("subdivideBeams")); beat_length_ = robust_scm2moment (context->get_property ("beatLength"), Moment (1, 4)); measure_length_ = robust_scm2moment (context->get_property ("measureLength"), Moment (4, 4)); diff --git a/lily/include/beam-settings.hh b/lily/include/beam-settings.hh new file mode 100644 index 0000000000..d66006321b --- /dev/null +++ b/lily/include/beam-settings.hh @@ -0,0 +1,18 @@ +/* + beam-settings.hh -- Prototypes for retrieving beam settings + + source file of the GNU LilyPond music typesetter + + Copyright (c) 2009 Carl Sorensen +*/ + +#ifndef BEAM_SETTINGS_HH +#define BEAM_SETTINGS_HH + +#include "lily-guile.hh" + +SCM ly_grouping_rules (SCM settings, SCM time_sig, SCM rule_type); +SCM ly_beam_grouping (SCM settings, SCM time_sig, SCM rule_type, + SCM beam_type); +SCM ly_beat_grouping (SCM context); +#endif // BEAM_SETTINGS_HH diff --git a/lily/measure-grouping-engraver.cc b/lily/measure-grouping-engraver.cc index 03192a1def..d77cf8d499 100644 --- a/lily/measure-grouping-engraver.cc +++ b/lily/measure-grouping-engraver.cc @@ -11,6 +11,7 @@ #include "global-context.hh" #include "engraver.hh" #include "spanner.hh" +#include "beam-settings.hh" #include "translator.icc" @@ -61,7 +62,16 @@ Measure_grouping_engraver::process_music () if (now.grace_part_) return; - SCM grouping = get_property ("beatGrouping"); + SCM settings = get_property ("beamSettings"); + SCM grouping = SCM_EOL; + if (scm_is_pair (settings)) + { + SCM time_signature_fraction = get_property ("timeSignatureFraction"); + grouping = ly_beam_grouping (settings, + time_signature_fraction, + ly_symbol2scm ("end"), + ly_symbol2scm ("*")); + } if (scm_is_pair (grouping)) { Moment *measpos = unsmob_moment (get_property ("measurePosition")); @@ -83,19 +93,21 @@ Measure_grouping_engraver::process_music () programming_error ("last grouping not finished yet"); continue; } + if (grouplen > 1) + { + grouping_ = make_spanner ("MeasureGrouping", SCM_EOL); + grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn"))); - grouping_ = make_spanner ("MeasureGrouping", SCM_EOL); - grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn"))); - - stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length; - get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_)); + stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length; + get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_)); - if (grouplen == 3) - grouping_->set_property ("style", ly_symbol2scm ("triangle")); - else - grouping_->set_property ("style", ly_symbol2scm ("bracket")); + if (grouplen == 3) + grouping_->set_property ("style", ly_symbol2scm ("triangle")); + else + grouping_->set_property ("style", ly_symbol2scm ("bracket")); - break; + break; + } } } } @@ -118,7 +130,7 @@ ADD_TRANSLATOR (Measure_grouping_engraver, "beatLength " "currentMusicalColumn " "measurePosition " - "beatGrouping ", + "beamSettings ", /* write */ "" diff --git a/ly/bagpipe.ly b/ly/bagpipe.ly index eabe1c7f88..cfe1ec1450 100644 --- a/ly/bagpipe.ly +++ b/ly/bagpipe.ly @@ -69,20 +69,16 @@ showKeySignature = { % Sets the autobeamer to span quarter notes only. Use for fast music. % TODO: Needs more tweaking quarterBeaming = { - #(override-auto-beam-setting '(end * * * *) 1 4 'Staff) - #(override-auto-beam-setting '(end * * * *) 1 2 'Staff) - #(override-auto-beam-setting '(end * * * *) 3 4 'Staff) - #(override-auto-beam-setting '(end * * * *) 4 4 'Staff) - #(revert-auto-beam-setting '(end 1 32 2 4 ) 1 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 2 4 ) 3 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 1 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 3 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 5 8 'Staff) - #(revert-auto-beam-setting '(end 1 32 4 4 ) 7 8 'Staff) + \overrideBeamSettings #'Staff #'(4 . 4) #'end + #'((* . (1 1 1 1)) ; could omit this and use beatLength + ((1 . 32) . (4 4 4 4 4 4 4 4))) + \overrideBeamSettings #'Staff #'(2 . 4) #'end + #'((* . (1 1)) + ((1 . 32) . (4 4 4 4))) } halfBeaming = { - #(override-auto-beam-setting '(end * * 2 2) 1 2 'Staff) - #(override-auto-beam-setting '(end * * 2 2) 2 2 'Staff) + \overrideBeamSettings #'Staff #'(2 . 2) #'end + #'((* . (1 1))) % could omit this and use beatLength } % Reels are in allabreve time with half note beaming. reelTime = { diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index d08b6f10ed..9d19e92cdb 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -18,8 +18,8 @@ \description "A context for displaying fret diagrams." \consists "Fretboard_engraver" - \consists "Rest_swallow_translator" - \consists "Output_property_engraver" + \consists "Rest_swallow_translator" + \consists "Output_property_engraver" \consists "Skip_event_swallow_translator" \consists "Hara_kiri_engraver" \consists "Separating_line_group_engraver" @@ -32,14 +32,14 @@ \context { \type "Engraver_group" \name "Staff" - - \consists "Output_property_engraver" + + \consists "Output_property_engraver" \consists "Bar_engraver" %% Bar_engraver must be first so default bars aren't overwritten %% with empty ones. - + \consists "Font_size_engraver" - \consists "Separating_line_group_engraver" + \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Staff_collecting_engraver" @@ -48,7 +48,7 @@ \consists "Clef_engraver" \consists "Key_engraver" \consists "Time_signature_engraver" - \consists "Ledger_line_engraver" + \consists "Ledger_line_engraver" \consists "Staff_symbol_engraver" \consists "Collision_engraver" \consists "Grob_pq_engraver" @@ -67,18 +67,18 @@ createSpacing = ##t ignoreFiguredBassRest = ##t \override VerticalAxisGroup #'minimum-Y-extent = #'(-4 . 4) - - %% explicitly set instrument, so we don't get + + %% explicitly set instrument, so we don't get %% weird effects when doing instrument names for %% piano staves instrumentName = #'() shortInstrumentName = #'() - + \defaultchild "Voice" \accepts "Voice" \accepts "CueVoice" - + \description "Handles clefs, bar lines, keys, accidentals. It can contain @code{Voice} contexts." @@ -89,13 +89,13 @@ \type "Engraver_group" \name "DrumStaff" \alias "Staff" - + \remove "Accidental_engraver" \remove "Ottava_spanner_engraver" - \remove "Key_engraver" + \remove "Key_engraver" \remove "Piano_pedal_engraver" \remove "String_number_engraver" - + \description "Handles typesetting for percussion." \denies "Voice" @@ -104,7 +104,7 @@ clefGlyph = #"clefs.percussion" clefPosition = #0 - \override Script #'staff-padding = #0.75 + \override Script #'staff-padding = #0.75 } @@ -135,7 +135,7 @@ contained staves are not connected vertically." \context{ \type "Engraver_group" - + \override VerticalAxisGroup #'minimum-Y-extent = ##f localKeySignature = #'() createSpacing = ##t @@ -143,17 +143,17 @@ contained staves are not connected vertically." squashedPosition = #0 \name RhythmicStaff \alias "Staff" - + \override BarLine #'bar-size = #4 \override VoltaBracket #'staff-padding = #3 - \override StaffSymbol #'line-count = #1 + \override StaffSymbol #'line-count = #1 \override Stem #'neutral-direction = #UP \override Beam #'neutral-direction = #UP - + \consists "Output_property_engraver" \consists "Font_size_engraver" - \consists "Separating_line_group_engraver" + \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Bar_engraver" \consists "Staff_symbol_engraver" @@ -161,8 +161,8 @@ contained staves are not connected vertically." \consists "Time_signature_engraver" \consists "Instrument_name_engraver" \consists "Axis_group_engraver" - \consists "Ledger_line_engraver" - + \consists "Ledger_line_engraver" + \accepts "Voice" \accepts "CueVoice" \defaultchild "Voice" @@ -187,7 +187,7 @@ multiple voices on the same staff." \consists "Font_size_engraver" \consists "Pitched_trill_engraver" - \consists "Output_property_engraver" + \consists "Output_property_engraver" \consists "Arpeggio_engraver" \consists "Multi_measure_rest_engraver" \consists "Text_spanner_engraver" @@ -204,7 +204,7 @@ multiple voices on the same staff." \consists "Dots_engraver" \consists "Rest_engraver" \consists "Tweak_engraver" - + %% switch on to make stem directions interpolate for the %% center line. % \consists "Melody_engraver" @@ -216,7 +216,7 @@ multiple voices on the same staff." %% must come before Script_column_engraver. \consists "New_fingering_engraver" - + \consists "Chord_tremolo_engraver" \consists "Percent_repeat_engraver" \consists "Slash_repeat_engraver" @@ -246,7 +246,7 @@ multiple voices on the same staff." \context{ \Voice - + \name CueVoice \alias Voice fontSize = #-4 @@ -282,7 +282,7 @@ multiple voices on the same staff." \type "Engraver_group" \name GrandStaff localKeySignature = #'() - + \description "A group of staves, with a brace on the left side, grouping the staves together. The bar lines of the contained staves are connected vertically." @@ -325,7 +325,7 @@ instrument names at the start of each system." \consists "Span_bar_engraver" \consists "Span_arpeggio_engraver" - \consists "Output_property_engraver" + \consists "Output_property_engraver" systemStartDelimiter = #'SystemStartBracket \consists "System_start_delimiter_engraver" @@ -336,13 +336,13 @@ instrument names at the start of each system." \accepts "DrumStaff" \accepts "GrandStaff" \accepts "PianoStaff" - \accepts "TabStaff" + \accepts "TabStaff" \accepts "Lyrics" \accepts "ChordNames" \accepts "FiguredBass" \accepts "ChoirStaff" \accepts "StaffGroup" - + \description "Groups staves while adding a bracket on the left side, grouping the staves together. The bar lines of the contained staves are connected vertically. @code{StaffGroup} only consists of @@ -379,11 +379,11 @@ centered between the staves surrounding this context." \description "Corresponds to a voice with lyrics. Handles the printing of a single line of lyrics." - + \name "Lyrics" instrumentName = #'() shortInstrumentName = #'() - + \consists "Lyric_engraver" \consists "Extender_engraver" \consists "Hyphen_engraver" @@ -406,8 +406,8 @@ printing of a single line of lyrics." %% make sure that barlines aren't collapsed, when %% Bar_engraver is there. - \override BarLine #'bar-size = #0.1 - + \override BarLine #'bar-size = #0.1 + } \context { @@ -420,8 +420,8 @@ printing of a single line of lyrics." % FIXME: not sure what the default should be here. \override VerticalAxisGroup #'staff-affinity = #DOWN - - \consists "Rest_swallow_translator" + + \consists "Rest_swallow_translator" \consists "Skip_event_swallow_translator" \consists "Tie_engraver" \consists "Note_name_engraver" @@ -432,9 +432,9 @@ printing of a single line of lyrics." \type "Engraver_group" \name ChordNames \description "Typesets chord names." - - \consists "Rest_swallow_translator" - \consists "Output_property_engraver" + + \consists "Rest_swallow_translator" + \consists "Output_property_engraver" \consists "Separating_line_group_engraver" \consists "Chord_name_engraver" \consists "Skip_event_swallow_translator" @@ -457,7 +457,7 @@ RemoveEmptyStaffContext= \context { AncientRemoveEmptyStaffContext = \context { %% why not add by default? - + \RemoveEmptyStaffContext \accepts "VaticanaVoice" \accepts "GregorianTranscriptionVoice" @@ -467,7 +467,7 @@ AncientRemoveEmptyStaffContext = \context { \context { \type "Score_engraver" \name "Score" - + \description "This is the top level notation context. No other context can contain a @code{Score} context. This context handles the administration of time signatures. It also makes sure @@ -492,7 +492,7 @@ automatically when an output definition (a @code{\score} or \consists "System_start_delimiter_engraver" \consists "Mark_engraver" \consists "Volta_engraver" - \consists "Metronome_mark_engraver" + \consists "Metronome_mark_engraver" \consists "Break_align_engraver" \consists "Spacing_engraver" \consists "Grace_spacing_engraver" @@ -500,7 +500,7 @@ automatically when an output definition (a @code{\score} or \consists "Stanza_number_align_engraver" \consists "Bar_number_engraver" \consists "Parenthesis_engraver" - + \defaultchild "Staff" \accepts "FretBoards" @@ -530,7 +530,7 @@ automatically when an output definition (a @code{\score} or systemStartDelimiter =#'SystemStartBar drumStyleTable = #drums-style - + melismaBusyProperties = #default-melisma-properties tieWaitForNote = ##f clefGlyph = #"clefs.G" @@ -541,19 +541,19 @@ automatically when an output definition (a @code{\score} or crescendoSpanner = #'hairpin decrescendoSpanner = #'hairpin - + defaultBarType = #"|" doubleRepeatType = #":|:" barNumberVisibility = #first-bar-number-invisible automaticBars = ##t - + explicitClefVisibility = #all-visible explicitKeySignatureVisibility = #all-visible implicitTimeSignatureVisibility = #end-of-line-invisible - + repeatCountVisibility = #all-repeat-counts-visible - - autoBeamSettings = #default-auto-beam-settings + + beamSettings = #default-beam-settings autoBeaming = ##t autoBeamCheck = #default-auto-beam-check scriptDefinitions = #default-script-alist @@ -564,24 +564,24 @@ automatically when an output definition (a @code{\score} or pedalUnaCordaStyle = #'text %% These are in ordinary italic font, including the *, -%% but they are unlikely to be used, +%% but they are unlikely to be used, %% as the default pedal-style for SostenutoPedal is 'mixed': -%% i.e. Sost. Ped_____________________ - pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*") +%% i.e. Sost. Ped_____________________ + pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*") pedalSostenutoStyle = #'mixed - harmonicAccidentals = ##t + harmonicAccidentals = ##t fingeringOrientations = #'(up down) stringNumberOrientations = #'(up down) strokeFingerOrientations = #'(right) - + lyricMelismaAlignment = #LEFT markFormatter = #format-mark-letters rehearsalMark = #1 subdivideBeams = ##f extraNatural = ##t autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave 0)) - autoCautionaries = #'() + autoCautionaries = #'() printKeyCancellation = ##t keyAlterationOrder = #`( @@ -592,7 +592,7 @@ automatically when an output definition (a @code{\score} or ) barCheckSynchronize = ##f - + %% chord names: chordNameFunction = #ignatzek-chord-names majorSevenSymbol = #whiteTriangleMarkup @@ -647,7 +647,7 @@ automatically when an output definition (a @code{\score} or percent-repeat-item-interface percent-repeat-interface - ;; need this, as stanza numbers are items, and appear only once. + ;; need this, as stanza numbers are items, and appear only once. stanza-number-interface ) quotedEventTypes = #'( @@ -659,8 +659,7 @@ automatically when an output definition (a @code{\score} or instrumentTransposition = #(ly:make-pitch 0 0 0) verticallySpacedContexts = #'(Staff) - topLevelAlignment = ##t - + timing = ##t } @@ -688,7 +687,7 @@ automatically when an output definition (a @code{\score} or \name "Devnull" \type "Engraver_group" -%% don't want to route anything out of here: +%% don't want to route anything out of here: \alias "Staff" \alias "Voice" \consists "Swallow_engraver" @@ -702,7 +701,7 @@ context." \alias "Voice" \consists "Tab_note_heads_engraver" \consists "Tab_harmonic_engraver" - + \remove "Note_heads_engraver" \remove "Fingering_engraver" \remove "New_fingering_engraver" @@ -731,18 +730,18 @@ context." \name "TabStaff" \denies "Voice" \consists "Tab_staff_symbol_engraver" - + \description "Context for generating tablature. [DOCME]" \accepts "TabVoice" \defaultchild "TabVoice" - + %% 6 strings \override StaffSymbol #'staff-space = #1.5 %% Don't draw stems over the tablature figures ! \override Stem #'avoid-note-head = ##t - + %% No accidental in tablature ! \remove "Accidental_engraver" \remove "Key_engraver" diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index c8b0a84b18..3f3bdca54d 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -359,6 +359,30 @@ musicMap = #(define-music-function (parser location proc mus) (procedure? ly:music?) (music-map proc mus)) +overrideBeamSettings = +#(define-music-function + (parser location + context time-signature rule-type grouping-rule) + (symbol? pair? symbol? pair?) + + (_i "Override beamSettings in @var{context} +for time signatures of @var{time-signature} and rules of type +@var{rule-type} to have a grouping rule alist +@var{grouping-rule}. +@var{rule-type} can be @code{end} or @code{subdivide}, +with a potential future value of @code{begin}. +@var{grouping-rule} is an alist of @var{(beam-type . grouping)} +entries. @var{grouping} is in units of @var{beam-type}. If +@var{beam-type} is @code{*}, grouping is in units of the denominator +of @var{time-signature}.") + + ;; TODO -- add warning if largest value of grouping is + ;; greater than time-signature. + +#{ +#(override-beam-setting + $time-signature $rule-type $grouping-rule $context) +#}) overrideProperty = #(define-music-function (parser location name property value) @@ -647,6 +671,19 @@ resetRelativeOctave = reference-note)) +revertBeamSettings = +#(define-music-function + (parser location + context time-signature rule-type) + (symbol? pair? symbol?) + + (_i "Revert beam settings in @var{context} for time signatures of +@var{time-signature} and groups of type +@var{group-type}. @var{group-type} can be @code{end} +or @code{subdivide}.") +#{ + #(revert-beam-setting $time-signature $rule-type $context) +#}) scaleDurations = #(define-music-function (parser location fraction music) (number-pair? ly:music?) @@ -654,6 +691,25 @@ scaleDurations = (ly:music-compress music (ly:make-moment (car fraction) (cdr fraction)))) +setBeatGrouping = +#(define-music-function (parser location grouping) (pair?) + (_i "Set the beat grouping in the current time signature to +@var{grouping}.") + (define (default-group-setting c) + (let* ((context-time-signature + (ly:context-property c 'timeSignatureFraction)) + (time-signature (if (null? context-time-signature) + '(4 . 4) + context-time-signature))) + (override-property-setting + c + 'beamSettings + (list time-signature 'end) + (list (cons '* grouping))))) + + (context-spec-music + (make-apply-context default-group-setting) + 'Score)) shiftDurations = diff --git a/python/convertrules.py b/python/convertrules.py index 8b35c95df6..187dfdd09b 100644 --- a/python/convertrules.py +++ b/python/convertrules.py @@ -1187,7 +1187,7 @@ def text_markup (str): while match: result = result + str[:match.end (1)] + " \markup" str = str[match.end( 2):] - # Count matching parentheses to find the end of the + # Count matching parentheses to find the end of the # current markup: nesting_level = 0 pars = re.finditer(r"[()]",str) @@ -1228,7 +1228,7 @@ def articulation_substitute (str): string_or_scheme = re.compile ('("(?:[^"\\\\]|\\\\.)*")|(#\\s*\'?\\s*\\()') -# Only apply articulation_substitute () outside strings and +# Only apply articulation_substitute () outside strings and # Scheme expressions: def smarter_articulation_subst (str): result = '' @@ -1242,7 +1242,7 @@ def smarter_articulation_subst (str): # Copy the string to output: result = result + match.group (1) str = str[match.end(1):] - else: # Found a Scheme expression. Count + else: # Found a Scheme expression. Count # matching parentheses to find its end str = str[match.start ():] nesting_level = 0 @@ -1321,7 +1321,7 @@ def conv (str): return str -@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") + +@rule ((1, 9, 3), (_ ("%s misspelling") % "\\acciaccatura") + ", fingerHorizontalDirection -> fingeringOrientations") def conv (str): str = re.sub ('accacciatura', @@ -2002,7 +2002,7 @@ def conv (str): str = re.sub ('soloADue', 'printPartCombineTexts', str) str = re.sub (r'\\applymusic\s*#notes-to-clusters', '\\makeClusters', str) - + str = re.sub (r'pagenumber\s*=', 'firstpagenumber = ', str) return str @@ -2055,7 +2055,7 @@ with str = re.sub (r'#\(paper-set-staff-size', '%Use set-global-staff-size at toplevel\n% #(layout-set-staff-size', str) return str - + @rule ((2, 3, 23), r'\context Foo = NOTENAME -> \context Foo = "NOTENAME"') def conv (str): @@ -2240,7 +2240,7 @@ def conv (str): @rule ((2, 7, 0), 'ly:get-default-font -> ly:grob-default-font') def conv (str): - return re.sub('ly:get-default-font', 'ly:grob-default-font', str) + return re.sub('ly:get-default-font', 'ly:grob-default-font', str) @rule ((2, 7, 1), '''ly:parser-define -> ly:parser-define! @@ -2539,7 +2539,7 @@ def conv (str): while dur > 1 : dur /= 2 log2 += 1 - + den = (1 << dots) * (1 << log2) num = ((1 << (dots+1)) - 1) @@ -2552,7 +2552,7 @@ def conv (str): } """ % (num*count, den) - + str = re.sub (r'\\midi\s*{\s*\\tempo ([0-9]+)\s*([.]*)\s*=\s*([0-9]+)\s*}', sub_tempo, str) return str @@ -2595,10 +2595,10 @@ def conv (str): @rule ((2, 11, 6), _ ("Rename accidental glyphs, use glyph-name-alist.")) def conv (str): - + def sub_acc_name (m): idx = int (m.group (1).replace ('M','-')) - + return ["accidentals.doublesharp", "accidentals.sharp.slashslash.stemstemstem", "accidentals.sharp", @@ -2610,7 +2610,7 @@ def conv (str): "accidentals.flatflat"][4-idx] str = re.sub (r"accidentals[.](M?[-0-9]+)", - sub_acc_name, str) + sub_acc_name, str) str = re.sub (r"(KeySignature|Accidental[A-Za-z]*)\s*#'style\s*=\s*#'([a-z]+)", r"\1 #'glyph-name-alist = #alteration-\2-glyph-name-alist", str) ## FIXME: standard vs default, alteration-FOO vs FOO-alteration @@ -2669,15 +2669,15 @@ def conv (str): context = m.group (2) if not context: context = '' - + s += (r"%s \override %sTextSpanner #'bound-details #'%s #'text = \markup { \draw-line #'(0 . %s) }" % (once, context, var, h)) s += '\n' - + return s - - + + str = re.sub (r"(\\once)?\s*\\override\s*([a-zA-Z]+\s*[.]\s*)?TextSpanner\s*#'edge-height\s*=\s*#'\(\s*([0-9.-]+)\s+[.]\s+([0-9.-]+)\s*\)", sub_edge_height, str) return str @@ -2744,8 +2744,8 @@ def conv (str): "\t(format-metronome-markup text dur count context)\n") ## warning 2/2: fret diagram properties moved to fret-diagram-details - fret_props = ['barre-type', - 'dot-color', + fret_props = ['barre-type', + 'dot-color', 'dot-radius', 'finger-code', 'fret-count', @@ -2800,7 +2800,7 @@ def conv (str): @rule ((2, 11, 55), "#(set-octavation oct) -> \\ottava #oct,\n\ \\put-adjacent markup axis dir markup -> \\put-adjacent axis dir markup markup") -def conv (str): +def conv (str): str = re.sub (r"#\(set-octavation (-*[0-9]+)\)", r"\\ottava #\1", str) if re.search ('put-adjacent', str): stderr_write (NOT_SMART % _ ("\\put-adjacent argument order.\n")) @@ -2907,8 +2907,28 @@ def conv(str): stderr_write (UPDATE_MANUALLY) return str -@rule ((2, 13, 4), _("different settings for vertical layout")) +@rule ((2, 13, 4), + _ ("Autobeaming rules have changed. override-auto-beam-setting and\n\ +revert-auto-beam-setting have been eliminated. \\overrideBeamSettings has been\n\ +added. BeatGrouping has been eliminated.\n\ +Different settings for vertical layout.")) def conv(str): + if re.search("override-auto-beam-setting", str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\ + Autobeam settings are now overriden with \\overrideBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + if re.search("revert-auto-beam-setting", str): + stderr_write ("\n") + stderr_write (NOT_SMART % _("override-auto-beam-setting.\n\ + Autobeam settings are now reverted with \\revertBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) + str = re.sub(r"\\set\s+#\'beatGrouping", r"\\setBeatGrouping", str) + if re.search(r"(\w+\.beatGrouping)", str): + stderr_write (NOT_SMART % _(".beatGrouping. \n\ + beatGrouping with a specified context must now be accomplished with\n\ + \\overrideBeamSettings.\n")) + stderr_write (UPDATE_MANUALLY) if re.search(r'alignment-offsets', str): stderr_write("\n") stderr_write(NOT_SMART % _("alignment-offsets has been changed to alignment-distances: \ @@ -2926,5 +2946,5 @@ you must now specify the distances between staves rather than the offset of stav # - write rule for bumping major stable version with # # _ ("bump version for release") -# +# # as exact description. diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 4f23d06198..1e77399b06 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -4,286 +4,26 @@ ;;;; ;;;; (c) 2000--2009 Jan Nieuwenhuizen -;;; specify generic beam end times - -;;; format: -;;; -;;; function shortest-duration-in-beam time-signature -;;; -;;; where -;;; -;;; function = begin or end -;;; shortest-duration-in-beam = numerator denominator; e.g.: 1 16 -;;; time-signature = numerator denominator, e.g.: 4 4 -;;; -;;; unspecified or wildcard entries for duration or time-signature -;;; are given by * * - -;;; maybe do: '(end shortest-1 16 time-3 4) ? - -(define-public default-auto-beam-settings - `( - ;; in 2 2 time: - ;; use beatLength for all except 32nd notes - ;; end beams with 32nd notes each 1 4 beat - - ((end 1 32 2 2) . ,(ly:make-moment 1 4)) - ((end 1 32 2 2) . ,(ly:make-moment 2 4)) - ((end 1 32 2 2) . ,(ly:make-moment 3 4)) - - ;; in 2 4, 2 8 and 2 16 time: - ;; use beatLength - - ;; in 3 2 time: - ;; use beatLength for all except 32nd notes - ;; end beams with 32nd notes each 1 4 beat - - ((end 1 32 3 2) . ,(ly:make-moment 1 4)) - ((end 1 32 3 2) . ,(ly:make-moment 2 4)) - ((end 1 32 3 2) . ,(ly:make-moment 3 4)) - ((end 1 32 3 2) . ,(ly:make-moment 4 4)) - ((end 1 32 3 2) . ,(ly:make-moment 5 4)) - - ;; in 3 4, 3 8 and 3 16 time: - ;; use beatLength - - ;; in 4 2 time: - ;; use beatLength for all except 16th and 32nd notes - ;; end beams with 16th notes each 1 4 beat - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 16 4 2) . ,(ly:make-moment 1 4)) - ((end 1 16 4 2) . ,(ly:make-moment 2 4)) - ((end 1 16 4 2) . ,(ly:make-moment 3 4)) - ((end 1 16 4 2) . ,(ly:make-moment 4 4)) - ((end 1 16 4 2) . ,(ly:make-moment 5 4)) - ((end 1 16 4 2) . ,(ly:make-moment 6 4)) - ((end 1 16 4 2) . ,(ly:make-moment 7 4)) - - ((end 1 32 4 2) . ,(ly:make-moment 1 8)) - ((end 1 32 4 2) . ,(ly:make-moment 2 8)) - ((end 1 32 4 2) . ,(ly:make-moment 3 8)) - ((end 1 32 4 2) . ,(ly:make-moment 4 8)) - ((end 1 32 4 2) . ,(ly:make-moment 5 8)) - ((end 1 32 4 2) . ,(ly:make-moment 6 8)) - ((end 1 32 4 2) . ,(ly:make-moment 7 8)) - ((end 1 32 4 2) . ,(ly:make-moment 8 8)) - ((end 1 32 4 2) . ,(ly:make-moment 9 8)) - ((end 1 32 4 2) . ,(ly:make-moment 10 8)) - ((end 1 32 4 2) . ,(ly:make-moment 11 8)) - ((end 1 32 4 2) . ,(ly:make-moment 12 8)) - ((end 1 32 4 2) . ,(ly:make-moment 13 8)) - ((end 1 32 4 2) . ,(ly:make-moment 14 8)) - ((end 1 32 4 2) . ,(ly:make-moment 15 8)) - - ;; in 4 4 (common) time: - ;; use beatLength for all except 32nd notes: - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 4 4) . ,(ly:make-moment 1 8)) - ((end 1 32 4 4) . ,(ly:make-moment 2 8)) - ((end 1 32 4 4) . ,(ly:make-moment 3 8)) - ((end 1 32 4 4) . ,(ly:make-moment 4 8)) - ((end 1 32 4 4) . ,(ly:make-moment 5 8)) - ((end 1 32 4 4) . ,(ly:make-moment 6 8)) - ((end 1 32 4 4) . ,(ly:make-moment 7 8)) - - ;; in 4 8 and 4 16 time: - ;; use beatLength - - ;; in 6 4 time: - ;; use beatGrouping for all except 16th, 32nd notes - ;; end beams with 16th or 32nd notes each 1 4 beat - - - ((end 1 16 6 4) . ,(ly:make-moment 1 4)) - ((end 1 16 6 4) . ,(ly:make-moment 2 4)) - ((end 1 16 6 4) . ,(ly:make-moment 3 4)) - ((end 1 16 6 4) . ,(ly:make-moment 4 4)) - ((end 1 16 6 4) . ,(ly:make-moment 5 4)) - - ((end 1 32 6 4) . ,(ly:make-moment 1 4)) - ((end 1 32 6 4) . ,(ly:make-moment 2 4)) - ((end 1 32 6 4) . ,(ly:make-moment 3 4)) - ((end 1 32 6 4) . ,(ly:make-moment 4 4)) - ((end 1 32 6 4) . ,(ly:make-moment 5 4)) - - ;; in 6 8 time: - ;; use beatGrouping for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 6 8) . ,(ly:make-moment 1 8)) - ((end 1 32 6 8) . ,(ly:make-moment 2 8)) - ((end 1 32 6 8) . ,(ly:make-moment 3 8)) - ((end 1 32 6 8) . ,(ly:make-moment 4 8)) - ((end 1 32 6 8) . ,(ly:make-moment 5 8)) - - ;; in 6 16 time: - ;; use beatGrouping - - ;; in 9 4 time: - ;; use beatGrouping for all except 16th, 32nd notes - ;; end beams with 16th or 32nd notes each 1 4 beat - - ((end 1 16 9 4) . ,(ly:make-moment 1 4)) - ((end 1 16 9 4) . ,(ly:make-moment 2 4)) - ((end 1 16 9 4) . ,(ly:make-moment 3 4)) - ((end 1 16 9 4) . ,(ly:make-moment 4 4)) - ((end 1 16 9 4) . ,(ly:make-moment 5 4)) - ((end 1 16 9 4) . ,(ly:make-moment 6 4)) - ((end 1 16 9 4) . ,(ly:make-moment 7 4)) - ((end 1 16 9 4) . ,(ly:make-moment 8 4)) - - ((end 1 32 9 4) . ,(ly:make-moment 1 4)) - ((end 1 32 9 4) . ,(ly:make-moment 2 4)) - ((end 1 32 9 4) . ,(ly:make-moment 3 4)) - ((end 1 32 9 4) . ,(ly:make-moment 4 4)) - ((end 1 32 9 4) . ,(ly:make-moment 5 4)) - ((end 1 32 9 4) . ,(ly:make-moment 6 4)) - ((end 1 32 9 4) . ,(ly:make-moment 7 4)) - ((end 1 32 9 4) . ,(ly:make-moment 8 4)) - - ;; in 9 8 time: - ;; use beatGrouping for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 9 8) . ,(ly:make-moment 1 8)) - ((end 1 32 9 8) . ,(ly:make-moment 2 8)) - ((end 1 32 9 8) . ,(ly:make-moment 3 8)) - ((end 1 32 9 8) . ,(ly:make-moment 4 8)) - ((end 1 32 9 8) . ,(ly:make-moment 5 8)) - ((end 1 32 9 8) . ,(ly:make-moment 6 8)) - ((end 1 32 9 8) . ,(ly:make-moment 7 8)) - ((end 1 32 9 8) . ,(ly:make-moment 8 8)) - - ;; in 9 16 time - ;; use beatGrouping - - ;; in 12 4 time: - ;; use beatGrouping for all except 16th, 32nd notes - ;; end beams with 16th or 32nd notes each 1 4 beat - - ((end 1 16 12 4) . ,(ly:make-moment 1 4)) - ((end 1 16 12 4) . ,(ly:make-moment 2 4)) - ((end 1 16 12 4) . ,(ly:make-moment 3 4)) - ((end 1 16 12 4) . ,(ly:make-moment 4 4)) - ((end 1 16 12 4) . ,(ly:make-moment 5 4)) - ((end 1 16 12 4) . ,(ly:make-moment 6 4)) - ((end 1 16 12 4) . ,(ly:make-moment 7 4)) - ((end 1 16 12 4) . ,(ly:make-moment 8 4)) - ((end 1 16 12 4) . ,(ly:make-moment 9 4)) - ((end 1 16 12 4) . ,(ly:make-moment 10 4)) - ((end 1 16 12 4) . ,(ly:make-moment 11 4)) - - ((end 1 32 12 4) . ,(ly:make-moment 1 4)) - ((end 1 32 12 4) . ,(ly:make-moment 2 4)) - ((end 1 32 12 4) . ,(ly:make-moment 3 4)) - ((end 1 32 12 4) . ,(ly:make-moment 4 4)) - ((end 1 32 12 4) . ,(ly:make-moment 5 4)) - ((end 1 32 12 4) . ,(ly:make-moment 6 4)) - ((end 1 32 12 4) . ,(ly:make-moment 7 4)) - ((end 1 32 12 4) . ,(ly:make-moment 8 4)) - ((end 1 32 12 4) . ,(ly:make-moment 9 4)) - ((end 1 32 12 4) . ,(ly:make-moment 10 4)) - ((end 1 32 12 4) . ,(ly:make-moment 11 4)) - - ;; in 12 8 time: - ;; use beatGrouping for all except 32nd notes - ;; end beams with 32nd notes each 1 8 beat - - ((end 1 32 12 8) . ,(ly:make-moment 1 8)) - ((end 1 32 12 8) . ,(ly:make-moment 2 8)) - ((end 1 32 12 8) . ,(ly:make-moment 3 8)) - ((end 1 32 12 8) . ,(ly:make-moment 4 8)) - ((end 1 32 12 8) . ,(ly:make-moment 5 8)) - ((end 1 32 12 8) . ,(ly:make-moment 6 8)) - ((end 1 32 12 8) . ,(ly:make-moment 7 8)) - ((end 1 32 12 8) . ,(ly:make-moment 8 8)) - ((end 1 32 12 8) . ,(ly:make-moment 9 8)) - ((end 1 32 12 8) . ,(ly:make-moment 10 8)) - ((end 1 32 12 8) . ,(ly:make-moment 11 8)) - - ;; in 12 16 time: - ;; use beatGrouping - - )) - -(define (override-property-setting context property setting value) - "Like the C++ code that executes \\override, but without type -checking. " - (ly:context-set-property! - context property - (cons (cons setting value) (ly:context-property context property)))) - -(define (revert-property-setting context property setting) - "Like the C++ code that executes \revert, but without type -checking. " - - (define (revert-member alist entry new) - "Return ALIST, with ENTRY removed. ALIST is not modified, instead -a fresh copy of the list-head is made." - (cond - ((null? alist) new) - ((equal? (car alist) entry) (revert-member (cdr alist) entry new)) - (else (revert-member (cdr alist) entry (cons (car alist) new))))) - - (ly:context-set-property! - context property - (revert-member (ly:context-property context property) setting '()))) - -(define-public (override-auto-beam-setting setting num den . rest) - (ly:export - (context-spec-music - (make-apply-context (lambda (c) - (override-property-setting - c 'autoBeamSettings - setting (ly:make-moment num den)))) - (if (and (pair? rest) (symbol? (car rest))) - (car rest) - 'Voice)))) - -(define-public (score-override-auto-beam-setting setting num den) - (override-auto-beam-setting setting num den 'Score)) - -(define-public (revert-auto-beam-setting setting num den . rest) - (ly:export - (context-spec-music - (make-apply-context - (lambda (c) - (revert-property-setting - c 'autoBeamSettings - (cons setting (ly:make-moment num den))))) - (if (and (pair? rest) (symbol? (car rest))) - (car rest) - 'Voice)))) - ;; Determine end moment for auto beaming (or begin moment, but mostly -;; 0== anywhere). In order of decreasing priority: +;; 0== anywhere). We only consider the current time signature. +;; In order of decreasing priority: ;; -;; 1. end * * -;; 2. end * * * -;; 3. end -;; 4. end * -;; 5. if 1-4 not specified, begin anywhere, end at time determined by -;; beatGrouping and beatLength: -;; if beatGrouping and beatLength are consistent with measureLength, -;; use beatGrouping to determine end of beams. -;; if beatGrouping and beatLength are inconsistent with measureLength, -;; use beatLength to determine end of beams. +;; 1. end +;; 2. end * +;; 3. if 1-2 not specified, begin anywhere, end at beatLength intervals ;; ;; Rationale: ;; ;; [user override] ;; 1. override for specific duration type -;; 2. generic override +;; 2. override for all duration types in a time signature. ;; -;; [to be defined in config file] -;; 3. exceptions for specific time signature, for specific duration type -;; 4. exceptions for specific time signature -;; 5. easy catch-all rule for non-specified measure types +;; defined in scm/beam-settings.scm: +;; 1. Default grouping for common time signatures +;; 2. exceptions for specific time signature, for specific duration type -(define-public (default-auto-beam-check context dir test) +(define-public (default-auto-beam-check context dir test-beam) (define (get name default) (let ((value (ly:context-property context name))) (if (not (null? value)) value default))) @@ -295,69 +35,54 @@ a fresh copy of the list-head is made." (cons (ly:moment-mul (ly:make-moment new-start 1) beat-length) (ending-moments (cdr group-list) new-start beat-length))))) - (define (make-end-settings time ending-list moment-den) - (if (null? ending-list) - '() - (cons (cons (append '(end * *) time) - (ly:make-moment (car ending-list) moment-den)) - (make-end-settings time (cdr ending-list) moment-den)))) - + ;; Start of actual auto-beam test routine + ;; + ;; ;; Don't start auto beams on grace notes (if (and (!= (ly:moment-grace-numerator (ly:context-now context)) 0) (= dir START)) #f - (let* ((beat-length (get 'beatLength (ly:make-moment 1 4))) - (measure-length (get 'measureLength (ly:make-moment 1 1))) - (measure-pos (get 'measurePosition ZERO-MOMENT)) - (beat-grouping (get 'beatGrouping '())) - (settings (get 'autoBeamSettings '())) - (function (list (if (= dir START) 'begin 'end))) - ;; Calculate implied time signature based on measureLength - ;; and beatLength for default value in get - (num-mom (ly:moment-div measure-length beat-length)) - (num (inexact->exact - (round (/ (ly:moment-main-numerator num-mom) - (ly:moment-main-denominator num-mom))))) - (den (ly:moment-main-denominator beat-length)) - (time-signature-fraction - (get 'timeSignatureFraction (cons num den))) - (time (list (car time-signature-fraction) - (cdr time-signature-fraction))) - (type (list (ly:moment-main-numerator test) - (ly:moment-main-denominator test))) - (pos (if (>= (ly:moment-main-numerator measure-pos) 0) - measure-pos - (ly:moment-add measure-length measure-pos))) - (grouping-moments (ending-moments beat-grouping 0 beat-length)) - ;; Calculate implied measure length from beatGrouping - ;; and beatLength - (grouping-length (if (null? grouping-moments) - ZERO-MOMENT - (list-ref grouping-moments - (1- (length grouping-moments))))) - (lst (list - ;; Hmm, should junk user-override feature, - ;; or split this in user-override and config section? - (append function type '(* *)) - (append function '(* * * *)) - (append function type time) - (append function '(* *) time))) - (predefined-setting (first-assoc lst settings))) - (if (or - ;; always begin or end beams at beginning/ending of measure + (if (= dir START) + ;; start anywhere is currently implemented + #t + (let* ((beat-length (get 'beatLength (ly:make-moment 1 4))) + (measure-length (get 'measureLength (ly:make-moment 1 1))) + (time-signature-fraction + (get 'timeSignatureFraction '(4 . 4))) + (measure-pos (get 'measurePosition ZERO-MOMENT)) + (settings (get 'beamSettings '())) + (function (if (= dir START) 'begin 'end)) + (type (cons (ly:moment-main-numerator test-beam) + (ly:moment-main-denominator test-beam))) + (pos (if (>= (ly:moment-main-numerator measure-pos) 0) + measure-pos + (ly:moment-add measure-length measure-pos))) + (type-grouping (ly:beam-grouping + settings + time-signature-fraction + function + type)) + (default-grouping (ly:beam-grouping + settings + time-signature-fraction + function + '*)) + (beat-grouping (if (null? type-grouping) + default-grouping + type-grouping)) + (grouping-moment (if (null? type-grouping) + beat-length + test-beam)) + (grouping-moments (ending-moments + beat-grouping 0 grouping-moment))) + (if (null? beat-grouping) + ;; no rule applies, so end at beatLength + (= (ly:moment-main-denominator + (ly:moment-div pos beat-length)) 1) + ;; otherwise, end at beginning of measure or + ;; at specified moment + (or + ;; start/end at beginning of measure (= (ly:moment-main-numerator pos) 0) - (first-member (map (lambda (x) (cons x pos)) lst) settings)) - #t - (if (= dir START) - ;; if no entry matches our function + time or type, - ;; start anywhere - (not predefined-setting) - ;; if entry matches our function + time or type, check moment - (if predefined-setting - (equal? measure-pos (cdr predefined-setting)) - ;; if measure-length matches grouping-length, use - ;; grouping moments, else use beat-length - (if (equal? measure-length grouping-length) - (member measure-pos grouping-moments) - (= (ly:moment-main-denominator - (ly:moment-div pos beat-length)) 1)))))))) + ;; end if measure-pos matches a specified ending moment + (member measure-pos grouping-moments))))))) diff --git a/scm/beam-settings.scm b/scm/beam-settings.scm new file mode 100644 index 0000000000..eaa9c24e38 --- /dev/null +++ b/scm/beam-settings.scm @@ -0,0 +1,228 @@ +;;;; default-beam-settings.scm -- Default auto-beam and subdivide-beam settings +;;;; +;;;; source file of the GNU LilyPond music typesetter +;;;; +;;;; (c) 2009 Carl Sorensen + +;;; specify default beaming rules + +;;; format: +;;; +;;; alist of +;;; ((time-signature function) . (beam-type . grouping)) entries +;;; +;;; where +;;; +;;; time-signature = time signature fraction (pair of numbers, (4 .4) ) +;;; function = 'end or 'subdivide (possibly implement 'begin in the future) +;;; beam-type = '* or (numerator . denominator); e.g. (1 . 16) +;;; NOTE: numerator is kept in beam-type because of +;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8) +;;; for eighth-note triplets. +;;; grouping = a list of groups, in units of time signature denominator +;;; (for default rules) or beam-type (for explicit rules) +;;; + +(define-public default-beam-settings + `( + ;; in 2 2 time: + ;; default: end beams on 1 2 note boundaries + ;; end beams with 32nd notes each 1 4 beat + (((2 . 2) end) . + ((* . (1 1)) + ((1 . 32) . (8 8 8 8)))) + + ;; in 2 4, 2 8 and 2 16 time: + ;; default: end beams on beats + (((2 . 4) end) . ((* . (1 1)))) + (((2 . 8) end) . ((* . (1 1)))) + (((2 . 16) end) . ((* . (1 1)))) + + ;; in 3 2 time: + ;; default: end beams on beats + ;; end beams with 32nd notes each 1 4 beat + (((3 . 2) end) . + ((* . (1 1 1)) + ((1 . 32) . (8 8 8 8 8 8)))) + + ;; in 3 4 time: + ;; default: end beams on beats + ;; group 1/8 note beams on measure + (((3 . 4) end) .((* . (3)) + ((1 16) . (4 4 4)) + ((1 32) . (8 8 8)) + ((1 64) . (16 16 16)) + ((1 128) . (32 32 32)))) + + ;; in 3 8 and 3 16 time time: + ;; default: group on 3 + (((3 . 8) end) . ((* . (3)))) + (((3 . 16) end) . ((* . (3)))) + + ;; in 4 2 time: + ;; default: end beams on beats + ;; end beams with 16th notes each 1 4 beat + ;; end beams with 32nd notes each 1 8 beat + (((4 . 2) end) . + ((* . (1 1 1 1)) + ((1 . 16) . (4 4 4 4 4 4 4 4)) + ((1 . 32) . (4 4 4 4 + 4 4 4 4 + 4 4 4 4 + 4 4 4 4)))) + + ;; in 4 4 (common) time: + ;; default: end beams on beats + ;; use beatLength for all except 32nd notes: + ;; end beams with 32nd notes each 1 8 beat + (((4 . 4) end) . + ((* . (2 2)) + ((1 . 32) . (4 4 4 4 + 4 4 4 4)))) + + ;; in 4 8 time: + ;; default: group on 1 4 notes + (((4 . 8) end) . ((* . (2 2)))) + + ;; in 4 16 time: + ;; default: group on beats + (((4 . 16) end) . ((* . (1 1 1 1)))) + + ;; in 6 4 time: + ;; default group at 3 4 + ;; end beams with 16th or 32nd notes each 1 4 beat + (((6 . 4) end) . + ((* . (3 3)) + ((1 . 16) . (4 4 4 4 4 4)) + ((1 . 32) . (8 8 8 8 8 8)))) + + ;; in 6 8 time: + ;; default: group at 3 8 + ;; end beams with 32nd notes each 1 8 beat + (((6 . 8) end) . + ((* . (3 3)) + ((6 . 8) . (4 4 4 4 4 4)))) + + ;; in 6 16 time: + ;; default: group at 3 16 + (((6 . 16) end) . ((* . (3 3)))) + + ;; in 9 4 time: + ;; default: group at 3 4 + ;; end beams with 16th or 32nd notes each 1 4 beat + (((9 . 4) end) . + ((* . (3 3 3)) + ((1 . 16) . (4 4 4 4 4 4 4 4 4)) + ((1 . 32) . (8 8 8 8 8 8 8 8 8)))) + + ;; in 9 8 time: + ;; default: group at 3 8 + ;; use beatGrouping for all except 32nd notes + ;; end beams with 32nd notes each 1 8 beat + (((9 . 8) end) . + ((* . (3 3 3)) + ((1 . 32) . (4 4 4 4 4 4 4 4 4)))) + + ;; in 9 16 time + ;; default: group at 3 8 + (((9 . 16) end) . ((* . (3 3 3)))) + + ;; in 12 4 time: + ;; default: group at 3 4 + ;; end beams with 16th or 32nd notes each 1 4 beat + (((12 . 4) end) . + ((* . (3 3 3 3)) + ((1 . 16) . (4 4 4 4 4 4 4 4 4 4 4 4 4)) + ((12 . 4) . (8 8 8 8 8 8 8 8 8 8 8 8 8)))) + + ;; in 12 8 time: + ;; default: group at 3 8 + ;; end beams with 32nd notes each 1 8 beat + (((12 . 8) end) . + ((* . (3 3 3 3)) + ((1 . 32) . (4 4 4 4 4 4 4 4 4 4 4 4 4)))) + + ;; in 12 16 time: + ;; default: group at 3 16 + (((12 . 16) end) . ((* . (3 3 3 3)))) + + ;; in 5 8 time: + ;; default: group (3 2) + (((5 . 8) end) . ((* . (3 2)))) + + ;; in 8 8 time: + ;; default: group (3 3 2) + (((8 . 8) end) . ((* . (3 3 2)))) + )) ; end of alist definition + +;;; Functions for overriding beam settings +;;; + +(define (overridden-property-alist context property setting value) + "Return an alist containing the current @{context} value of +@code{property} overriden by @code{(setting . value)}. " + (cons (cons setting value) (ly:context-property context property))) + +(define-public (override-property-setting context property setting value) + "Like the C++ code that executes \\override, but without type +checking. " + (ly:context-set-property! + context property + (overridden-property-alist context property setting value))) + +(define (revert-property-setting context property setting) + "Like the C++ code that executes \revert, but without type +checking. " + + (define (revert-member alist entry new) + "Return ALIST, with ENTRY removed. ALIST is not modified, instead +a fresh copy of the list-head is made." + (cond + ((null? alist) new) + ((equal? (car alist) entry) (revert-member (cdr alist) entry new)) + (else (revert-member (cdr alist) entry (cons (car alist) new))))) + + (ly:context-set-property! + context property + (revert-member (ly:context-property context property) setting '()))) + +(define-public (override-beam-setting + time-signature rule-type rule . rest) + "Override the beam settings for the context in @var{rest}, +for @var{time-signature} and @var{rule-type}, with the +new rule alist @var{rule}. " + (define (make-setting c) + (let ((new-settings + (overridden-property-alist + c + 'beamSettings + (list time-signature rule-type) + rule))) + (ly:context-set-property! c 'beamSettings new-settings))) + + (let ((music-to-export + (context-spec-music + (make-apply-context make-setting) + (if (and (pair? rest) (symbol? (car rest))) + (car rest) + 'Voice)))) + (ly:export music-to-export))) + +(define-public (score-override-beam-setting + time-signature rule-type rule) + (override-beam-setting + time-signature rule-type rule 'Score)) + +(define-public (revert-beam-setting + time-signature rule-type . rest) + (ly:export + (context-spec-music + (make-apply-context + (lambda (c) + (revert-property-setting + c + 'beamSettings + (list time-signature rule-type)))) + (if (and (pair? rest) (symbol? (car rest))) + (car rest) + 'Voice)))) diff --git a/scm/c++.scm b/scm/c++.scm index b6ec6a4ee7..8db8bb96c0 100644 --- a/scm/c++.scm +++ b/scm/c++.scm @@ -1,7 +1,7 @@ ;;;; c++.scm -- implement Scheme frontends to C++ functions ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 1998--2009 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys @@ -41,7 +41,7 @@ ;; moved list to end of lily.scm: then all type-predicates are ;; defined. -(define type-p-name-alist '()) +(define type-p-name-alist '()) (define (match-predicate obj alist) (if (null? alist) diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 63a447c99a..b6a5becfb5 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -1,7 +1,7 @@ ;;;; define-context-properties.scm -- part of backend documentation ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 1998--2009 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen @@ -14,11 +14,11 @@ (procedure? type?) (string? description))) (throw 'init-format-error)) - - + + (if (not (equal? #f (object-property symbol 'translation-doc))) (ly:error (_ "symbol ~S redefined" symbol))) - + (set-object-property! symbol 'translation-type? type?) (set-object-property! symbol 'translation-doc description) (set! all-translation-properties (cons symbol all-translation-properties)) @@ -32,7 +32,7 @@ `( ;; TODO FIXME - + (aDueText ,markup? "Text to print at a unisono passage.") (alignAboveContext ,string? "Where to insert newly created context in vertical alignment.") @@ -92,9 +92,6 @@ arguments, @var{context}, @var{dir} [start/stop (-1 or 1)], and starts or stops the auto beam.") (autoBeaming ,boolean? "If set to true then beams are generated automatically.") - (autoBeamSettings ,list? "Specifies when automatically generated -beams should begin and end. See @ruser{Setting automatic beam -behavior} for more information.") (autoCautionaries ,list? "List similar to @code{autoAccidentals}, but it controls cautionary accidentals rather than normal ones. Both lists are tried, and the one giving the most accidentals wins. In @@ -105,7 +102,7 @@ be printed automatically; they must be explicitly created with a are still counted. Bar line generation will resume according to that count if this property is unset.") - + (barAlways ,boolean? "If set to true a bar line is drawn after each note.") (barCheckSynchronize ,boolean? "If true then reset @@ -120,8 +117,10 @@ format.") (bassStaffProperties ,list? "An alist of property settings to apply for the down staff of @code{PianoStaff}. Used by @code{\\autochange}.") - (beatGrouping ,list? "A list of beatgroups, e.g., in 5/8 time -@code{'(2 3)}.") + (beamSettings ,list? "Specifies when automatically generated +beams should begin and end, as well as beam subdivision behavior. +See @ruser{Setting automatic beam +behavior} for more information.") (beatLength ,ly:moment? "The length of one beat in this time signature.") @@ -270,11 +269,11 @@ This is used to transpose the MIDI output, and @code{\\quote}s.") (internalBarNumber ,integer? "Contains the current barnumber. This property is used for internal timekeeping, among others by the @code{Accidental_engraver}.") - + (keepAliveInterfaces ,list? "A list of symbols, signifying grob interfaces that are worth keeping a staff with @code{remove-empty} set -around for.") +around for.") (keyAlterationOrder ,list? "An alist that defines in what order alterations should be printed. The format is @code{(@var{step} . @var{alter})}, where @var{step} is a number from 0 to@tie{}6 and @@ -437,7 +436,7 @@ cautionary suggestions over the note.") of the system/staff? Set to @code{SystemStartBrace}, @code{SystemStartBracket} or @code{SystemStartBar}.") (systemStartDelimiterHierarchy ,pair? "A nested list, indicating -the nesting of a start delimiters.") +the nesting of a start delimiters.") (tablatureFormat ,procedure? "A function formatting a tablature @@ -484,7 +483,7 @@ setting this property, you can make brackets last shorter. (useBassFigureExtenders ,boolean? "Whether to use extender lines for repeated bass figures.") - + (verticallySpacedContexts ,list? "List of symbols, containing context names whose vertical axis groups should be taken into account for vertical spacing of systems.") diff --git a/scm/define-music-display-methods.scm b/scm/define-music-display-methods.scm index c0811990f7..10b1df3566 100644 --- a/scm/define-music-display-methods.scm +++ b/scm/define-music-display-methods.scm @@ -978,32 +978,37 @@ Otherwise, return #f." ;;; \time (define-extra-display-method ContextSpeccedMusic (expr parser) "If `expr' is a time signature set, return \"\\time ...\". -Otherwise, return #f." - (with-music-match (expr (music - 'ContextSpeccedMusic - element (music - 'ContextSpeccedMusic - context-type 'Timing - element (music - 'SequentialMusic - elements ((music - 'PropertySet - value ?num+den - symbol 'timeSignatureFraction) - (music - 'PropertySet - symbol 'beatLength) - (music - 'PropertySet - symbol 'measureLength) - (music - 'PropertySet - value ?grouping - symbol 'beatGrouping)))))) - (if (null? ?grouping) - (format #f "\\time ~a/~a~a" (car ?num+den) (cdr ?num+den) (new-line->lily-string)) - (format #f "#(set-time-signature ~a ~a '~s)~a" - (car ?num+den) (cdr ?num+den) ?grouping (new-line->lily-string))))) +Otherwise, return #f. Note: default grouping is not available." + (with-music-match + (expr (music + 'ContextSpeccedMusic + element (music + 'ContextSpeccedMusic + context-type 'Timing + element (music + 'SequentialMusic + elements ?elts)))) + (and + (> (length ?elts) 2) + (with-music-match ((cadr ?elts) + (music 'PropertySet + symbol 'beatLength)) + #t) + (with-music-match ((caddr ?elts) + (music 'PropertySet + symbol 'measureLength)) + #t) + (with-music-match ((car ?elts) + (music 'PropertySet + value ?num+den + symbol 'timeSignatureFraction)) + (if (eq? (length ?elts) 3) + (format + #f "\\time ~a/~a~a" + (car ?num+den) (cdr ?num+den) (new-line->lily-string)) + (format + #f "#(set-time-signature ~a ~a '())~a" + (car ?num+den) (cdr ?num+den) (new-line->lily-string))))))) ;;; \bar (define-extra-display-method ContextSpeccedMusic (expr parser) diff --git a/scm/lily.scm b/scm/lily.scm index 17063a9aef..7aa8c05c20 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -366,6 +366,7 @@ LilyPond safe mode. The syntax is the same as `define*-public'." "part-combiner.scm" "autochange.scm" "define-music-properties.scm" + "beam-settings.scm" "auto-beam.scm" "chord-name.scm" diff --git a/scm/music-functions.scm b/scm/music-functions.scm index c51a9667ad..c5e6f2da01 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -1,11 +1,11 @@ ;;;; music-functions.scm -- ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 1998--2009 Jan Nieuwenhuizen ;;;; Han-Wen Nienhuys -;; (use-modules (ice-9 optargs)) +;; (use-modules (ice-9 optargs)) ;;; ly:music-property with setter ;;; (ly:music-property my-music 'elements) @@ -36,7 +36,7 @@ First it recurses over the children, then the function is applied to MUSIC. " (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element))) - (set! (ly:music-property music 'elements) + (set! (ly:music-property music 'elements) (map (lambda (y) (music-map function y)) es)) (if (ly:music? e) (set! (ly:music-property music 'element) @@ -45,7 +45,7 @@ First it recurses over the children, then the function is applied to MUSIC. (define-public (music-filter pred? music) "Filter out music expressions that do not satisfy PRED." - + (define (inner-music-filter pred? music) "Recursive function." (let* ((es (ly:music-property music 'elements)) @@ -76,7 +76,7 @@ First it recurses over the children, then the function is applied to MUSIC. "Display music, not done with music-map for clarity of presentation." (display music) - (display ": { ") + (display ": { ") (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element))) (display (ly:music-mutable-properties music)) @@ -96,7 +96,7 @@ First it recurses over the children, then the function is applied to MUSIC. ;;; (define (markup-expression->make-markup markup-expression) "Transform `markup-expression' into an equivalent, hopefuly readable, scheme expression. -For instance, +For instance, \\markup \\bold \\italic hello ==> (markup #:line (#:bold (#:italic (#:simple \"hello\"))))" @@ -131,7 +131,7 @@ that is, for a music expression, a (make-music ...) form." (markup-expression->make-markup obj)) (;; music expression (ly:music? obj) - `(make-music + `(make-music ',(ly:music-property obj 'name) ,@(apply append (map (lambda (prop) `(',(car prop) @@ -170,7 +170,7 @@ that is, for a music expression, a (make-music ...) form." `(list ,@(map music->make-music obj))) (;; a pair (pair? obj) - `(cons ,(music->make-music (car obj)) + `(cons ,(music->make-music (car obj)) ,(music->make-music (cdr obj)))) (else obj))) @@ -204,8 +204,8 @@ Returns `obj'. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (shift-one-duration-log music shift dot) - " add SHIFT to duration-log of 'duration in music and optionally - a dot to any note encountered. This scales the music up by a factor + " add SHIFT to duration-log of 'duration in music and optionally + a dot to any note encountered. This scales the music up by a factor 2^shift * (2 - (1/2)^dot)" (let ((d (ly:music-property music 'duration))) (if (ly:duration? d) @@ -316,15 +316,15 @@ This function replaces all repeats with unfold repeats. " (if (= 0 -1) (set! count (* 2 (quotient count 3)))) - + (shift-duration-log music (+ (if seq-arg? 1 0) (ly:intlog2 count)) dot-shift) - + (if seq-arg? (ly:music-compress e (ly:make-moment (length (ly:music-property e 'elements)) 1))))))) - - + + (if (pair? es) (set! (ly:music-property music 'elements) (map unfold-repeats es))) @@ -394,9 +394,9 @@ i.e. this is not an override" (Voice Script font-size -3) (Voice Fingering font-size -8) (Voice StringNumber font-size -8))) - + (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2)) - (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) + (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) (define-safe-public (make-voice-props-revert) (make-sequential-music @@ -473,7 +473,7 @@ i.e. this is not an override" (define (ottava-modify context) "Either reset middleCPosition to the stored original, or remember old middleCPosition, add OCTAVATION to middleCPosition, and set -OTTAVATION to `8va', or whatever appropriate." +OTTAVATION to `8va', or whatever appropriate." (if (number? (ly:context-property context 'middleCOffset)) (let ((where (ly:context-property-where-defined context 'middleCOffset))) (ly:context-unset-property where 'middleCOffset) @@ -494,52 +494,50 @@ OTTAVATION to `8va', or whatever appropriate." (define-public (set-octavation ottavation) (ly:export (make-ottava-set ottavation))) -(define-public (make-time-signature-set num den . rest) - "Set properties for time signature NUM/DEN. Rest can contain a list -of beat groupings " - - (define (standard-beat-grouping num den) +;;; Need to keep this definition for \time calls from parser +(define-public (make-time-signature-set num den) + "Set properties for time signature NUM/DEN." + (make-beam-rule-time-signature-set num den '())) - "Some standard subdivisions for time signatures." - (let* - ((key (cons num den)) - (entry (assoc key '( - ; Simple time signatures - (( 3 . 8) . (3)) - (( 4 . 8) . (2 2)) - ; Compound time signatures - (( 6 . 4) . (3 3)) - (( 6 . 8) . (3 3)) - (( 6 . 16) . (3 3)) - (( 9 . 4) . (3 3 3)) - (( 9 . 8) . (3 3 3)) - (( 9 . 16) . (3 3 3)) - ((12 . 4) . (3 3 3 3)) - ((12 . 8) . (3 3 3 3)) - ((12 . 16) . (3 3 3 3)) - ; Some common irregular time signatures - (( 5 . 8) . (3 2)) - (( 8 . 8) . (3 3 2)) - )))) - - (if entry - (cdr entry) - '()))) +;;; Used for calls that include beat-grouping setting +(define-public (set-time-signature num den . rest) + "Set properties for time signature @var{num/den}. +If @var{rest} is present, it is used to make a default +@code{beamSetting} rule." + (ly:export (apply make-beam-rule-time-signature-set + (list num den rest)))) + +(define-public (make-beam-rule-time-signature-set num den rest) + "Implement settings for new time signature. Can be +called from either make-time-signature-set (used by \time +in parser) or set-time-signature (called from scheme code +included in .ly file." + + (define (make-default-beaming-rule context) + (override-property-setting + context + 'beamSettings + (list (cons num den) 'end) + (list (cons '* (car rest))))) (let* ((set1 (make-property-set 'timeSignatureFraction (cons num den))) (beat (ly:make-moment 1 den)) (len (ly:make-moment num den)) (set2 (make-property-set 'beatLength beat)) (set3 (make-property-set 'measureLength len)) - (set4 (make-property-set 'beatGrouping (if (pair? rest) - (car rest) - (standard-beat-grouping num den)))) - (basic (list set1 set2 set3 set4))) + (beaming-rule + (if (null? rest) + '() + (list (make-apply-context make-default-beaming-rule)))) + (output (cons* set1 set2 set3 beaming-rule))) (descend-to-context - (context-spec-music (make-sequential-music basic) 'Timing) 'Score))) + (context-spec-music + (make-sequential-music output) + 'Timing) + 'Score))) (define-public (make-mark-set label) - "Make the music for the \\mark command." + "Make the music for the \\mark command." (let* ((set (if (integer? label) (context-spec-music (make-property-set 'rehearsalMark label) 'Score) @@ -552,9 +550,6 @@ of beat groupings " (set! (ly:music-property ev 'label) label) ch)))) -(define-public (set-time-signature num den . rest) - (ly:export (apply make-time-signature-set `(,num ,den . ,rest)))) - (define-safe-public (make-articulation name) (make-music 'ArticulationEvent 'articulation-type name)) @@ -569,7 +564,7 @@ of beat groupings " 'span-direction span-dir)) (define-public (set-mus-properties! m alist) - "Set all of ALIST as properties of M." + "Set all of ALIST as properties of M." (if (pair? alist) (begin (set! (ly:music-property m (caar alist)) (cdar alist)) @@ -624,11 +619,9 @@ of beat groupings " (define-public (empty-music) (ly:export (make-music 'Music))) -;; Make a function that checks score element for being of a specific type. +;; Make a function that checks score element for being of a specific type. (define-public (make-type-checker symbol) (lambda (elt) - ;;(display symbol) - ;;(eq? #t (ly:grob-property elt symbol)) (not (eq? #f (memq symbol (ly:grob-property elt 'interfaces)))))) (define-public ((outputproperty-compatibility func sym val) grob g-context ao-context) @@ -649,7 +642,7 @@ of beat groupings " ;; (define-public (smart-bar-check n) - "Make a bar check that checks for a specific bar number. + "Make a bar check that checks for a specific bar number. " (let ((m (make-music 'ApplyContext))) (define (checker tr) @@ -744,11 +737,11 @@ SkipEvent. Useful for extracting parts from crowded scores" (define (delete-prop context) (let* ((where (ly:context-property-where-defined context 'graceSettings)) (current (ly:context-property where 'graceSettings)) - (prop-settings (filter + (prop-settings (filter (lambda(x) (sym-grob-context? x sym grob context-name)) - current)) + current)) (new-settings current)) - (for-each (lambda(x) + (for-each (lambda(x) (set! new-settings (delete x new-settings))) prop-settings) (ly:context-set-property! where 'graceSettings new-settings))) @@ -791,7 +784,7 @@ Syntax: (define-public (cue-substitute quote-music) "Must happen after quote-substitute." - + (if (vector? (ly:music-property quote-music 'quoted-events)) (let* ((dir (ly:music-property quote-music 'quoted-voice-direction)) (main-voice (if (eq? 1 dir) 1 0)) @@ -800,7 +793,7 @@ Syntax: (return-value quote-music)) (if (or (eq? 1 dir) (eq? -1 dir)) - + ;; if we have stem dirs, change both quoted and main music ;; to have opposite stems. (begin @@ -830,7 +823,7 @@ Syntax: (hash-ref quote-tab quoted-name #f) #f))) - + (if (string? quoted-name) (if (vector? quoted-vector) (begin @@ -857,7 +850,7 @@ Syntax: (if (and (ly:music? m) (eq? (ly:music-property m 'error-found) #t)) (set! found #t))) - + (for-each signal (ly:music-property music 'elements)) (signal (ly:music-property music 'element)) @@ -967,10 +960,10 @@ Syntax: (lambda (music parser) (music-map (quote-substitute (ly:parser-lookup parser 'musicQuotes)) music)) - + ;; switch-on-debugging (lambda (x parser) (music-map cue-substitute x)) - + (lambda (x parser) (skip-as-needed x parser) ))) @@ -989,14 +982,14 @@ Syntax: ;;;;;;;;;;;;;;;;; ;; lyrics -(define (apply-durations lyric-music durations) +(define (apply-durations lyric-music durations) (define (apply-duration music) (if (and (not (equal? (ly:music-length music) ZERO-MOMENT)) (ly:duration? (ly:music-property music 'duration))) (begin (set! (ly:music-property music 'duration) (car durations)) (set! durations (cdr durations))))) - + (music-map apply-duration lyric-music)) @@ -1319,14 +1312,14 @@ use GrandStaff as a context. " pcontext)) ;; same as modern, but cautionary accidentals are printed for all sharp or flat - ;; tones specified by the key signature. + ;; tones specified by the key signature. ((equal? style 'teaching) (set-accidentals-properties #f `(Staff ,(make-accidental-rule 'same-octave 0)) `(Staff ,(make-accidental-rule 'same-octave 1) ,teaching-accidental-rule) context)) - + ;; do not set localKeySignature when a note alterated differently from ;; localKeySignature is found. ;; Causes accidentals to be printed at every note instead of @@ -1363,7 +1356,7 @@ use GrandStaff as a context. " (define-public (mmrest-of-length mus) "Create a mmrest of exactly the same length as MUS." - + (let* ((skip (make-multi-measure-rest (ly:make-duration 0 0) '()))) @@ -1379,7 +1372,7 @@ use GrandStaff as a context. " (if (pair? evs) (ly:music-property (car evs) 'pitch) #f))) - + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-public (extract-named-music music music-name) @@ -1395,7 +1388,7 @@ from @code{music}." (extract-named-music elt music-name) (if (null? elts) '() - (map (lambda(x) + (map (lambda(x) (extract-named-music x music-name )) elts))))) '()))) -- 2.39.2