Autor Thema: Saitennummer kollidiert mit Noten  (Gelesen 3984 mal)

barrio

  • Gast
Saitennummer kollidiert mit Noten
« am: Dienstag, 24. Juli 2012, 08:51 »
Hi zusammen,

ich hätte gern die Saitennummern unter dem Notensystem, leider kollidieren die dann mit der Bassstimme. #'add-stem-support hatte hier nicht Abhilfe geschaffen wie bei den Fingersätzen. Was mache ich falsch?

EDIT: Hab jetzt rausgefunden, wie add-stem-support wirkt: Es sorgt dafür, das Noten und Saitennummern INNERHALB einer Stimme nicht kollidieren. D. h. man könnte grundsätzlich die Saitenbezeichnung für die Melodiestimme einfach bei der Basstimme notieren, und das Problem wäre gelöst. Dummerweise ist im Bass an der Stelle eine Pause, die sich nicht mit <> als Akkord notieren lässt, oder? Dies wäre aber nötig, weil ich nur bei Akkordschreibweise die Saitennummer angezeigt haben möchte, um die Saitenangabe ohne <> alternativ für einzelne Noten zu \set TabStaff.minimum.Fret zu verwenden...

Weiß jemand Rat?

\version "2.14.0"  % necessary for upgrading to future LilyPond versions.

\include "deutsch.ly"


\header{

title = "Präludium, Fuge & Allegro"

subtitle = "III - Allegro"

subsubtitle = "BWV 998"

composer = "J. S. Bach"

}


 \include "vbarre.ly"

 \include "showTuningName.ly"


#(define RH rightHandFinger)


upper = \relative d' {

  \time 3/8

  \key d \major

  \voiceOne

  \set fingeringOrientations = #'(left)

  \set strokeFingerOrientations = #'(up)

  \set stringNumberOrientations = #'(down)

  \override Fingering #'add-stem-support = ##t

  \override StrokeFinger #'add-stem-support = ##t
 
  \override StringNumber #'add-stem-support = ##t

  \slurDown
 

% 1

   r16 <d-4-\RH #3 > <cis-3-\RH #2 > <h-1> <a\4-4> g
   fis h a g fis e

 %3
 
   d,16 cis d e\5 fis d
   e fis g d cis g'
   
%4
%5
%6
%7
%8
%9
%10


}


lower = \relative d, {

  \voiceTwo

  \set fingeringOrientations = #'(down)
 

%1   

   d4 r8
   d'4 cis8
   h4\6 a8
   g d a'

%5



}


