Deutsches Lilypond Forum (Archiv)
Allgemein => Allgemeine Diskussion => Thema gestartet von: bblochl am Freitag, 28. Juni 2013, 12:36
-
Im Thread https://liarchiv.joonet.de/index.php?topic=843.msg4652#msg4652 werden einige Eigenschaften von proportionalNotationDuration diskutiert.
Hier ein Beispiel, bei dem proportionalNotationDuration nicht funktioniert:
\version "2.16.2"
\layout {
\context {
\Score
%\override NonMusicalPaperColumn #'line-break-permission = #f
proportionalNotationDuration = #(ly:make-moment 1 16)
}
}
Noteneins = {
\relative c''{
\key a \major
\time 2/4
\tempo "1. Beispiel"
\repeat volta 1 {
a8. [cis16 a8 e] |
g8. [b16 e8 e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
}
Notenzwei = {
\relative c'{
\key a \major
\time 2/4
\tempo "2. Beispiel -Triples (Triolen)"
\repeat volta 1 {
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} |
\times 2/3 {d [b b]} \times 2/3 {e [b g]} |
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
}
}
}
% 1. Zeile
\score {
<<
% \set proportionalNotationDuration = #(ly:make-moment 1 8)
\new Staff {
\Noteneins
}
>>
}
% 2. Zeile
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
Vielleicht gibt es einen Trick oder ich habe was falsch gemacht. Wenn nicht, dann würde ich das als Bug ansehen.
Grüße
-
was genau erwartest du, was stimmt nicht?
-
Entschuldigung, ist mir ein Fehler unterlaufen. Ich kämpfe mit einem Problem wobei das Ergebnis vom davor liegenden Code udn dann zusätzlich noch von der Einstellung von proportionalNotationDuration abhängt. Kam dabei ein bisschen durcheinander.
Mit
proportionalNotationDuration = #(ly:make-moment 1 16)
anstelle von
proportionalNotationDuration = #(ly:make-moment 1 8)
funktioniert das tatsächlich und zwar unabhängig davon, ob die erste Zeile 16-Noten enthält oder nicht.
Hier ein reduziertes Beispiel, bei dem die Darstellung bei einem Taktwechsel ungleich lang ist (das passierte ursprünglich auch in einem ursprünglichen Programmmit Triolen unter bestimmten Umständen von Taktwechseln, das ich aber beim Experimentieren völlig verändert habe) :
\version "2.16.2"
\layout {
\context {
\Score
\override NonMusicalPaperColumn #'line-break-permission = #f
proportionalNotationDuration = #(ly:make-moment 1 8)
}
}
Noteneins = {
\relative c''{
\key a \major
\time 2/4
\tempo "1. Beispiel"
\repeat volta 1 {
a8 [cis8 a e] |
gis8 [b8 e e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
}
Notenzwei = {
\relative c''{
\key a \major
%\time 2/4
\tempo "3. Beispiel 4/4"
a8 [cis a e] |
gis8 [b e e]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
% 1. Zeile
\score {
<<
% \set proportionalNotationDuration = #(ly:make-moment 1 8)
\new Staff {
\Noteneins
}
>>
}
% 2. Zeile
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
Ich glaube mit dem Beispiel ist der Kern des Problems möglicherweise zu analysieren.
Seltsam ist außerdem noch, dass, enn man mit einem 4/4 in der ersten Zeile startet, dann eine Zeile 3/4 oder 2/4 hat und dann wieder zu 4/4 wechselt sind die Zeilen doch wieder gleich lang!?? Wenn man dazwischen keine anderen Takte hat funktioniert das auf jeden Fall. Nach meinen Experimenten funktioniert das immer(?) sofern man in der ersten zeiel 4/4-Takt hat. Etwas sehr seltsam.
Keine Ahnung ob das ein Fehler ist? Ich würde zumindest auch nach einem Taktwechsel gleich lange Zeilen erwarten.
Grüße
-
hallo - ich verstehe immer noch nicht recht, was du erreichen möchtest!?
dass die zeile (der score) mit dem 4/4 takt kürzer ist liegt wohl daran, dass zwei taktstriche weniger sind - du kannst sie manuell einfügen.
gruss
Eluze
-
Danke voerst mal. Ja, die Begründung mit den Taktstrichen ist ja eigentlich logisch aber habe ich nicht daran gedacht. Ich dachte mit proportionaler Notation erledigt sich das von alleine.
Kann ich auch Taktstriche einfügen und die dann irgendwie unsichtbar (jeden zweiten) und dann wieder sichtbar (jeden dritten) setzen, dann habe ich ja gleich lange Notenzeilen auch im 4/4-Takt, was ich haben möchte. Mit sichtbaren Taktstrichen im 2/4-Takt wäre das aber etwas komisch , eineTaktkennzeichnung 4/4 aber 2/4-Takte?
Grüße
-
Habe die Länge für verschiedene Takte (4/4, 3/4, 2/4) nachgemessen und in der Tat braucht jeder Taktstrich 2 mm!
Ein Fehler ist das dann wohl nicht.
Grüße
-
ja klar:
\once \override Staff.BarLine.transparent=##t \bar "|"
-
Danke für die Lösung! \once kannte ich noch nicht. Werde das gleich ausprobieren. Nachdem die Ursache des Problems klar war, habe ich im Handbuch noch eine andere Lösungsmöglichkeit gefunden, die vielleicht interessant ist:
\override Score.SpacingSpanner #'strict-note-spacing = ##t
Ob das veilleicht an anderer Stelle "hakt" kann sich erst bei längerem Gebrauch zeigen.
Beispiel:
\version "2.16.2"
\layout {
\context {
\Score
\override NonMusicalPaperColumn #'line-break-permission = #f
proportionalNotationDuration = #(ly:make-moment 1 8)
}
}
Noteneins = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 2/4
\tempo "1. Beispiel"
a8 [cis8 a e] |
gis8 [b8 e e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Notenzwei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
%\time 2/4
\tempo "2. Beispiel 4/4"
a8 [cis a e] |
gis8 [b e e]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Notendrei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 3/4
\tempo "3. Beispiel 3/4"
a8 [cis a e] |
gis8 [b e e]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
% 1. Zeile
\score {
<<
% \set proportionalNotationDuration = #(ly:make-moment 1 8)
\new Staff {
\Noteneins
}
>>
}
% 2. Zeile
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
% 3. Zeile
\score {
<<
\new Staff {
\Notendrei
}
>>
}
Habe gerade in der pdf gesehen, dass in der 3. Zeile ein Balken über einen Taktstrich geht, unschö, aber ich lass das mal in diesem musikalisch uninterssanten Beispiel.
Nochmal vielen Dank für die Hilfe und die Denkhilfe!
Grüße
-
Leider lande ich wieder beim Triolenproblem und frage mich, ob das nicht doch kein Denkfehler, sondern ein Bug ist?
Ich möchte gleich lange Zeilen!
Beispiel:
\version "2.16.2"
\layout {
\context {
\Score
\override NonMusicalPaperColumn #'line-break-permission = #f
proportionalNotationDuration = #(ly:make-moment 1 8)
}
}
Noteneins = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 2/4
\tempo "1. Beispiel"
a8 [cis8] a [e] |
gis8 [b8] e [e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Notenzwei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
%\time 2/4
\tempo "2. Beispiel 4/4"
a8 [cis] a [e] |
gis8 [b] e [e]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Notendrei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 3/4
\tempo "3. Beispiel 3/4"
a8 [cis] a [e] |
gis8 [b] e [e]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Triolen = {
\relative c'{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 2/4
\tempo "4. Beispiel -Triples (Triolen)"
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} |
\times 2/3 {d [b b]} \times 2/3 {e [b g]} |
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\bar "||"
}
}
Triolenzwei = {
\relative c'{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 3/4
\tempo "4. Beispiel -Triples (Triolen)"
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} |
\times 2/3 {d [b b]} \times 2/3 {e [b g]} |
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\bar "||"
}
}
% 1. Zeile
\score {
<<
\new Staff {
\Noteneins
}
>>
}
% 2. Zeile
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
% 3. Zeile
\score {
<<
\new Staff {
\Notendrei
}
>>
}
% 4. Zeile
\score {
<<
\new Staff {
\Triolen
}
>>
}
% 5. Zeile
\score {
<<
\new Staff {
\Triolenzwei
}
>>
}
Wenn ich die Zeile
proportionalNotationDuration = #(ly:make-moment 1 8)
auskommentiere, dann wird die Zeile mit den Triolen länger als die anderen Zeilen. Mit der Zeile ist es anders rum.
Grüße
-
bitte korrigiere deinen code - es ist etwas lästig, immer die gleichen fehler korrigieren zu müssen!
im log steht ja, was falsch ist.
was meinst mit gleich lang?
die triolen haben ja 18 achtel, das ergibt im 2/4 takt 3 takte; im 3/4 takt -> 2 takte.
diese 2 "zeilen" sind nicht vergleichbar mit den oberen, die jeweils 8 viertel haben.
Eluze
-
Habe den "Fehler" endlich gefunden!
Mit
proportionalNotationDuration = #(ly:make-moment 1 8)
geht das schief!
Owohl kein Sechzentel dabei ist muss in der Zeile 16 eingetragen werden:
proportionalNotationDuration = #(ly:make-moment 1 16)
Wußte ich nicht, steht auch nicht irgendwo - konnte ich zumindest im Handbuch und bei Internetsuche nicht finden!
Hier der Code (ohne Fehlermeldungen, die aber mit dem Grundproblem nichts zu tun hatten):
\version "2.16.2"
\layout {
\context {
\Score
\override NonMusicalPaperColumn #'line-break-permission = #f
proportionalNotationDuration = #(ly:make-moment 1 8)
}
}
Noteneins = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 2/4
\tempo "1. Beispiel"
a8 [cis8] a [e] |
gis8 [b8] e [e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Notenzwei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
%\time 2/4
\tempo "2. Beispiel 4/4"
a8 [cis] a [e] |
gis8 [b] e [e]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Notendrei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 3/4
\tempo "3. Beispiel 3/4"
a8 [cis] a [e] gis8 [b]
e [e] cis [e] a,4 |
cis4 [e] a, |
\bar "||"
}
}
Triolen = {
\relative c'{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 2/4
\tempo "4. Beispiel -Triples (Triolen)"
\times 2/3 {cis'8 [b cis]} \times 2/3 {e [cis a]} |
\times 2/3 {d [b b]} \times 2/3 {e [b g]} |
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\bar "||"
}
}
Triolenzwei = {
\relative c'{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 3/4
\tempo "4. Beispiel -Triples (Triolen)"
% drei Triolen = 3 Viertel
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} \times 2/3 {d [b b]}
\times 2/3 {e [b g]} \times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]} \times 2/3 {d [b b]} |
\bar "||"
}
}
\score {
<<
\new Staff {
\Noteneins
}
>>
}
\score {
<<
\new Staff {
\Triolen
}
>>
}
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
\score {
<<
\new Staff {
\Notendrei
}
>>
}
\score {
<<
\new Staff {
\Triolenzwei
}
>>
}
Wer's nicht glaubt, kann ja mal wie oben beschrieben versuchshalber 8 statt 16 einsetzen.
Danke für die Hilfen, Hinweise und die Geduld mit mir. War leider etwas länglich und schwierig, ist aber nachdem das Problem erkannt ist erledigt. (Ob das ein Bug ist, sollen die Entwickler entscheiden.) Jetzt wo ich weiß was ich tun muss, kann ich damit leben.
Grüße
-
hallo nochmals!
wenn ich dieses beispiel kompiliere erhalte ich einige warnungen + 1 fehler:
warning: type check for `line-break-permission' failed; value `#<Prob: Music C++: Music((origin . #<location C:/Program Files (x86)/LilyPond/usr/share/lilypond/cur
es ist klar, das hat mit der line-break-permission zu tun und tatsächlich: du schreibst #f statt ##f
dann33:22: warning: barcheck failed at: 1/2
a8 [cis] a [e]
:
und:51:7: warning: stem does not fit in beam
cis4 [-hallo e] a, |
die erste zahl zeigt jeweils die zeile an, die zweite die position in der zeile - es ist also ganz einfach, den fehler zu finden.
es gibt noch weitere warnungen.
natürlich hat das hier nichts mit dem "bug" den du suchst zu tun, doch häufig haben solche ereignisse unerwartete auswirkungen - man tut also gut daran, sie zu eliminieren!
und nun: inwiefern sind die zeilen gleich??? bei mir ist (fast) jede zeile unterschiedlich lang! :o
mir ist also immer noch unklar, was du erreichen möchtest!
übrigens:
4.5.5 Proportional notation
The proportionalNotationDuration setting takes a single argument, which is the reference
duration against that all music will be spaced. The LilyPond Scheme function make-moment takes
two arguments – a numerator and denominator which together express some fraction of a whole
note. The call (ly:make-moment 1/20) therefore produces a reference duration of a twentieth
note. Values such as (ly:make-moment 1/16), (ly:make-moment 1/8), and (ly:make-moment
3/97) are all possible as well.
How do we select the right reference duration to pass to proportionalNotationDuration?
Usually by a process of trial and error, beginning with a duration close to the fastest (or smallest)
duration in the piece. Smaller reference durations space music loosely; larger reference durations
space music tightly.
da steht doch ziemlich genau (mit nachfolgenden beispielen!) wie man vorgehen soll, oder?
also dann weiterhin viel spass :D
Eluze
-
Hier ein fehlerfreie compilierende Code mit gleich langen Zeilen:
\version "2.16.2"
\paper {
indent = 0
line-width = #150
tagline = ##f
}
\layout {
\context {
\Score
\override NonMusicalPaperColumn #'line-break-permission = ##f
proportionalNotationDuration = #(ly:make-moment 1 16)
}
}
Noteneins = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 2/4
\tempo "1. Beispiel"
a8 [cis8] a [e] |
gis8 [b8] e [e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
\bar "||"
}
}
Notenzwei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
%\time 2/4
\tempo "2. Beispiel 4/4"
a8 [cis] a [e] gis [b] e [e] |
cis8 [e] a,4 cis8 [e] a,4 |
\bar "||"
}
}
Notendrei = {
\relative c''{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 3/4
\tempo "3. Beispiel 3/4"
a8 [cis] a [e] gis [b] |
e [e] cis [e] a,4 |
e8 [e] cis [e] a,4 |
\bar "||"
}
}
Triolen = {
\relative c'{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 2/4
\tempo "4. Beispiel -Triples (Triolen)"
\times 2/3 {cis'8 [b cis]} \times 2/3 {e [cis a]} |
\times 2/3 {d [b b]} \times 2/3 {e [b g]} |
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\bar "||"
}
}
Triolenzwei = {
\relative c'{
\override Score.SpacingSpanner #'strict-note-spacing = ##t
\key a \major
\time 3/4
\tempo "4. Beispiel -Triples (Triolen)"
% drei Triolen = 3 Viertel
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} \times 2/3 {d [b b]}
\times 2/3 {e [b g]} \times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]} \times 2/3 {d [b b]} |
\bar "||"
}
}
\score {
<<
\new Staff {
\Noteneins
}
>>
}
\score {
<<
\new Staff {
\Triolen
}
>>
}
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
\score {
<<
\new Staff {
\Notendrei
}
>>
}
\score {
<<
\new Staff {
\Triolenzwei
}
>>
}
Dass proportional NotationDuration was mit dem Platz zu tun hat, den die Note einnimmt, erkennt man ja recht schnell. Man muss aber etwas weiter denken und wenn man das Problem genau analysiert, dann kommt man aber auf en Trichter, das gleich lange Zeilen gleich lange Takte erfordern, also muss man em Abschnitt
Aber bei sehr genauer Betrachtung sind die Noten der zweiten Hälfte der Nonole doch immer noch eine Spur weiter gesetzt als die Noten der ersten Hälfte. Um wirklich gleichmäßige Abstände zu erzwingen, sollte auch noch die gleichmäßige Dehnung (uniform-stretching) angeschaltet werden, die eine Eigenschaft von SpacingSpanner ist:
seine Aufmerksamkeit schenken und stößt dann auf
proportionalNotationDuration = #(ly:make-moment 1 20)
\override SpacingSpanner #'uniform-stretching = ##t
Dass das aber in meinem Fall (und in anderen Fällen) proportionalNotationDuration nur mit 16 aber nicht mit 8 funktioniert, woran ich ja ziemlich gekaut habe, kann ich daraus nicht erkennen? Dort wird zwar 20 benutzt, aber als Laie sah ich nur 8 in den Noten und habe eben 8 benutzt, aber es funktioniert aber eben nur ab 15 oder größer. (Ich hab's in Versuchsreihen probiert!).
Auf das
\override Score.SpacingSpanner #'strict-note-spacing = ##t
stößt man dann weiter unten, die Bedeutung für den Takt ist ja beschreiben und auch erforderlich für gleich lange Zeilen, muss man aber auch erst mal erkennen.
Nochmals danke und Grüße
-
Nachtrag:
Mit gleich lagen Zeilen meine ich gleich lang mit gleichen Notenwerten und nicht gleich lang unabhängig von den Notenwerten.
Also eine Zeile mit einem Takt 4/4 ist also halb so lang wie eine Zeile mit 2 Takten 4/4. Und eine Zeile mit 4 x 2/4-Takten soll gleich lang sein wie eine Zeile mit 3 Takten mit je 3 Triolen im 3/4-Takt.
-
hallo!
du hast in deiner letzten version \override SpacingSpanner #'uniform-stretching = ##t ausgelassen - warum?
und ein kleines detail: warum schreibst du \override SpacingSpanner #'strict-note-spacing = ##tnicht einfach nur einmal in den \layout block (erspart doch arbeit!)?
sonst scheint ja jetzt alles klar und sauber - gratuliere!
Eluze
-
Zunächst warum habe ich einige Anweisungen weggelasse? Beim "Aufräumen" habe ich durch Auskommentieren festgestellt, dass sie nicht benötigt werden. Z. B.
\override Score.SpacingSpanner #'strict-note-spacing = ##t bringt zusammen mit
proportionalNotationDuration = #(ly:make-moment 1 16) doch wohl nichts - oder?
Kern der "Lösung" sind die Anweisung
proportionalNotationDuration = #(ly:make-moment 1 16) mit (wichtig!) der Referenz größer/gleich 1/15. Vermutlich muss man die noch verkleinern wenn man mit Sechzelnden oder kleiner arbeitet. Dazu kommt die vorgegebene Zeilenlänge, die Lilypond vermutlich die Freiheit zum optisch perfekten Aufbereiten nimmt:
\paper {
indent = #0
line-width = #150
ident = #0 unterdrückt die Einrückung bei neuer Zeile. Iim Fall eines Zeilenumbruchs macht sich das bemerkbar, im Fall von lediglich einzelnen Notenzeilen gibt das nur zusätzlichen Raum am Zeilenanfang.
Der Code funktioniert für meine Zwecke für 4 Takte in einer Zeile zunächst mal, aber dass das keine wirklich "gute" Lösung ist zeigt sich wenn man etwas weiter "spielt". Dann könnten die weggelassenen Anweisungen doch wieder eine Rolle spielen. Ich sende mal ein Code-Beispiel wo das erkennbar wird. Nämlich wenn die Zeile aus 5 oder 6 Takten Takten besteht statt 4, oder nur einem Takt. Dann kommt der Zeile
\override NonMusicalPaperColumn #'line-break-permission = ##fim layout-Block große bedeutung zu, wovon man sich durch Auskommentieren ja überzeugen kann. Das Ergebnis ist wesentlich untershiedlich.
Im Fall eiens Zeilenumbruchs kommt dann auch dem Platzhalter für die Taktangabe wieder Bedeutung zu, wenn die Taktstriche nach einem Zeilenumbruch fluchten sollen (siehe weiter oben im Thread).
Platzhalter für Taktstriche braucht am aber glücklicherweise nicht - das wäre sehr großer Aufwand, die je nach Fall von Hand sichtbar/unsichtbar zu setzen.
Hier zum Experimentieren der Code:
\version "2.16.2"
\paper {
indent = #0
line-width = #150
}
\layout {
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 16)
%\override NonMusicalPaperColumn #'line-break-permission = ##f
}
}
Noteneins = {
\relative c''{
\key a \major
\time 2/4
\tempo "1. Beispiel"
a8 [cis8] a [e] |
gis8 [b8] e [e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
a8 [cis8] a [e] |
\bar "||"
}
}
Noteneinszwei = {
\relative c''{
\key a \major
\time 2/4
\tempo "1. Beispiel"
a8 [cis8] a [e] |
gis8 [b8] e [e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
a8 [cis8] a [e] |
gis8 [b8] e [e8]
\bar "||"
}
}
Notenzwei = {
\relative c''{
\key a \major
%\time 2/4
\tempo "2. Beispiel 4/4"
a8 [cis] a [e] gis [b] e [e] |
cis8 [e] a,4 cis8 [e] a,4 |
\bar "||"
}
}
Notendrei = {
\relative c''{
\key a \major
\time 3/4
\tempo "3. Beispiel 3/4"
a8 [cis] a [e] gis [b] |
e [e] cis [e] a,4 |
e8 [e] cis [e] a,4 |
\bar "||"
}
}
Triolen = {
\relative c'{
\key a \major
\time 2/4
\tempo "4. Beispiel -Triples (Triolen)"
\times 2/3 {cis'8 [b cis]} \times 2/3 {e [cis a]} |
\times 2/3 {d [b b]} \times 2/3 {e [b g]} |
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\bar "||"
}
}
Triolenzwei = {
\relative c'{
\key a \major
\time 3/4
\tempo "4. Beispiel -Triples (Triolen)"
% drei Triolen = 3 Viertel
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} \times 2/3 {d [b b]}
\times 2/3 {e [b g]} \times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]} \times 2/3 {d [b b]} |
\bar "||"
}
}
Notenvier = {
\relative c''{
\key a \major
%\time 2/4
\tempo "2. Beispiel 4/4"
a8 [cis] a [e] gis [b] e [e] |
\bar "||"
}
}
\score {
<<
\new Staff {
\Noteneins
}
>>
}
\score {
<<
\new Staff {
\Noteneinszwei
}
>>
}
\score {
<<
\new Staff {
\Triolen
}
>>
}
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
\score {
<<
\new Staff {
\Notenvier
}
>>
}
\score {
<<
\new Staff {
\Notendrei
}
>>
}
\score {
<<
\new Staff {
\Triolenzwei
}
>>
}
Nicht immer ist alles so klar und einfach, wie es oft in den Blogs hier dargestellt wird. Beispielsweise der Code in Kapitel 4.5.4 Zeilenlänge
http://lilypond.org/doc/v2.16/Documentation/notation/line-length
\layout {
indent = #0
line-width = #150
ragged-last = ##t
}führt zu endlosen Meldungen. Erst wenn ich das in
\paper {
indent = #0
line-width = #150
}auslagere compiliert das ohne besondere Meckerei.
-
vielleicht doch:
When strict-note-spacing is set, notes are spaced without regard for clefs, bar lines, and
grace notes
und :
By default, spacing in tuplets depends on various non-duration factors (such as accidentals,
clef changes, etc). To disregard such symbols and force uniform equal-duration spacing, use
Score.SpacingSpanner.uniform-stretching. This property can only be changed at the beginning
of a score
oder:
Setting proportionalNotation-Duration without also setting the SpacingSpanner’s ’uniform-stretching attribute to ##t will,
for example, cause Skips to consume an incorrect amount of horizontal space.
Eluze
-
Es ist leider so, dass
override SpacingSpanner #'strict-note-spacing = ##tvöllig wirkungslos bleibt! Vielleicht funktioniert diese Methode ja gar nicht?
Hier ein Code zum Testen (nicht besonders sorgfältig formatiert, sondern "quick and dirty". Komentiere mal mit und ohne der fraglishen Zeile. Ich habe das getan, jeweils ausgedruckt und die zwei Ausgaben übereinander gelegt und gegen eine Lichtquelle betrachtet. Ergebnis. Völlig identisch! Weder in dem einen noch im anderen Fall werden diese von Dir aus dem Handbuch zitierten Extras irgendwie kompensiert! Die Taktstriche werden leider unterschiedlich gesetzt. Die Eigenschaft die der Zeile laut Handbuch zugeschrieben wird, erfüllt diese nicht!
Code zum "spielen":
\version "2.16.2"
\paper {
indent = #0
line-width = #150
}
\layout {
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 16)
\override NonMusicalPaperColumn #'line-break-permission = ##f
%override SpacingSpanner #'strict-note-spacing = ##t
}
}
Noten = {
\relative c''{
\key a \major
%\time 2/4
\tempo "Beispiel 4/4 4 Takte"
a8 [cis] a [e] gis [b] e [e] |
cis8 [e] a,4 cis8 [e] a,4 |
a8 [cis] a [e] gis [b] e [e] |
cis8 [e] a,4 cis8 [e] a,4 |
\bar "||"
}
}
Noteneins = {
\relative c''{
\key a \major
\time 2/4
\tempo "Beispiel 4/4 5 Takte mit extras"
a8 [cis8] a [e] |
c4 \grace { a32[ b] } c4 |
c4 \appoggiatura b16 c4 |
c4 \acciaccatura b16 c4 |
\bar "||"
}
}
Notenzwei = {
\relative c''{
\key a \major
%\time 2/4
\tempo "Beispiel 3/4 mit accidentals"
\time 3/4
% FIXME: standard vs default, alteration-FOO vs FOO-alteration
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter default } c ces
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter hufnagel } c ces
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter medicaea } c ces
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter vaticana } c ces
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter mensural } c ces
\bar "||"
}
}
Notenvier = {
\relative c''{
\key a \major
%\time 2/4
\tempo "Beispiel 4/4 mit clef changes "
a8 [cis] a [e] gis [b] e [e] |
\clef "treble_(8)"
c2 c
\clef "bass^[15]"
c2 c
a8 [cis] a [e] gis [b] e [e] |
\bar "||"
}
}
\score {
<<
\new Staff {
\Noten
}
>>
}
\score {
<<
\new Staff {
\Noteneins
}
>>
}
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
\score {
<<
\new Staff {
\Notenvier
}
>>
}
Grüße
-
hallo
man müsste eigentlich nur einen score mit verschiedenen paramtern vergleichen, z.b. dein notenvier:
das sind doch sichtbare unterschiede, nicht!?
dass mit dem hier unsinnigen line-break-permission = ##f alles an der "falschen" stelle zusammengestacuht wird sei hier nur am rande bemerkt (man kann nicht erwarten dass ein mit 16-tel oder 64-tel gefüllter takt gleich lang ist wie einer mit einem ganzton…) - wenn man diesen parameter setzt, ist man selbst verantwortlich für stimmige breaks!
LilyPond versucht sein bestes und wo es nicht mehr geht passieren eben diese staucheffekte.
ich hänge noch ein bild der 4 varianten für notenvier an.(http://)
gruss
Eluze
-
Ich kann nur noch mal bestätigen, dass kein Unterschied feststellbar ist, ob ich die Zeile
\override SpacingSpanner #'strict-note-spacing = ##taktiv lasse oder auskommentiere - das gilt für meinen Code, ich habe das mit einigen Änderungen der Noten erneut probiert. Ich bin sicher dass das mit anderem Code anders sein kann. Mit den Extras... etc funktioniert zwar die gleiche Länge, aber die Taktstriche fluchten nicht mehr, ob mit oder ohne die Zeile oben. Nochmal: Da ist kein Unterschied feststellbar! Aus Deinen Code-Beispielen sehe ich, dass Du 2.17 verwendest, ich verwende 2.16 - kann das den Unterschied machen?
(man kann nicht erwarten dass ein mit 16-tel oder 64-tel gefüllter takt gleich lang ist wie einer mit einem ganzton…)
das funktioniert schon, sofern nichts unmögliches von lilypond verlangt wird. Meine ganzen Beispeile zeigen das ja, dass es funktioniert. Allerdings mit den Extras \clef usw. versagt das und zwar wie mehrfach geschrieben mit oder ohne die Zeile oben.
proportionalNotationDuration = #(ly:make-moment 1 32) ist ziemlich powerfull, solange man den Wert nicht zu klein setzt. Der geht übrigens logarithmisch oder quadratisch ein, wie ich aus Reihenexperimenten gefunden habe. Ob das so gut ist, weiß ich nicht. Am Anfang tut sich bei Erhöhung nämlich (fast) gar nichts, "explodiert" aber dann. Vermutlich funktioniert das bei mir erst ab 1/15.
Für mich als Laien sind dei Zusammenhänge der verschiedenen Möglichkeiten in \layout nicht transparent. Wie ich ja oben schrieb, geht der Pramater in
proportionalNotationDuration = #(ly:make-moment 1 16)logarithmisch, vielleicht aber auch quadratisch ein, andere Parameter anderer Funktionen vielleicht linear ... usw. Man kann ja widersprechende Optionen aneinanderreihen, dann gibt es immer minimale Unterschied, wie Du ja gezeigt hast.
Ich bin sehr weit davon entfernt, das voll zu verstehen - müsste ich möglicherweise Sourcen analysieren, Gott bewahre!
Grüße
Ich hänge nochmal einen Code zum Spielen an, wo man sieht, dass die Taktsriche nicht mehr fluchten. Das liegt vermutlich am Platz, den die "Extras" benötigen.
(Aber
\override SpacingSpanner #'strict-note-spacing = ##thilft nicht dagegen!
\version "2.16.2"
\paper {
indent = #0
line-width = #150
}
\layout {
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 32)
\override NonMusicalPaperColumn #'line-break-permission = ##f
\override SpacingSpanner #'strict-note-spacing = ##t
}
}
Noten = {
\relative c''{
\key a \major
%\time 2/4
\tempo "Beispiel 4/4 4 Takte"
a2 e2 |
cis8 [e] a,4 cis8 [e] a,4 |
a8 [cis] a [e] gis [b] e [e] |
cis8 [e] a,4 cis8 [e] a,4 |
\bar "||"
}
}
Noteneins = {
\relative c''{
\key a \major
\time 2/4
\tempo "Beispiel 4/4 4 Takte mit extras"
c4 \appoggiatura b16 c4 |
c4 \acciaccatura b16 c4 |
a8 [cis8] a [e] |
c4 \acciaccatura b16 c4 |
\bar "||"
}
}
Notenzwei = {
\relative c''{
\key a \major
%\time 2/4
\tempo "Beispiel 3/4 4 Takte mit accidentals"
\time 3/4
% FIXME: standard vs default, alteration-FOO vs FOO-alteration
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter default } c ces
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter hufnagel } c ces
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter medicaea } c ces
\override Staff.Accidental #'glyph-name-alist = #standard-alteration-glyph-name-alist
cis^\markup { \typewriter vaticana } c ces
\bar "||"
}
}
Notenvier = {
\relative c''{
\key a \major
%\time 2/4
\tempo "Beispiel 4/4 mit clef changes "
\override Staff.Clef #'full-size-change = ##t
%\set Score.proportionalNotationDuration = #(ly:make-moment 1 8)
\clef french
gis4 a8 [b] c4 d4
\clef treble
g1
\clef "G^8"
g1
\clef "G_8"
g1
}
}
\score {
<<
\new Staff {
\Noten
}
>>
}
\score {
<<
\new Staff {
\Noteneins
}
>>
}
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
\score {
<<
\new Staff {
\Notenvier
}
>>
}
-
also nochmals von vorn:
mit dem code
\version "2.16.0"
\paper { indent = #0 }
{ \repeat unfold 2 \repeat unfold 16 c'16 }bringst du 2 takte auf eine zeile - ein dritter takt liegt offensichtlich nicht drin.
nun fügst du weitere parameter hinzu:
\layout {
\context {
\Score
proportionalNotationDuration = #(ly:make-moment 1 16)
}
}
das funktioniert gut, denn LilyPond orientiert sich hier (soviel ich weiss) an der kürzesten dauer.
wenn wir diesen parameter nun auf
proportionalNotationDuration = #(ly:make-moment 1 32) ändern (also verdoppeln) dann hat der code zu wenig platz in einer zeile und es erfolgt - wenn durch ein \bar … oder natürlicherweise am taktende ermöglicht - ein umbruch: LilyPond skaliert die abstände als ob 32 32-tel vorhanden wären (pro takt)
mit diesen überlegungen sollte es klar sein, dass eine zeile mit 64 64-teln (4 takte à 16 16-tel) gar nicht dargestellt werden kann!
du hast übrigens noch nicht beantwortet, was du mit dem ganzen erreichen willst!
Eluze
-
du hast übrigens noch nicht beantwortet, was du mit dem ganzen erreichen willst!
Doch. Ich habe weiter oben geschrieben, dass ich für kurze Übungsstücke mit beliebig gemischten Notenwerten (viertel, achtel, sechzehntel ...) natürlich unter Befolgung der musikalischen Grundregeln je Takt, jeweils 4 Takte in einer Zeile haben möchte. Daraus ergibt sich natürlich in jeder Zeile gleiche, addierte Gesamtnotenzeit. Das habe ich auch bereits erreicht, wenn auch unter großen Mühen und damit bin ich (zunächst) völlig zufrieden.
Danach tauchte die Frage der "besonderen" Umstände auf (clefs, Extras ...usw.) ud ich habe das daraufhin untersucht. Es funktioniert zwar eine Zeile immer noch, aber dann doch nicht mit gleichen Taktlängen. Wundert mich eigentlich nicht, da
proportionalNotationDuration = #(ly:make-moment 1 32)ja nur Notenwerte Berücksichtigt und nicht "Extras". Das stört mich zunächst nicht, weil ich solche nicht habe. Die Frage nach solchen "Extras" kam nicht von mir, tauchte dann aber in der Diskussion auf. Ist ja auch gut, die Grenzen der "Lösung" zu kennen. Und noch mal:
\override SpacingSpanner #'strict-note-spacing = ##thilft dagegen nicht. obwohl das nach Handbuch Abhilfe bieten soll?
das funktioniert gut, denn LilyPond orientiert sich hier (soviel ich weiss) an der kürzesten dauer.
Die weitere Diskussion hat sich dann ein bisschen vom Kernproblem zu Partikularproblemen verlagert. Z. B. dass das Ganze mit 1/8 absolut nicht funktioniert, erst ab 1/15. Daran anknüpfend ist festzustellen, dass zwar der Wert von 1/16 auf 1/32 sich verdoppelt, aber sich eine Taktlänge von 46 mm auf 70 mm (1,52 fach) verlängert (gleiche Notenwerte - versteht sich), die gesamte Zeilenlänge von 87 mm auf 154 mm (1,77 fach), sich also nicht verdoppelt. Der Zusammenhang ist also nicht linear - was im Handbuch beispielsweise nicht steht. Im Allgemeinen ist das auch nicht wichtig, aber unter besonderen Umständen dann eben doch. Ich habe ja schon angemerkt, dass die Unterschiede verschiedener Anweisungs-Kombinationen vermutlich von solchen verschiedenen Funktionen folgenden Parametern ist. Diese sind sicherlich durchdacht und gut für die Skalierung zu einem schönen Notenbild, für einen Laien mit Sondervorsttellung hinsichtlich der Darstellung wie mich aber recht schwierig zu verstehen.
Die wichtigste Erkenntnis war, dass es keineswegs ausreicht, den Wert in
proportionalNotationDuration = #(ly:make-moment 1 32)auf den kleinsten vorkommenden Notenwert zu setzen! Das machte große Probleme und unter 1/15 lief bei mir gar nichts (sieh die Entwicklung des Codes in den zurückliegenden Postings). Und das steht auch so nicht im Handbuch.
Ich habe sehr viel dazu gelernt, mein Problem ist gelöst. Wenn kein weiteres Interesse an Diskussion besteht, würde ich vorschlagen, den Thread zu schließen? In Einzelfragen kann ja ein möglicher Interessent einen neuen Thread öffnen?
-
Nachdem die Frage gestellt wurde, was ich eigentlich will/erwarte möchte ich zuj Abschluss doch nochmal auf die Eingangs gestelle Frage
Bug in (4.5.5) Proportionale Notation?
zurückkommen. Damit wird ja nach dem Namen und nach er Beschreibung der Notenwert mit dem eingenommenen Platz in der Notenzeile erreicht. Oder vielleicht doch nicht? Das wäre dann vielleicht ein Bug?
Als ich den Thread startete habe ich solche Beispiele bereits angeführt und dann vielerlei Hilfen und Vorschläge erhalten, die mich dann zuletzt befähigten mein Problem zu lösen. Damit sehe ich aber die Frage nach einem möglichen Bug noch nicht beantwortet.
Hier erneut ein Beispiel mit
proportionalNotationDuration = #(ly:make-moment 1 8 ),
also 1/8 als Basis dazu:
\version "2.16.2"
\layout {
\context {
\Score
%\override NonMusicalPaperColumn #'line-break-permission = #f
proportionalNotationDuration = #(ly:make-moment 1 8 )
%von https://liarchiv.joonet.de/index.php?topic=1462.0
%\override SpacingSpanner #'uniform-stretching = ##t
%\override SpacingSpanner #'strict-note-spacing = ##t
}
}
Noteneins = {
\relative c''{
\key a \major
\time 2/4
\tempo "2/4 4 Takte mit je 4 Achtel"
cis8 [e] cis [(b)] |
cis8 [e] d [(b)] |
cis8 [e] cis [b] |
cis8 [e] d [b] |
}
}
Notenzwei = {
\relative c'{
\key a \major
\time 2/4
\tempo "2/4 Beispiel -Triples (Triolen) 4 Takte"
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} |
\times 2/3 {d [b b]} \times 2/3 {e [b g]} |
\times 2/3 {a [b cis]} \times 2/3 {e [cis a]}|
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e [cis a]} |
}
}
Notenzweizwei = {
\relative c'{
\key a \major
\time 4/4
\tempo "4/4 Beispiel -Triples (Triolen) 4 Takte"
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e8 [cis a]}
\times 2/3 {d8 [b b]} \times 2/3 {e8 [b g]} |
\times 2/3 {a8 [b cis]} \times 2/3 {e8 [cis a]}
\times 2/3 {cis'8 [(b) cis]} \times 2/3 {e8 [cis a]} |
}
}
Notendrei = {
\relative c''{
\key a \major
\time 2/4
\tempo "2/4 4 Takte mt punktierten Noten"
a8. [cis16 a8 e] |
gis8. [b16 e8 e8]
cis8 [e] a,4 |
cis8 [e] a,4 |
}
}
Notenvier = {
\relative c''{
\key a \major
%\time 2/4
\tempo "4/4 zwei Takte"
d8 [e] d4
d8 [e] d4 |
d8 [e] d4
d8 [e] b4 |
}
}
\score {
<<
\new Staff {
\Noteneins
}
>>
}
\score {
<<
\new Staff {
\Notendrei
}
>>
}
\score {
<<
\new Staff {
\Notenzwei
}
>>
}
\score {
<<
\new Staff {
\Notenzweizwei
}
>>
}
% 4. Zeile
\score {
<<
\new Staff {
\Notenvier
}
>>
}
Compiliert man dieses Beispiel erhält man einen "Flattersatz", obwohl doch jede Zeile gleiche Notenwertsumme enthält udn keine "Extras" im Spiel sind! Das widerspricht doch absolut dem Versprechen von "proportionalNotationDuration"? Ist das ein Bug?
Setzt man die Basis auf 1/16, dann funktioniert das für die ersten Drei Zeilen, aber nur deshalb, weil die Enden auf das Zeilenende "auflaufen" und nicht etwa wegen "proportionalNotationDuration"! (Das ist auch genau der Trick wie ich meine gleich langen Zeilen erreichen kann! Es ist also eigentlich keine Lösung sondern ein "workaround" um den proportionalNotationDuration-Bug.
Grüße
bblochl
-
Ein Nachtrag:
Die Problematik um die sich dieser Thread dreht, ist im Handbuch Kapitel 4.5.1 beschrieben. (Steht doch Alles im Handbuch, man muss es nur finden!)
Wenn man sich das Kapitel durchliest wird klar, dass es zwar Möglichkeiten gibt, die Notenabstände zu vergrößern (padding), aber keine Möglichkeit die Abstände absolut zu setzen (also per eingegebenen Wert). Der Parameter von proportionalNotation ist also keine Konstante, sondern unterliegt auch dem in dem Kapitel beschreibenen Optimierungsmechanismus. Irgendewelche konstanten Werte wären aber erforderlich, um meinen Wunsch nach gleicher Zeilenlänge zu erfüllen. Das erklärt auch das seltsame Ergebnis, dass sich das Aussehen bei fortschreitender Verarbeitung/Erweiterung/Ergänzung ändert, sofern sich die Häufigkeit der Notenwerte ändert! Un das erklärt auch die Nichtlinearität von proportionalNotationDuration.
Keine Bugs sondern optimierende Absicht!
Gleiche Abstände und konstante Zeit für einen Notenwert sind einfach in lilypond nicht vorgesehen, weil eben die Optimierung des Aussehens im Vordergrund steht. Ausdrücklich steht unten im Dokument:
Es gibt derzeit keine Möglichkeit, den Platz zu verringern.
So sind konstante Längen einer Zeile nur durch den Trick zu erreichen, den ich gefunden habe (siehe oben).
Damit ist die Frage Bug oder Nicht-Bug klar mit Nicht-Bug zu beantworten.
Ich bin aber überzeugt davon, dass ein lilypond-Meister durch gekonnte eigene Kontrolle der Werte shortest-duration-space, spacing-increment, common-shortest-duration und base-shortest-duration im SpacingSpanner-Objekt das ohne Trick hinkriegen könnte.
Grüße BB
PS: Nachdem dasThema gewissermaßen am Ende angelangt ist, schlage schlage nochmal vor, den Thread zu schließen.
-
PS: Nachdem dasThema gewissermaßen am Ende angelangt ist, schlage schlage nochmal vor, den Thread zu schließen.
:) und weiterhin viel spass mit LilyPond! - Eluze