Autor Thema: Markup-Text/Fingering automatisch nebeneinander  (Gelesen 2463 mal)

ulmoeh

  • Member
Markup-Text/Fingering automatisch nebeneinander
« am: Samstag, 3. April 2010, 15:32 »
Hallo,

ich möchte Markup-Text oder Fingering Anweisungen gern automatisch nebeneinander statt übereinander platzieren lassen.
Für eine Note oder einen Akkord in einer Stimme ist das mit Aufwand über so etwas wie z.B. c^\markup { \finger "2 3" } möglich. Für mehrere Stimmen in einem Staff kann man das über Setzen der Eingenschaften self-alignment-X und extra-spacing-width zwar erreichen, aber dann hat man feste Verschiebungen nach links oder rechts über der Note. Diese können mal zu groß sein oder überflüssig, wenn gerade nur in einer Stimme eine Note vorkommt.

Vielen Dank für Ratschläge und beste Grüße,
Ulrich

trulli

  • Member
Re:Markup-Text/Fingering automatisch nebeneinander
« Antwort #1 am: Samstag, 3. April 2010, 17:52 »
Hallo Ulrich und herzlich willkommen hier,

so ganz verstehe ich dein Ansinnen nicht. Ein Fingersatz soll doch möglichst nahe an den Noten stehen und zusätzlicher Text würde ihn nach rechts oder links abdrängen.

Um welches Instrument geht es und was für Text soll neben den Fingersätzen stehen?

Grüße von Mat

ulmoeh

  • Member
Re:Markup-Text/Fingering automatisch nebeneinander
« Antwort #2 am: Samstag, 3. April 2010, 22:45 »
Hallo Mat,

vielen Dank für Dein Interesse. Es geht um ein diatonisches Akkordeon. Für die (in meinem Umfeld) dafür üblichen Tabulaturen habe ich noch keine wirkliche Lilypond-Entsprechung gefunden. Der Fingersatz steht in extra Zeilen unter dem System mit der Melodie. Dabei gibt es eine obere Zeile, wenn der Balg gedrückt ist und eine untere Zeile, wenn der Balg gezogen wird. Die beiden Zeilen sind durch einen langen Strich (wie einzelne Notenlinie) getrennt. Die Taktstriche (inklusive Ende und Anfang der Systeme) gehen bis unter die Fingersatz-Zeilen. Ich hänge mal ein entsprechendes Beispiel an (Beispiel1.pdf). Der Strich an den Nummern bedeutet, dass auf der Diskant-Seite die innere Knopf-Reihe zu nehmen ist. Ohne Strich ist die äußere zu nehmen. Bei dreireihigen Instrumenten können dementsprechende auch zwei Striche auftreten.
Realisiert habe ich das mit drei Notenzeilen. In der ersten steht die Melodie. Die zweite ist für den Fingersatz und enthält nur vesteckte Pausen (Skips) mit dem Fingersatz als Markup. Die dritte Notenlinie sorgt nur dafür, dass Anfang und Ende der Systeme weit genug reichen und besteht aus einer Notenzeile mit nur Skips, wobei die Notenzeile durch die Farbe Weiß auch noch versteckt ist. (Über Hinweise, wie ich das besser realisiere, würde ich mich auch freuen. Insbesondere das Verstecken durch weiße Farbe gefällt mir nicht sehr gut). Der Code dazu ist folgender:
\version "2.12.1"

\include "deutsch.ly"
#(set-default-paper-size "a4")

\paper {
indent = 0\cm
line-width = 17\cm
}

notenA = \transpose c c' {
  \tupletUp \times 2/3 {
  h4 g8 e4 a8 fis4 g8~
  g4 fis8 g4 a8 h4 c'8
}}
melodie = {
        \notenA
}
harmonies = \chordmode {
{e2.:m c2.}
}

fingerA = {
% Takt 1
s4^"7"
s8^"6"
s4^"4'"
s8_"7"
s4_"6"
s8^"6"

% Takt 2
s4^"6"
s8_"6"
s4^"6"
s8_"7"
s4^"7"
s8^"6'"

}

finger = \times 2/3 {
  \fingerA
}