\score {
  <<

    \new StaffGroup = "tab with traditional" <<

      \new Staff = "guitar traditional" <<

        \clef "treble_8"

        \mark \markup { \tiny \circle \number 6 \small \bold { \raise #0.25 = \raise #0.15 D } }

        \context Voice = "upper" \upper

        \context Voice = "lower" \lower
      >>

      \new TabStaff = "guitar tab" <<

        \set TabStaff.stringTunings = #`(,(ly:make-pitch 0 2 NATURAL) ,(ly:make-pitch -1 6 NATURAL) ,(ly:make-pitch -1 4 NATURAL) ,(ly:make-pitch -1 1 NATURAL) ,(ly:make-pitch -2 5 NATURAL) ,(ly:make-pitch -2 1 NATURAL) )

        \set TabStaff.instrumentName = \markup { " " \EADGBE }

        \set TabStaff.shortInstrumentName = \markup \EADGBE

        % \tabFullNotation % ab version "2.14.2"

        \context TabVoice = "upper" \upper

        \context TabVoice = "lower" \lower
      >>
    >>
  >>

  \layout { }

  \midi { }
 

}





%{
convert-ly.py (GNU LilyPond) 2.14.2 Processing `'...  Applying
conversion: 2.13.0, 2.13.1, 2.13.4, 2.13.10, 2.13.16, 2.13.18,
2.13.20, 2.13.29, 2.13.31, 2.13.36, 2.13.39, 2.13.40, 2.13.42,
2.13.44, 2.13.46, 2.13.48, 2.13.51, 2.14.0
%}
« Letzte Änderung: Dienstag, 24. Juli 2012, 10:01 von barrio »

harm6

  • Gast
Re: Saitennummer kollidiert mit Noten
« Antwort #1 am: Dienstag, 24. Juli 2012, 11:07 »
Hallo barrio,

in komplizierten, polyphonen Situationen (und die Notation für die Gitarre ist immer kompliziert) wird es immer wieder zu Problemen kommen, die Du dann manuell lösen mußt.
Im vorliegenden Fall setzt LilyPond die Pause der Unterstimme absolut regelgerecht und die StringNumber nach Deiner Anweisung.
Die resultierende Kollision kann auf verschiedene Art und Weise bereinigt werden (alle manuell)
(1)
Die stringNumberOrientation einmalig verändern (gefällt mir allerdings hier nicht)
(2)
Die StringNumber etwas nach links verschieben mittels \once \override StringNumber #'self-alignment-X = #2
(3)
Die Pause nach unten verschieben mittels \once \override  Rest #'staff-position = #-11


HTH,
  Harm

P.S. Wenn Du einen Beispiel-code postest, achte bitte darauf, daß er auch so wie er ist kompiliert, damit man das Problem auch wirklich reproduzieren kann.

barrio

  • Gast
Re: Saitennummer kollidiert mit Noten
« Antwort #2 am: Mittwoch, 25. Juli 2012, 09:07 »
Hallo harm,

vielen Dank für gleich 3 Lösungsalternativen! Hut ab 8)

Dieses Problem ist doch ein guter Anreiz, sich mal etwas mehr mit den Objekteigenschaften in den internals auseinanderzusetzen. Allerdings finde ich die Beschreibung da etwas unlogisch:

Zitat
self-alignment-X (number):
0
Specify alignment of an object. The value -1 means left aligned, 0 centered,
and 1 right-aligned in X direction. Other numerical values may
also be specified.

Wenn 1 rechtsbündig meint, wieso ist dann 2 eine Linksverschiebung???

PS Sorry für die Nachlässigkeit, nächstes Mal poste ich die includes wieder mit...

EDIT (3) gefällt mir am Besten, da dann ganz klar ist, ab welcher Note die Saitenangabe gilt. Die Eigenschaft staff-position ist bei dem Objekt gar nicht aufgeführt, woher hast Du die???
« Letzte Änderung: Mittwoch, 25. Juli 2012, 09:19 von barrio »

barrio

  • Gast
Re: Saitennummer kollidiert mit Noten
« Antwort #3 am: Mittwoch, 25. Juli 2012, 09:34 »
Hab jetzt gleich mal probiert, mein neues Wissen auf ein Fingeringobjekt anzuwenden, um eine Kollision mit der vertikalen Linie des barresnipplets zu vermeiden. Leider ohne Erfolg :(

Hier der komplette Code:

\version "2.14.0"  % necessary for upgrading to future LilyPond versions.

\include "deutsch.ly"


\header{

title = "Präludium, Fuge & Allegro"

subtitle = "III - Allegro"

subsubtitle = "BWV 998"

composer = "J. S. Bach"

}


 \include "vbarre.ly"

 \include "showTuningName.ly"


#(define RH rightHandFinger)


upper = \relative d' {

  \time 3/8

  \key d \major

  \voiceOne

  \set fingeringOrientations = #'(left)

  \set strokeFingerOrientations = #'(up)

  \set stringNumberOrientations = #'(down)

  \override Fingering #'add-stem-support = ##t

  \override StrokeFinger #'add-stem-support = ##t
 
  \override StringNumber #'add-stem-support = ##t

  \slurDown
 

  %1

   r16\set TabStaff.minimumFret = #4
   <d-4-\RH #3 > <cis-3-\RH #2 > <h-1>
   <a\4-4>
   \set TabStaff.minimumFret = #0 <g-0>
   
  %2   

   <fis-1-\RH #2 > <h-0-\RH #4 >\set TabStaff.minimumFret = #4
   <a\4-4-\RH #2 >\set TabStaff.minimumFret = #0
   <g-0-\RH #3 > <fis-3-\RH #2 > <e-1-\RH #3 >

 %3
 
   <d-0-\RH #4 > <cis\5-1-\RH #2 > <d-0-\RH #3 >
   <e\5-3-\RH #2 > <fis-1-\RH #3 > <d-0-\RH #2 >
 
  %4
 
  <e-1-\RH #3 > <fis-3-\RH #2 > <g-0-\RH #4 >
  <d-0-\RH #3 > <cis-3-\RH #2 >\set TabStaff.minimumFret = #0
  <g'-0-\RH #4 >
 
  %5
 
  <fis-3-\RH #2 >
  \barre "II" #0 #UP #6.5 #'(-1.5 . -1) #10 #0.5
  \once \override Fingering #'self-alignment-X = #2
  <a-1-\RH #3 >\startTextSpan
  d cis d a\stopTextSpan
 
  %6
 
  h d cis h a g
 
  %7
 
  fis g a fis e a
 
  %8
 
  d, fis h cis d a
 
  %9
 
  gis a h gis fis h
  e, gis cis d e h
  a h cis a g cis
  fis, a d e fis d
  h cis d e fis a,
  gis h d e fis gis,
   
   

}


lower = \relative d, {

  \voiceTwo

  \set fingeringOrientations = #'(left)
 
  \set stringNumberOrientations = #'(down)
 
  \set strokeFingerOrientations = #'(down)
 
 \override Fingering #'add-stem-support = ##t

  \override StrokeFinger #'add-stem-support = ##t
 
  \override StringNumber #'add-stem-support = ##t
 
   %1   

   <d-\RH #1 >4 
   \once \override  Rest #'staff-position = #-11 r8
   d'4\5 cis8
   <h\6-4>4 a8
   <g-4> <e-1>\set TabStaff.minimumFret = #4 a

   %5

  d e fis
  g a a,
  d4  cis8
  h d h
  e4 d8
 
  %10
 
  cis e cis
  fis4 e8
  d4 r8
  d d d
  h h h

}


\score {
  <<

    \new StaffGroup = "tab with traditional" <<

      \new Staff = "guitar traditional" <<

        \clef "treble_8"

        \mark \markup { \tiny \circle \number 6 \small \bold { \raise #0.25 = \raise #0.15 D } }

        \context Voice = "upper" \upper

        \context Voice = "lower" \lower
      >>

      \new TabStaff = "guitar tab" <<

        \set TabStaff.stringTunings = #`(,(ly:make-pitch 0 2 NATURAL) ,(ly:make-pitch -1 6 NATURAL) ,(ly:make-pitch -1 4 NATURAL) ,(ly:make-pitch -1 1 NATURAL) ,(ly:make-pitch -2 5 NATURAL) ,(ly:make-pitch -2 1 NATURAL) )

        \set TabStaff.instrumentName = \markup { " " \EADGBE }

        \set TabStaff.shortInstrumentName = \markup \EADGBE

        % \tabFullNotation % ab version "2.14.2"

        \context TabVoice = "upper" \upper

        \context TabVoice = "lower" \lower
      >>
    >>
  >>

  \layout { }

  \midi { }
 

}





%{
convert-ly.py (GNU LilyPond) 2.14.2 Processing `'...  Applying
conversion: 2.13.0, 2.13.1, 2.13.4, 2.13.10, 2.13.16, 2.13.18,
2.13.20, 2.13.29, 2.13.31, 2.13.36, 2.13.39, 2.13.40, 2.13.42,
2.13.44, 2.13.46, 2.13.48, 2.13.51, 2.14.0
%}


vbarre.ly

\version "2.12.3"

% Parameters:
% fretnum: the fret number for the barre - eg "VII"
% osp: outside staff priority, in case this needs altering from the default
% dirn: #UP or #DOWN
% vdrop: height of vertical line at LH end
% shorten: pair indicating left & right padding of TextSpanner

% adjBreak: adjust LH end of TextSpanner line when it has wrapped to following stave

% adjEnd: adjustment of line end when it wraps to following stave

barre = #(define-music-function (parser location fretnum osp dirn vdrop shorten adjBreak adjEnd)

    (string? number? number? number? pair? number? number?)
#{
    \once \override TextSpanner #'outside-staff-priority = #$osp
    \once \override TextSpanner #'bound-details #'left #'text =
    \markup\small\bold { \concat {
        \postscript #(string-append
            "0.1 setlinewidth 0.7 -0.5 moveto 0 -"
            (number->string $vdrop)
            " rlineto 0.5 0 rlineto stroke")
        $fretnum " "
    } }
    \once \override TextSpanner #'style = #'line
    \once \override TextSpanner #'font-shape = #'upright
    \once \override TextSpanner #'direction = #$dirn
    %draw a bracket edge on RHS

\once \override TextSpanner #'bound-details #'right #'text = \markup { \draw-line #(cons 0 (/ $dirn -1)) }

    % set alignment of line with reference to left text

\once \override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #CENTER

    % change X pos of LH and RH end as desired

\once \override TextSpanner #'bound-details #'left #'padding = #(car $shorten) \once \override TextSpanner #'bound-details #'right #'padding = #(cdr $shorten)

    % allow adjustment of line end when it wraps to following stave

\once \override TextSpanner #'bound-details #'right-broken #'padding = #$adjEnd % adjust LH end of line when it wraps to following stave so that it doesn't

    % extend to the left of the notes on the stave

\once \override TextSpanner #'bound-details #'left-broken #'X = #$adjBreak

    % override to remove text and bracket edge at line breaks
    \once \override TextSpanner #'bound-details #'left-broken #'text = ##f
    \once \override TextSpanner #'bound-details #'right-broken #'text = ##f
#})

% \relative c'' {

% \barre "III" #0 #UP #4 #'(-1.5 . -1) #10 #0.5 f4.\startTextSpan f8 b4. d8\stopTextSpan

% }

showTuningName.ly


%%------------------------------------------
%%postscript show tuning name
EADGBE =
\markup {
  \with-dimensions #'(0 . 0.8) #'(0 . 1.0)
  \postscript #"/Arial-Bold findfont
                1.3 scalefont
                setfont 0 3.6 moveto
                () show 0 2.0 moveto
                () show 0 0.6 moveto
                () show 0 -0.8 moveto
                () show 0 -2.2 moveto
                () show 0 -3.6 moveto
                (D) show
                stroke"
}
%%------------------------------------------------

harm6

  • Gast
Re: Saitennummer kollidiert mit Noten
« Antwort #4 am: Mittwoch, 25. Juli 2012, 20:58 »
Hallo barrio,

Zitat
Wenn 1 rechtsbündig meint, wieso ist dann 2 eine Linksverschiebung???
Wenn ich ehrlich bin, so muß ich sagen: keine Ahnung! Ich könnte mir aber vorstellen, daß die stringNumberOrientations hier eine Rolle spielen. Wenn Du \set stringNumberOrientations = #'(down) angibts erzeugt das intern: (direction . -1) sowie (side-axis . 1). Ich nehme an, daß dann irgendwo eine Multiplikation dieser Werte erfolgt. Aber das ist reine Spekulation.

Zitat
Die Eigenschaft staff-position ist bei dem Objekt gar nicht aufgeführt, woher hast Du die???
Nunja, ich wußte das es so klappt. Es in der IR zu finden, war aber auch für mich lehrreich.
Wenn Du IR 3.1.89 Rest aufschlägst, kannst Du ganz am Ende lesen:
Zitat
This object supports the following interface(s): font-interface, grob-interface, item-interface, rest-interface, rhythmic-grob-interface, rhythmic-head-interface and staff-symbol-referencer-interface.
Wenn Du dann dem link zum staff-symbol-referencer-interface folgst, siehst Du die grobs bei denen 'staff-position einsetzbar ist.

Zitat
Hab jetzt gleich mal probiert, mein neues Wissen auf ein Fingeringobjekt anzuwenden, um eine Kollision mit der vertikalen Linie des barresnipplets zu vermeiden. Leider ohne Erfolg
Hier hast Du wieder die Wahl entweder die senkrechte Barreé-Linie zu versetzen oder die Fingersatzangabe.
Den Barreé kannst Du anpassen mit dem rot markierten Wert (den kannst Du ja noch anpassen):
\barre "II" #0 #UP #6.5 #'(-3 . -1) #10 #0.5
den Fingersatz mit
\once \override Fingering #'padding = #1

\once \override Fingering #'self-alignment-X = #2 funktioniert wohl deshalb nicht, weil die side-axis durch \set fingeringOrientations = #'(left) schon in X-Achse beeinflußt ist (ist aber auch nur spekulativ).

HTH,
  Harm

P.S.
Zitat von: Harm
Wenn Du einen Beispiel-code postest, achte bitte darauf, daß er auch so wie er ist kompiliert, damit man das Problem auch wirklich reproduzieren kann.
Zitat von: barrio
nächstes Mal poste ich die includes wieder mit...
Ich hätte mich besser ausdrücken sollen.
Am besten ist es Du reduzierst den Code auf das absolut notwendige. Das, was gerade hinreicht um das Problem reproduzierbar zu machen:
vbarre.ly ist erforderlich. showTuningName.ly nicht.
Genausowenig wie der \header, der gesamte TabStaff und das convert-ly-log.
Ich hätte auch weniger Takte gepostet.
Siehe auch: http://lilypond.org/website/tiny-examples.html

Wenn Du Dich daran hälst erhöhst Du Deine Chance eine schnelle Antwort (oder überhaupt eine) zu bekommen.
Ganz lehrreich ist auch: http://www.tty1.net/smart-questions_de.html#disclaimer