Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: iugin am Dienstag, 28. Mai 2013, 09:57
-
Hallo miteinander,
ich komme wieder (sorry, ich habe alle offene Fragen gesammelt, und jetzt melde ich mich immer wieder) :)
Wenn ich diesen Code kompiliere
\version "2.16.0"
\language "deutsch"
One = \relative e {
<e a c>4 <f h d> <g c e> <a d f>
}
\score {
\new Staff \with {
fontSize = #-3
\override StaffSymbol #'staff-space = #(magstep -3)
\override StaffSymbol #'thickness = #(magstep -3)
} { \One }
}
Two = \relative e {
<a c>4 <h d> <c e> <d f>
}
\score {
\new Staff \with {
fontSize = #-3
\override StaffSymbol #'staff-space = #(magstep -3)
\override StaffSymbol #'thickness = #(magstep -3)
} { \Two }
}
kommt das, was ihr im Attachement sehen könnt.
Ich finde komisch, dass, obwohl alle Akkorde gleich aufgebaut sind, nur das d verschoben ist. Und dass es nur bei drei Stimmen passiert. In der unteren Zeile, brauchen die zwei Noten genau soviel Platz wie die obere zwei der 3-stimmmigen Akkord, es gibt aber keine Verschiebung.
Ausserdem, passiert es nur wenn ich überall den Wert -3 eingebe. Mit anderen Werten ist ok (wobei die Verhältnissen immer gleich sein sollten)
Ist das normal?
Ich wünsche euch einen schönen Tag
Liebe Grüsse
Eugenio
-
Ich finde komisch, dass, obwohl alle Akkorde gleich aufgebaut sind, nur das d verschoben ist. Und dass es nur bei drei Stimmen passiert. In der unteren Zeile, brauchen die zwei Noten genau soviel Platz wie die obere zwei der 3-stimmmigen Akkord, es gibt aber keine Verschiebung.
Ausserdem, passiert es nur wenn ich überall den Wert -3 eingebe. Mit anderen Werten ist ok (wobei die Verhältnissen immer gleich sein sollten)
Ist das normal?
Un'altra stranezza...
Ciao Eugenio,
Du scheinst ein Händchen für pathologische Fälle zu haben ;)
Da scheint es sich tatsächlich um ein numerisches Problem zu handeln:
Die Funktion magstep rechnet (wenn s der übergebene Parameter ist) den Wert von exp(s/6*ln2) aus. Sie liefert also einen exponentiellen Verlauf und bei s = 6 erhält man die doppelte Größe, bei s = -6 den die halbe Größe.
Bei manchen "glatten" Vergrößerungsstufen s tritt unter unglücklichen Umständen der (in der Tat ebenso seltsame wie unbeabsichtigte) Effekt auf, keinesfalls nur bei -3, sondern unter anderem bei folgenden Werten (Liste nicht vollständig):
-16, -15, -14, -9, -3, 3, 4, 9, 14, 15, 16, 21 und anderen.
Im vorliegenden Fall von #(magstep -3) wäre das Ergebnis #0.70710678118654752440084436210485..., und wenn man diese Zahl mit entsprechender Genauigkeit direkt eingibt, funktioniert es auch nicht (aha).
Abhilfe sehe ich nur, wenn man minimal vom "glatten" Vergrößerungswert abweicht:
Minimalbeispiel:
\version "2.16.0"
{
% magstep-Funktion: exp(s/6*ln2)
% Problematische Werte: -16, -15, -14, -9, -3, 3, 4, 9, 14, 15
\override Score.StaffSymbol #'staff-space = #(magstep -3)
<g b d'>
}
{
% Minimale Abweichung von -3 funktioniert:
\override Score.StaffSymbol #'staff-space = #(magstep -3.0000000000001)
<g b d'>
}
{
% Berechneten, aber "zu genauen" Wert von magstep -3 "hartcodiert" zuweisen funktioniert NICHT:
\override Score.StaffSymbol #'staff-space = #0.70710678118654752440084436210485
<g b d'>
}
{
% Berechneten und gerundeten Wert von magstep -3 "hartcodiert" zuweisen funktioniert:
\override Score.StaffSymbol #'staff-space = #0.707106781186548
<g b d'>
}
Seltsam ist es allemal, ich weiß auch keine Lösung, außer eben die minimale Abweichung vom glatten Wert.
Getestet mit Windows XP und Linux (Ubuntu), allerdings beides auf Intel-Architektur.
Gibt es das Problem bei Apple auch?
Viele Grüße
Torsten
-
Hallo Torsten,
ich kann für Mac OS X 10.4.11 „Tiger“ (Prozessor Intel Core 2 Duo) selbiges berichten.
Gruß, Robert
-
Hallo Torsten,
vielen Dank für Deine Analysen, ich habe mal einen bug-report abgesetzt.
Gruß,
Harm
-
Hallo Torsten,
ich brauche anscheinend einen Art Exorzismus oder so... Tatsächlich mit Frets, repeat percent und jetzt das, mache ich mir langsam Sorgen... :D
Ist aber gut so: schon wieder kann ich deine Lösung sehr gut brauchen (egal jetzt ob 3 oder 3.000000000001).
Und Kompliment für alles was du mit Lilypond kannst und für dein Italienisch (bis jetzt auch perfekt).
Liebe Grüsse
Eugenio