Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: kilgore am Mittwoch, 20. April 2011, 13:09
-
Liebe Lilys!
Ich setzte ein Stück mit viele Wiederholungsstriche. Es werden viele Take wiederholt, zwischendurch gibts aber Strecken die nicht wiederholt werden. So wird es dann oft verwirrend anzusehen. Wenn ich sowas spiele dann male ich mir immer extra "Klammern" ein, damit mir klar ist wo wiederholt wird und wo nicht.
Ich habe mit hilfe der Zeichentabelle etwas als Beispiel gemacht. Gibts bei Lilypond eine Automatische funktion dafür? Meine Lösung ist halt nur für einzelne Stellen praktisch...bei Zeilenumbruch zB gehts nicht so gut.
Danke!
kil
\version "2.12.3"
\relative c' {
c1
\bar "|:" c1 d1
\mark \markup
\with-dimensions #'( 0 . 0 ) #'( 0 . 0 )
\center-align
\column {
\line { \fontsize #4 \lower #.75 \rotate #90 "❰" }
\line { \fontsize #4 \lower #5.25 \rotate #-90 "❰" }
}
\bar ":|:"
e1 f1
\bar ":|"
c4 c c c
\bar "|:"
c1
\bar ":|"
}
-
Hallo Kil,
da gabs doch schonmal ne Frage in diesem Thread (https://liarchiv.joonet.de/index.php?topic=542.0), aber keiner wollte es brauchen …
Gibts bei Lilypond eine Automatische funktion dafür?
Nein, wir müssen wieder selbst ran:
\version "2.12.3"
#(set-global-staff-size 20)
startRepeatBracketMarkupUp = \markup {
\musicglyph #"brackettips.up"
}
startRepeatBracketMarkupDown = \markup {
\musicglyph #"brackettips.down"
}
stopRepeatBracketMarkupUp = \markup {
\hspace #-1.9
\rotate #180
\musicglyph #"brackettips.down"
}
stopRepeatBracketMarkupDown = \markup {
\hspace #-1.9
\rotate #180
\musicglyph #"brackettips.up"
}
combinedRepeatBracketMarkupUp = \markup {
\hspace #-2.19
\concat {
\rotate #180
\musicglyph #"brackettips.down"
\translate #'(0.29 . -1.145)
\musicglyph #"brackettips.up"
}
}
combinedRepeatBracketMarkupDown = \markup {
\hspace #-2.19
\concat {
\rotate #180
\musicglyph #"brackettips.up"
\translate #'(0.29 . 1.145)
\musicglyph #"brackettips.down"
}
}
startRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob startRepeatBracketMarkupUp)
0 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob startRepeatBracketMarkupDown)
0 0)))
}
stopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob stopRepeatBracketMarkupUp)
0 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob stopRepeatBracketMarkupDown)
0 0)))
}
combinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob combinedRepeatBracketMarkupUp)
0 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob combinedRepeatBracketMarkupDown)
0 0)))
}
\relative c' {
\grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|"
s4
}
Leider liegen die Nachteile schon auf der Hand: die Abstände sind auf die Standardgröße abgestimmt. Wählt man eine andere staff-size, muss man nachbessern :( Wenn es also jemand schaffte, die bracket tips für stopRepeatBracket rechtsbündig und für combinedRepeatBracket zentriert auszurichten, wäre das ganz grandios ::)
Grüße, Robert
-
Das sieht aber Klasse aus Robert!
Wie immer würde ich gerne bei den Definitionen helfen, bin aber zu dumm dafür... Der Stil der Klammern erinnert ans Real-book und ist damit nach meiner Meinung völlig in Ordnung.
Gruß
-
Das sieht aber Klasse aus Robert!
Aber wirklich! genau so was wollte ich sehen! Ich bin neugierig wie das bei Zeilenumbruch geht....ich experimentiere und berichte hier wieder!
-
ok ich konnte nicht warten :)
Bei Zeilenumbruch werden die Klammern am Ende und am Anfang gedruckt. Es ist trotzdem schöner als meine Variante. Kriegt man es aber weg? Vielleicht brauchen wir ein zusätzliches markup für Zeilenumbrüche... Leider ist mein Kenntniss mit Scheme auch schon längst nicht weit genug....
-
@RobUr
Ich habe Deine Definitionen mal bearbeitet.
\version "2.12.3"
#(set-global-staff-size 20)
\layout {
indent = 0
}
startRepeatBracketMarkupUp = \markup {
\musicglyph #"brackettips.up"
}
startRepeatBracketMarkupDown = \markup {
\musicglyph #"brackettips.down"
}
stopRepeatBracketMarkupUp = \markup {
\translate #(cons 0.62 0)
\right-align {
\rotate #180
\musicglyph #"brackettips.down"
}
}
stopRepeatBracketMarkupDown = \markup {
\translate #(cons 0.62 0)
\right-align {
\rotate #180
\musicglyph #"brackettips.up"
}
}
combinedRepeatBracketMarkupUp = \markup {
\translate #(cons 0.45 0)
\center-align {
\concat\vcenter{
\rotate #180
\musicglyph #"brackettips.down"
\hspace #'0.24
\musicglyph #"brackettips.up"
}
}
}
combinedRepeatBracketMarkupDown = \markup {
\translate #(cons 0.45 0)
\center-align {
\concat\vcenter{
\rotate #180
\musicglyph #"brackettips.up"
\hspace #'0.24
\musicglyph #"brackettips.down"
}
}
}
startRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob startRepeatBracketMarkupUp)
-0.42 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob startRepeatBracketMarkupDown)
-0.42 0)))
}
stopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob stopRepeatBracketMarkupUp)
-0.42 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob stopRepeatBracketMarkupDown)
-0.42 0)
))
}
combinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob combinedRepeatBracketMarkupUp)
-0.42 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob combinedRepeatBracketMarkupDown)
-0.42 0)))
}
%----------------------------------------- Test -----------------------------------------------
music = {
\grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|"
}
\score {
\new Staff \with { fontSize = #10 \override StaffSymbol #'staff-space = #(magstep 10) }
{
\relative c' {
\music
}
}
\header {
piece = \markup {
\column {
"Verschiedene Größen mittels fontSize = <size> \override StaffSymbol #'staff-space = #(magstep <size>)"
"aber immer mit: #(set-global-staff-size 20)"
}
}
}
}
\score {
\new Staff \with { fontSize = #5 \override StaffSymbol #'staff-space = #(magstep 5) }
{
\relative c' {
\music
}
}
}
\score {
\new Staff \with { fontSize = #0 \override StaffSymbol #'staff-space = #(magstep 0) }
{
\relative c' {
\music
}
}
}
muSic = {
\relative c' {
\grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|" s1*0\break
\grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|" s1*0\break
}
}
\score {
\new Staff {
\muSic
}
\header {
piece = "Zeilenumbruch"
}
}
\score {
\new StaffGroup
<<
\new Staff
\muSic
\new Staff
\muSic
>>
\header {
piece = "Partitur"
}
}
Das Ganze ist noch nicht optimal, und für stopRepeatBracket ist es besser gelungen als für combinedRepeatBracket und bei Änderungen der Staff-Size gibts immer noch Verschiebungen, aber sie sind nicht mehr so groß. Die Anzahl der "Einstellschrauben" habe ich reduziert.
@kilgore
Bei Zeilenumbruch werden die Klammern am Ende und am Anfang gedruckt.
Hier weiß ich nicht was Du genau meinst. Ich habe den Zeilenumbruch mit s1*0\break \grace s4 geregelt und finde das Ergebnis soweit ok. Das Ergebnis für Partituren ist naja ... (-> Anhang: barLine.png)
Gruß,
Harm
P.S. Um mir die Arbeit zu erleichtern habe ich die verschiedenen Elemente auch mal eingefärbt. Bild und Code (falls es jemanden interessiert) auch im Anhang (-> http://lsr.dsi.unimi.it/LSR/Item?id=726 (http://lsr.dsi.unimi.it/LSR/Item?id=726) ).
-
Irgendwie liege ich mir der Größe meiner PNG's immer daneben. Ich hoffe ihr könnt trotzdem was damit anfangen.
Gruß,
Harm
-
Ich habe das Ganze noch mal überarbeitet:
\version "2.12.3"
\layout { indent = 0 }
% comper's Definition aus: https://liarchiv.joonet.de/index.php?topic=578.msg3212#msg3212
% hier leicht verändert:
#(define-markup-command (mmX layout props amount) (number?)
(let ((st-sp (ly:output-def-lookup layout 'staff-space)))
(ly:make-stencil "" (cons 0 (- amount st-sp )) '(0 . 0))))
StartRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup (#:musicglyph "brackettips.up")))
-0.42 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup (#:musicglyph "brackettips.down")))
-0.42 0)))
}
StopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:line
(#:mmX 0.2
(#:right-align
(#:rotate 180(#:musicglyph "brackettips.down"))))))
-0.42 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:line
(#:mmX 0.2
(#:right-align
(#:rotate 180(#:musicglyph "brackettips.up"))))))
-0.42 0)))
}
CombinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:line
(#:translate (cons 0.45 0)
(#:center-align
(#:concat
(#:vcenter
(#:rotate 180 (#:musicglyph "brackettips.down"))
(#:mmX 2
(#:hspace 0))
#:vcenter
(#:musicglyph "brackettips.up")))))))
-0.42 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:line
(#:translate (cons 0.45 0)
(#:center-align
(#:concat
(#:vcenter
(#:rotate 180 (#:musicglyph "brackettips.up"))
;#:vcenter
(#:mmX 2
(#:hspace 0))
#:vcenter
(#:musicglyph "brackettips.down")))))))
-0.42 0)))
}
%------------------------- Test ------------------------------------------------
% #(set-global-staff-size 10)
% #(set-global-staff-size 15)
#(set-global-staff-size 20)
% #(set-global-staff-size 25)
% #(set-global-staff-size 30)
music = {
\grace s4
\StartRepeatBracket \bar "|:"
c1
\CombinedRepeatBracket \bar ":|:"
e
\StopRepeatBracket \bar ":|" s1*0
}
\relative c' { \music }
\score {
\new Staff %\with { fontSize = #5 \override StaffSymbol #'staff-space = #(magstep 5) }
{
\relative c' {
\music
}
}
\header {
piece = \markup {
\column { \null\null\null\null\null\null\null
"Die Größenänderung mit der Konstruktion"
"\with { fontSize = #5 \override StaffSymbol #'staff-space = #(magstep 5)}"
"funktioniert nicht ohne an den Werten zu drehen!!"
"Im layout-Block geht's auch nicht besonders!"
}
}
}
\layout{
% #(layout-set-staff-size 25)
}
}Wenn man lilypond --png -dresolution=1000 <file.ly> eingibt sieht man allerdings, daß die Größenveränderungen noch immer nicht völlig sauber erfolgen. Aber im Bereich von #(set-global-staff-size 10) bis hin zu #(set-global-staff-size 30) finde ich es hinreichend.
Andere Methoden die staff-size zu verändern funktionieren aber nicht ohne nachbessern oder nur schlecht. Vielleicht weiß ja jemand wie man die comper-Definition aus https://liarchiv.joonet.de/index.php?topic=578.msg3212#msg3212 (https://liarchiv.joonet.de/index.php?topic=578.msg3212#msg3212), die ich modifiziert habe, noch besser anpassen kann.
Gruß,
Harm
-
Hallo alle,
ich hab die Lösung ;D
Das Geheimnis liegt in line-thickness!!! Meine anfänglichen Versuche arbeiten mit staff-spaces, wo doch Dicke und Kerning der Taktstriche in Vielfachen von line-thickness angegeben werden. Der gewünschte „Vorschub“befehl muss also die aktuelle line-thickness liefern:
#(define-markup-command (lthskip layout props amount) (number?)
;; lthskip = "line-thickness skip"
(let ((l-th (ly:output-def-lookup layout 'line-thickness)))
(ly:make-stencil "" (cons 0 (* amount l-th)) '(0 . 0) )))
Nun ermitteln wir Dicke/Dünne und Kerning aus der IR 3.1.11 BarLine (http://lilypond.org/doc/v2.12/Documentation/user/lilypond-internals/BarLine#BarLine) und schieben uns die Glyphen zurecht:
startRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.up"))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.down"))
-0.1 0)))
\bar "|:"
}
stopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6
#:right-align
#:rotate 180 #:musicglyph "brackettips.down" )))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6
#:right-align
#:rotate 180 #:musicglyph "brackettips.up" )))
-0.1 0)))
\bar ":|"
}
combinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.down"
#:lthskip 3
#:vcenter
#:musicglyph "brackettips.up"))))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.up"
#:lthskip 3
#:vcenter
#:musicglyph "brackettips.down"))))
-0.1 0)))
\bar ":|:"
}
Gleichzeitig bauen wir noch die \bar-Befehle mit ein, um den eigentlichen Musik-Code zu entschlacken.
Zum Glücklichsein allein fehlt „nur“ noch eine Routine, die bei einem Zeilenumbruch combinedRepeatBracket in stopRepeatBracket am Zeilenende und startRepeatBracket am nächsten Zeilenanfang auftrennt.
Übrigens finden sich in scm/output-lib.scm bereits die Bezeichner brace und bracket. Sollten die Entwickler diese Styles etwa schon geplant, aber noch nicht realisiert haben?
Viele Ostergrüße, Robert
EDIT:
Fehlt natürlich noch die Musik:
music = {
\grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
}
%#(set-global-staff-size 11.22) %% smallest recommended staff size
#(set-global-staff-size 20) %% default staff size
%#(set-global-staff-size 25.2) %% largest recommended staff size
\paper {
ragged-right = ##t
}
\score {
\relative c' { \music }
\layout {
indent = 0
}
}
… und der Hinweis, dass eine Änderung der thick-thickness, z.B. \override Staff.BarLine #'thick-thickness = #8 unser schönes Konstrukt zerstört.
-
Hallo Robert,
die line-thickness ist wirklich der Punkt, auf den ich nicht kam. Da hätte ich mal genauer lesen sollen !! Das Ganze ist jetzt auch mit \new Staff \with { fontSize = #-5 \override StaffSymbol #'staff-space = #(magstep -5) } sowie mit \layout { #(layout-set-staff-size 35) } zugänglich. Zumindest nach meinen bisherigen Tests.
Mir ist allerdings aufgefallen, daß die Werte noch nicht ganz optimal sind (siehe Bild, erstellt mit #(set-global-staff-size 25.2) ).
Deshalb habe ich noch ein wenig an den Einstellungen rumgeschraubt.
Für den Zeilenumbruch ist mir außer obigem Work-around noch nichts eingefallen.
#(define-markup-command (lthskip layout props amount) (number?)
;; lthskip = "line-thickness skip"
(let ((l-th (ly:output-def-lookup layout 'line-thickness)))
(ly:make-stencil "" (cons 0 (* amount l-th)) '(0 . 0) )))
startRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.up"))
-0.15 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.down"))
-0.15 0)))
\bar "|:"
}
stopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6.1
#:right-align
#:rotate 180 #:musicglyph "brackettips.down" )))
-0.15 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6.1
#:right-align
#:rotate 180 #:musicglyph "brackettips.up" )))
-0.15 0)))
\bar ":|"
}
combinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3.05
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.down"
#:lthskip 2.87
#:vcenter
#:musicglyph "brackettips.up"))))
-0.15 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3.05
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.up"
#:lthskip 2.87
#:vcenter
#:musicglyph "brackettips.down"))))
-0.15 0)))
\bar ":|:"
}
Dann noch schöne Restostern,
Harm
EDIT
Nach erneuter Prüfung: RobUr's obige Werte sind doch viel besser !!
-
Hallo Harm,
an den Werten würde ich nichts verändern, sie entsprechen genau den Standardabständen. Ich beziehe mich dabei immer auf die Vektordaten und keine gerasterten PNGs/JPGs. Die Bildschirmdarstellung vieler PDF-Viewer ist nicht immer ganz sauber, aber im Makrobereich (6400% Vergrößerung :) ) sieht man deutlich, dass die Werte korrekt sind.
Viele Grüße, Robert
-
Hallo,
zum Zeilenumbruch:
- ich habe hier (http://lists.gnu.org/archive/html/lilypond-user/2008-12/msg00307.html) eine Zeilenumbruch-Definition für BarLines gefunden, die tatsächlich funktioniert und auch manipulierbar ist. (Es gibt noch andere aber ich habe sie nicht ans laufen bekommen, sind vielleicht zu alt oder ich zu blöd.)
Man müßte jetzt \bar "startRepeatBracket" etc. analog zu der bar-line.cc-Datei (http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=blob;f=lily/bar-line.cc) definieren und in die Zeilenumbruch-Definition in geeigneter Form einfügen. Ich weiß aber nicht wie das geht bzw. ob es überhaupt möglich ist. - Ein anderer Weg funktioniert möglicherweise analog zu NR 6.8 (http://lilypond.org/doc/v2.12/Documentation/user/lilypond/Difficult-tweaks#Difficult-tweaks). Aber da scheine ich auch zu blöd für zu sein.
Gruß,
Harm
-
Hallo Robert,
meine Prüfmethode war:
- extreme Werte für die staff-size einsetzen. hier: #(set-global-staff-size 25.2)
- PNG erzeugen mit resolution=1500
- Vergrößern bis zu 2000%
Ich wäre Dir sehr dankbar, wenn Du mir detailiert schilderst, wie Du sowas prüfst.
Die Standardabständen sind ja nachlesbar, aber ich glaub' ja nicht alles was so geschrieben steht. ;)
Gruß,
Harm
-
Hallo Harm,
meine Prüfmethode:
- PDF erzeugen (komplett oder Ausschnitte per clip-regions)
- Vergrößern bis zu 6400% (Maximum im Adobe Reader)
Du kannst gern den Clip aus meinem letzten Beitrag solang vergrößern, bis dein PDF-Viewer nicht mehr kann ;)
Grüße, Robert
-
zum Zeilenumbruch:
- ich habe hier (http://lists.gnu.org/archive/html/lilypond-user/2008-12/msg00307.html) eine Zeilenumbruch-Definition für BarLines gefunden, die tatsächlich funktioniert und auch manipulierbar ist. (Es gibt noch andere aber ich habe sie nicht ans laufen bekommen, sind vielleicht zu alt oder ich zu blöd.)
Man müßte jetzt \bar "startRepeatBracket" etc. analog zu der bar-line.cc-Datei (http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=blob;f=lily/bar-line.cc) definieren und in die Zeilenumbruch-Definition in geeigneter Form einfügen. Ich weiß aber nicht wie das geht bzw. ob es überhaupt möglich ist. - Ein anderer Weg funktioniert möglicherweise analog zu NR 6.8 (http://lilypond.org/doc/v2.12/Documentation/user/lilypond/Difficult-tweaks#Difficult-tweaks). Aber da scheine ich auch zu blöd für zu sein.
Diese Baustellen hatte ich auch schon gefunden. Es gibt aber wesentliche Probleme:
- Die Shortcuts für BarLines sind hardcoded, und ich fand bisher keine Lösung, neue „BarLine-Shortcuts“ mit den gängigen Benutzerschnittstellen zu definieren.
- Eine Ergänzung in den Quelldateien bedeutet, Lily komplett neu zu kompilieren :-\ Man müsste also tatsächlich die Entwickler bitten, unsere schicken neuen „bracketRepeats“ für alle verfügbar zu integrieren. Ich hatte ja bereits darauf hingewiesen, dass brace/bracket-Varianten in scm/output-lib.scm vor sich hin dümpeln.
- Der Ansatz aus NR 6.8 scheint leider nicht geeignet für BarLines, da das Spanner-Interface angesprochen wird. :(
Wenn diese Variante von Wiederholungsstrichen also unbedingt benötigt wird, müssen wir uns vorerst mit manuellen Umbrüchen und BarLines behelfen.
Grüße, Robert
-
Hey ihr beiden!
Also ich bin begeistert davon was ihr gebaut habt! Sieht richtig klasse aus. Meine einzige Änderung für meine Zwecke, war die Brackets ein bisschen zu vergrössern ( #:fontsize 3 ). Die kleineren sehen tatsächlich ganz gut aus, aber ich hatte immer den Wünsch die nochmal mit dem Stift grösser zu machen. Klar ist klar :)
Zu den Zeilenumbrüchen, mach ich den Trick mit \grace s16 .... mir ist sonst nichts besseres eingefallen.
Gruß
kil
-
Hallo zusammen,
das mit dem Zeilenumbruch ließ mir keine Ruhe und so habe ich eine kleine Funktion ersonnen, die das etwas besser zu handeln weiß:
combinedBreak =
#(define-music-function (parser location ) ()
#{
\stopRepeatBracket
\break
\grace s4
\startRepeatBracket
#})
%------------------------ Test -------------------------------------------------
\relative c' {
\grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
c
\startRepeatBracket
d
\combinedBreak
e
\stopRepeatBracket
}
@Robert:
Ich bin Deiner Prüfmethode mal gefolgt (und habe den Adobe Reader extra runtergeladen):
Du hast völlig recht!!
Gruß,
Harm
-
und mit:
combinedBreak =
#(define-music-function (parser location ) ()
#{
\stopRepeatBracket
\break
\grace s4
\startRepeatBracket
\once \override Staff.BarLine #'extra-offset = #'( -2.3 . 0 )
#})
%------------------------ Test -------------------------------------------------
\relative c' {
\grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
c
\startRepeatBracket
d
\combinedBreak
e
\stopRepeatBracket
}
...so ein bisschen weniger auffällig, oder?
Gruß
kil
-
Hallo kil,
würd ich nicht machen!
Probier mal mit \key cis\major
Gruß,
Harm
-
ja stimmt, aber da ich meistens sachen ohne tonart schreibe ist es für mich egal. Noch doofer ist, dass der Strich dann viel zu weit links steht von dem ersten Ton in dem Takt.
komisch, dieses Rätsel!
-
[…] aber da ich meistens sachen ohne tonart schreibe […]
Aha! C-Dur/a-Moll ist also keine Tonart ;D Du meinst sicher ohne Vorzeichen … ;) Wir geben uns immer Mühe, dass ein Snippet universell eingesetzt werden kann. Deine Hinweise sind trotzdem wertvoll für andere, die das Aussehen an ihren persönlichen Geschmack anpassen möchten.
@harm6
Ja: ein Makro à la \combinedBreak ist wohl die unaufwändigste Lösung momentan. Angesichts der Vielfalt anderer Wiederholungsstrichtypen wäre es eigentlich wünschenswert, eine Art Makro à la [\once] \override BarLine #'style = #'bracket oder auch \bracket \bar ":|.|:" zur Verfügung zu haben, das die Zeilenumbruchsregeln beibehält. Aber der ursprüngliche Wunsch war ja, nur ab und zu diese geschweiften Wiederholungen einsetzen zu wollen. Wenn ich aber an’s Real Book denke, gibt es sicherlich Bedarf an dieser Funktion nicht nur in unserer Community!
Viele Grüße, Robert
-
Hallo Allerseits,
ich hab' mal weiter rumgespielt mit den schicken neuen Brackets. Vor allem in Hinblick auf den Zeilenumbruch und die Zeilenumbruchsregeln:
- Tonartwechsel am Zeilenende klappt tadellos!
- Beim Taktwechsel gibts ein kleines Problem (bei meinem Macro). Wenn man davon absieht, daß es zu eng ist (hab' ich nicht korrigiert) erscheint die Taktangabe woanders. Ich finde es eigentlich ok so, aber was meint ihr? (-> barlineOne.png
Der Code dazu:
\relative c' {
\key cis\major
\grace s4 ^\markup { \fontsize #'2 BracketTips }
\startRepeatBracket
b'1
\key ces\major
\time 2/2
\combinedBreak
\mark\markup { \with-color #red \fontsize #'5 "!" }
e
\stopRepeatBracket
\bar "|."
}
\relative c' {
\key cis\major
\repeat volta 2 { b'1^\markup { \fontsize #'2 default } }
\key ces\major
\time 2/2
\break
\repeat volta 2 { \mark\markup { \with-color #red \fontsize #'5 "!" } e }
}
Ich habe auch dies probiert:
#(define my-bar-glyph-alist
'((":|:" . (":|" . "|:"))
(":|.|:" . (":|" . "|:"))
(":|.:" . (":|" . "|:"))
("||:" . ("||" . "|:"))
("dashed" . ("dashed" . '()))
("|" . ("|" . ()))
("||:" . ("||" . "|:"))
("|s" . (() . "|"))
; amended this entry
("|:" . ("||" . "|:"))
("|." . ("|." . ()))
;; hmm... should we end with a bar line here?
(".|" . ("|" . ".|"))
(":|" . (":|" . ()))
("||" . ("||" . ()))
(".|." . (".|." . ()))
("|.|" . ("|.|" . ()))
("" . ("" . ""))
(":" . (":" . ""))
("." . ("." . ()))
("empty" . (() . ()))
("brace" . (() . "brace"))
("bracket" . (() . "bracket"))
))
%{
#(define-public (my-bar-line::calc-break-visibility grob)
(let* ((glyph (ly:grob-property grob 'glyph))
(result (assoc glyph my-bar-glyph-alist)))
(if result
(vector (string? (cadr result)) #t (string? (cddr result)))
#(#t #t #t))))
%}
#(define (my-bar-line::calc-glyph-name grob)
(let* (
; inlined this from lily-library.scm, since it isn't public
(index-cell (lambda (cell dir)
(if (equal? dir 1)
(cdr cell)
(car cell))))
(glyph (ly:grob-property grob 'glyph))
(dir (ly:item-break-dir grob))
(result (assoc glyph my-bar-glyph-alist))
(glyph-name (if (= dir CENTER)
glyph
(if (and result (string? (index-cell (cdr result) dir)))
(index-cell (cdr result) -1)
#f)))
)
glyph-name))
%------------------------------ Test -------------------------------------------
\relative c' {
\grace s4
\startRepeatBracket
b'1
\stopRepeatBracket
\once \override Staff.BarLine #'glyph-name = #my-bar-line::calc-glyph-name
\bar ":|:"
\break
\mark\markup { \with-color #red \fontsize #'5 "?" }
e
\stopRepeatBracket
}-> barlineTwo.png
In der neuen Zeile erscheint die Bracket. Warum die BracketTips mitgenommen werden weiß ich nicht. Sie sind allerdings seitenverkehrt. Der Doppelpunkt war eigentlich auch auf der falschen Seite aber durch eine kleine Änderung gegenüber dem Original (http://lists.gnu.org/archive/html/lilypond-user/2008-12/msg00307.html) ist er auf die andere Seite gerutscht.
(index-cell (cdr result) -1)
Das weckt in mir die Hoffnung, daß es möglich ist die zweite Bracket gänzlich zu drehen, zu spiegeln oder ähnliches.
@kilgore
Noch doofer ist, dass der Strich dann viel zu weit links steht von dem ersten Ton in dem Takt.
komisch, dieses Rätsel!
Das ist eigentlich kein Wunder, denn (um ein Bild zu gebrauchen) Du hast eine Wand im Haus versetzt aber die Einrichtung gelassen wo sie war.
Gruß,
Harm
-
Aha! C-Dur/a-Moll ist also keine Tonart Grinsend Du meinst sicher ohne Vorzeichen …
nee ich meine tatsächlich ohne Tonart :) Freu mich aber, dass meine Frage eine so robuste Gespräch angefangen hat ;D
-
Hallo zusammen,
es ist mir gelungen die Bracket in der neuen Zeile zudrehen! ;D
Dazu habe ich die Definition für shift-right-at-line-begin aus /scm/output-lib.scm verändert. Eine Definition für my-bar-glyph-alist, die sich in ihrem einzigen Inhaltspunkt noch nicht mal vom Original unterscheidet, war nur nötig um der Definition my-bar-line::calc-glyph-name grob einen Bezugspunkt zu liefern.
Jetzt gelingt es auch ein neues \Break zu bestimmen mit einem üblichen \bar ":|:" und \break als "Auslöser".
Nun kann man alles schöner und einfacher gestalten. Es gibt auch keine Verschiebung nach rechts mehr und beim Taktwechsel erscheint die Taktangabe genauso wie in der default-Einstellung.
Beim Schreiben würde ich ganz normal die Noten mit den neuen repeatBrackets setzen und nur dort wo \combinedRepeatBracket an ein Zeilenende kommt durch \stopRepeatBracket\Break ersetzen, alternativ #'line-break-permission = ##f und alles per Hand regeln.
@Robert
Das ist zwar ein übler Hack und noch weit entfernt von einem "Makro à la [\once] \override BarLine #'style = #'bracket oder auch \bracket \bar ":|.|:"", aber im Moment weiß ich nichts besseres. Und es funktioniert!
\version "2.12.3"
\layout {
indent = 10
short-indent = 10
}
\paper {
ragged-right =##f
}
#(define-markup-command (lthskip layout props amount) (number?)
;; lthskip = "line-thickness skip"
(let ((l-th (ly:output-def-lookup layout 'line-thickness)))
(ly:make-stencil "" (cons 0 (* amount l-th)) '(0 . 0) )))
#(define my-bar-glyph-alist
'((":|:" . (":|" . "|:"))))
#(define (my-bar-line::calc-glyph-name grob)
(let* (
; inlined this from lily-library.scm, since it isn't public
(index-cell (lambda (cell dir)
(if (equal? dir 1)
(cdr cell)
(car cell))))
(glyph (ly:grob-property grob 'glyph))
(dir (ly:item-break-dir grob))
(result (assoc glyph my-bar-glyph-alist))
(glyph-name (if (= dir CENTER)
glyph
(if (and result (string? (index-cell (cdr result) dir)))
(index-cell (cdr result) -1)
#f)))
)
glyph-name))
#(define (rotate-at-line-begin g)
"Rotate an item, but only at the start of the line."
(if (and (ly:item? g)
(equal? (ly:item-break-dir g) RIGHT))
(ly:grob-set-property! g 'rotation (list 180 0 0))
))
startRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.up"))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.down"))
-0.1 0)))
\bar "|:"
}
stopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6
#:right-align
#:rotate 180
#:musicglyph "brackettips.down" )))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6
#:right-align
#:rotate 180
#:musicglyph "brackettips.up" )))
-0.1 0)))
\bar ":|"
}
combinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.down"
#:lthskip 3
#:vcenter
#:musicglyph "brackettips.up"))))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.up"
#:lthskip 3
#:vcenter
#:musicglyph "brackettips.down"))))
-0.1 0)))
\bar ":|:"
}
Break = {
\once\override Staff.BarLine #'glyph-name = #my-bar-line::calc-glyph-name
\once\override Staff.BarLine #'after-line-breaking = #rotate-at-line-begin
\bar ":|:"
\break
}
%------------------------- Test ------------------------------------------------
%#(set-global-staff-size 11.22) %% smallest recommended staff size
#(set-global-staff-size 20) %% default staff size
% #(set-global-staff-size 35.2) %% largest recommended staff size
\score {
\relative c' {
\key cis\major
\mark\markup { \with-color #red \fontsize #'3 "Beispiel I" }
\grace s4
\startRepeatBracket
b'1
\stopRepeatBracket
\Break
\time 2/2
e
\stopRepeatBracket
\bar "|."
}
\layout {
ragged-right = ##t
}
}
\relative c' {
%\key cis\major
\mark\markup { \with-color #red \fontsize #'3 "Beispiel II" }
\grace s4
\startRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
des1 \stopRepeatBracket \Break
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
des1 \stopRepeatBracket \Break
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \stopRepeatBracket
}
Grüße,
Harm
-
WOWOWOWOW!!!
Das ist ja echt abgefahren ;D Herzlichen Dank! Das Snippet ist wiedermal LSR-verdächtig ;)
Und es funktioniert auch mit \repeat volta x { ... }
Grüße, Robert
-
Hallo zusammen,
ich hab' noch ein bißchen weitergetestet:
\override Staff.BarLine #'thick-thickness = #8 (hat Robert schon erwähnt)
\override Staff.BarLine #'kern = #8
\override Staff.BarLine #'thin-kern = #8
zerstören das Konstrukt!
\override Staff.BarLine #'bar-size = #8
\override Staff.BarLine #'hair-thickness = #8
funktionieren!
@Robert
Ich finde auch, daß das etwas fürs LSR ist (sieht man ja schon an der Zahl der Aufrufe dieser Seite).
Allerdings sind zahlreiche Kommentare nötig:
- Ein Hinweis, daß die ganze Zeilenumbruchsfummelei nur nötig ist, solange die Brackets noch nicht in die Quelldateien integriert sind!
- Eine Art Gebrauchsanweisung wäre sinnvoll!
- Ich würde auch die Quellen angeben
https://liarchiv.joonet.de/index.php?topic=578.msg3212#msg3212 für define-markup-command lthskip
http://lists.gnu.org/archive/html/lilypond-user/2008-12/msg00307.html für define my-bar-glyph-alist und define (my-bar-line::calc-glyph-name grob)
/scm/output-lib.scm für define rotate-at-line-begin
- Das ein oder andere hab' ich bestimmt noch vergessen!
Da die meisten Ideen von Dir stammen und mein Englisch wirklich miserabel ist, schlage ich vor, daß Du das machst. ;) Ich helf' natürlich gerne.
Wenn Du magst, kannst Du mich ja als Co-Autor benennen.
Gruß,
Harm
-
Ihr seid meine Helden!! Wirklich super geil!!
;D ;D ;D