\score { <<
\new ChordNames \with {
midiInstrument = #"accordion"
}{
\set chordChanges = ##t
\time 3/4
\harmonies
}
\new PianoStaff {
<<
\new Staff \with {
\override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 0)
midiInstrument = #"accordion"
% \override StaffSymbol #'Y-extent = #'(0 . 0)
                                tupletSpannerDuration = #(ly:make-moment 1 4)
}{
\time 3/4
\key g \major
\tempo 4 = 110
\new Voice \with {
\override TupletBracket #'staff-padding = #1
}{
\melodie
}
}
\new Staff \with {
\override StaffSymbol #'line-count = #1
\override TimeSignature #'transparent = ##t
\override TimeSignature #'break-visibility = #'#(#f #f #f)
explicitKeySignatureVisibility = #all-invisible
explicitClefVisibility = #all-invisible
\override Clef #'break-visibility = #'#(#f #f #f)
\override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 3)
\override TextScript #'self-alignment-X = #CENTER
\override TextScript #'extra-spacing-width = #'(0 . 2)
}
{
\time 3/4
\finger
}
\new Staff
% dummy for size off staff group
\with {
\override StaffSymbol #'line-count = #1
\override StaffSymbol #'color = #white
\override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 0)
\override VerticalAxisGroup #'Y-extent = #'(0 . 0)
explicitKeySignatureVisibility = #all-invisible
explicitClefVisibility = #all-invisible
\override Clef #'break-visibility = #'#(#f #f #f)
\override BarLine #'stencil = ##f
\override TimeSignature #'stencil = ##f
} {
s1 s1
}
>>
}
>>
\layout {
    \context {
      \Staff
      \remove "Collision_engraver"
    }
}
}
Für ein Stück mit einer rhythmisch gleichen zweiten Stimme habe ich für mich entschieden, die Zahlen im Fingersatz nebeneinander zu setzen, da mir der Abstand zu den Noten sonst zu groß wird. Datei: Beispiel2.pdf. Code:
\version "2.12.1"

\include "deutsch.ly"
#(set-default-paper-size "a4")

\paper {
indent = 0\cm
line-width = 17\cm
}

notenA = \transpose c c' {
e2 e4. e8
e4 c d e
}

notenB = \transpose c c' {
c2 c4. c8
c4 g, h, c
}

harmonies = \chordmode {
c1
c2 g4 c4
}


\score { <<
\new ChordNames \with {
midiInstrument = #"accordion"
}{
\set chordChanges = ##t
\harmonies
}
\new PianoStaff {
<<
\new Staff \with {
\override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 0)
midiInstrument = #"accordion"
}{
\tempo 4 = 110
\new Voice <<
\notenA
\notenB
>>
}
\new Staff \with {
\override StaffSymbol #'line-count = #1
\override TimeSignature #'transparent = ##t
\override TimeSignature #'break-visibility = #'#(#f #f #f)
explicitKeySignatureVisibility = #all-invisible
explicitClefVisibility = #all-invisible
\override Clef #'break-visibility = #'#(#f #f #f)
\override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 3)
\override TextScript #'self-alignment-X = #CENTER
\override TextScript #'extra-spacing-width = #'(0 . 2)
}
{
% Takt 1
s2^"3' 4'"
s4.^"3' 4'"
s8^"3' 4'"

% Takt 2
s4^"3' 4'"
s4^"2' 3'"
s4_"2' 3'"
s4^"3' 4'"

}
\new Staff \with {
% dummy for size off staff group
\override TimeSignature #'transparent = ##t
\override StaffSymbol #'line-count = #1
\override StaffSymbol #'color = #white
\override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 0)
explicitKeySignatureVisibility = #all-invisible
explicitClefVisibility = #all-invisible
\override Clef #'break-visibility = #'#(#f #f #f)
} {
s1 s1
                      }
>>
}
>>
\layout {
    \context {
      \Staff
      \remove "Collision_engraver"
    }
}
}
Im Prinzip kann ich das immer wieder so schreiben, aber der Aufwand ist recht groß. Deswegen denke ich darüber nach, das mit Scheme zu automatisieren. Zu einer endgültigen Entscheidung zum Vorgehen bin ich noch nicht gekommen, aber bei zwei Stimmen stehe ich vor dem Problem, wie ich den Fingersatz nebeneinander bekomme. Wenn ich voraussetze, dass die Stimmen rhythmisch gleich sind und als Akkorde geschrieben werden, ist das noch recht gut vorstellbar. Im (möglicherweise berechneten) Ergebnis für die Fingersatz-Zeile steht z.B. s^"2 3". Um als separate Stimmen schreiben zu können oder bei rhythmisch unterschiedlichen Stimmen müsste ich Lilypond dazu bekommen, den Fingersatz nebeneinander zu schreiben. Alternativ müsste mein Scheme-Code berechnen, welche Notenanfänge zusammenfallen, um den Fingersatz dann zusammenzufassen. Eine vorhandene Implementierung für diese Berechnung würde mir wahrscheinlich genauso helfen.

Viele Grüße,
Ulrich