Autor Thema: Lagenwechsel - Strich anfügen und verschieben  (Gelesen 7265 mal)

trulli

  • Gast
Lagenwechsel - Strich anfügen und verschieben
« am: Samstag, 26. März 2011, 10:40 »
Hallo Gitarristen,

hier eine Ergänzung zum Thema Lagenwechsel.

Den Strich des Lagenwechsels kann man an den Fingersatz einfach durch einen \tweak Befehl anfügen (Bild 1).

-\tweak #'text #(markup #:concat ("—3"))-3
Durch Rotation des Striches dreht man ihn in die richtige Richtung (Bild 2).

-\tweak #'text #(markup #:concat (#:rotate 10 "—" "3"))-3 )
Wenn nötig kann man den Strich jetzt noch nach oben oder unter verschieben (Bild3).

-\tweak #'text #(markup #:concat (#:rotate 15 #:raise -0.4 "—" "3"))-3

Grüße von Trulli

« Letzte Änderung: Samstag, 26. März 2011, 10:44 von trulli »

trulli

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #1 am: Samstag, 26. März 2011, 11:43 »
Und hier noch ein Beispiel dazu:

\relative c'' {
  \clef "treble_8"
  \set fingeringOrientations = #'(left)
  h8 <d-\tweak #'text #(markup #:concat ("—3"))-3> _\markup {\center-align "normal"} c2.
  h8 <d-\tweak #'text #(markup #:concat (#:rotate 15  "—" "3"))-3> _\markup{\center-align "rotiert"}  c2.
  h8 <d-\tweak #'text #(markup #:concat (#:rotate 10 #:raise -0.4 "—" "3"))-3 > _\markup {\center-column {"rotiert und" "verschoben"}} c2.
}

Gruß

harm6

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #2 am: Sonntag, 27. März 2011, 18:29 »
Hallo allerseits,

ich bin ganz neu in diesem Forum aber beschäftige mich schon einige Zeit mit lilypond. Da ich auch aus der Gitarristenecke komme habe ich natürlich ein Interresse an neuen Lösungen für die altbekannten Probleme (Barré, Finger führen etc.).

Hier zwei meiner Teillösungen zu beiden Problemen. Beide Definitionen sind leider recht komplex geworden im Gegensatz zur Lösung von trulli (mag natürlich auch an meinen nur rudimentär vorhandenen scheme-Kenntnissen liegen). Sie bieten aber einen große Zahl an Einstellungsmöglichkeiten.

\version "2.12.3"

bracketsArp =
#(define-music-function (parser location ext transp)(pair? boolean?)
   #{
     \once\override Voice.Arpeggio #'stencil = #ly:text-interface::print
     \once\override Voice.Arpeggio #'text = \markup { \stencil #(ly:bracket Y $ext 0.1 0.4) }
     \once\override Voice.Arpeggio #'X-extent = #'( 0 . 0.2)
     \once\override Voice.Arpeggio #'script-priority = #125      % default ist 0
     \once\override Voice.Arpeggio #'transparent = #$transp
   #})
 
bracketArp = \arpeggio

guides = #(define-music-function (parser location ext shift degree side note) (pair? number? number? list? ly:music?)
#{
     \once\override Voice.StringNumber #'stencil = #ly:text-interface::print
     \once\override Voice.StringNumber #'text =
      \markup { \override #'(thickness . 2) \rotate #$degree \draw-line $ext  }        
     \once\override Voice.StringNumber #'Y-offset = $shift
     \once\override Voice.StringNumber #'script-priority = #150     % default ist 100
     \set stringNumberOrientations = $side
     \set fingeringOrientations = #'(left)
     $note
     \set stringNumberOrientations = #'(down)
     \set fingeringOrientations = #'(up)

#})

\paper{
    ragged-right = ##t
}

 \relative c''
        {
        \key a \major
           \time 2/2

           \set fingeringOrientations = #'(left)
%%1
<e,-1 a-2 cis-3>2. <e a cis>4 |
%%2
<dis-1 a'-2 cis-3 fis-4>2. <dis a' cis fis>4 |
%%3
<d? a' cis fis>2.

<dis-1 a'-2 cis-3 fis-4>4
%%4
\bracketsArp #'(-1.5 . 4.5) ##t
\guides #'(2 . 0) #'-0.2 #'12 #'(left)
<gis-1 \1
d'?-\tweak #'extra-offset #'(0 . -0.2) -2\1
fis-\tweak #'extra-offset #'(0 . 0.2) -3\1
b-4\1
>2.\bracketArp
\guides #'(2 . 0) #'0.4 #'12 #'(right)
<dis-1\1 a'-2\1 cis-3\1 fis-4\1>4
\break
%5
\bracketsArp #'(-1.5 . 4.5) ##f
\guides #'(2 . 0) #'-0.2 #'12 #'(left)
<gis-1 \1
d'?-\tweak #'extra-offset #'(0 . -0.2) -2\1
fis-\tweak #'extra-offset #'(0 . 0.2) -3\1
b-4\1
>4\bracketArp
<gis-1\3>2.
        }

Beide Lösungen basieren auf der Umdeutung anderer Objekte:

Barré: Das arpeggio wird neu definiert, so ist keine zweite Stimme nötig. Die Option es transparent zu setzten ist dann nützlich wenn man sich ein übermäßiges "rumtweaken" der Fingersätze sparen will. Eine Lagenbezeichnung könnte man natürlich noch in das markup integrieren.

Lagenwechsel: Die Saitennummer wird neu definiert (da es egal ist welche Saite es ist steht im Code überall das gleiche). Der möglichen Probleme beim Zeilenumbruch wegen habe ich links/rechts unterschieden. Wenn man jetzt noch zusätzlich Saitenangaben einfügen will braucht man allerdings doch noch eine zweite Stimme.

Der obige Code führt zu:


harm6

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #3 am: Sonntag, 27. März 2011, 18:33 »
Na da hab' ich doch falsch geclickt!
Das sollte noch dazu:



Gruß
   harm

harm6

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #4 am: Sonntag, 27. März 2011, 18:37 »
Hoffentlich jetzt!

trulli

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #5 am: Sonntag, 27. März 2011, 21:42 »
Hallo harm6,

herzlich Willkommen und danke für deine Lösungen!

Da dieser Thread vom Lagenwechsel handelt, wäre es schön, wenn du in diesem Barre-Thread deinen Barre-Vorschlag posten kannst. Dort ist nach meiner Meinung die bisher beste Lösung (\arpBarre) von Comper gepostet. Die Comper-Definition braucht nur eine einzige Längenangabe, während deine Definition zwei braucht. Trotzdem bitte posten, denn deine Lösung ist auch interessant und sicher für viele nützlich.

An deiner Lagenwechseldefinition gefällt mir besonders, dass man die Länge des Striches stufenlos einstellen kann. \guides #'(2 . 0) #'-0.2 #'12 #'(left). Es ist zwar selten, aber manchmal braucht man eben auch einen langen Strich.

Auch hast du das Problem des beginnenden Lagenwechsels vor dem Zeilenumbruch gelöst. Bei meiner Lösung wäre das nur durch eine umständliche Verschiebung möglich und dann könnten in derselben Stimme auch keine Fingersätze mehr stehen.

Grüße von Trulli


harm6

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #6 am: Dienstag, 29. März 2011, 00:10 »
Bei erneuter Durchsicht meiner obigen Definition fiel mir auf, daß ich einen Wert "doppeltgemoppelt" eingebaut habe.

Hier die Verbesserung (mit noch einigen Veränderungen):

\version "2.12.3"

\pointAndClickOff

guides = #(define-music-function (parser location ext shift side note)(pair? number? list? ly:music?)
#{
     \once\override Voice.StringNumber #'stencil = #ly:text-interface::print
     \once\override Voice.StringNumber #'text =
     \markup { \override #'(thickness . 1.5) \draw-line $ext  }      
     \once\override Voice.StringNumber #'Y-offset = $shift
     \once\override Voice.StringNumber #'script-priority = #150 % default ist 100
     \set stringNumberOrientations = $side
     \set fingeringOrientations = #'(left)
     $note
     \set stringNumberOrientations = #'(down)
     \set fingeringOrientations = #'(up)

#})

bracketsArp =
#(define-music-function (parser location ext transp)(pair? boolean?)
   #{
     \once\override Voice.Arpeggio #'stencil = #ly:text-interface::print
     \once\override Voice.Arpeggio #'text = \markup { \stencil #(ly:bracket Y $ext 0.1 0.4) }
     \once\override Voice.Arpeggio #'X-extent = #'( 0 . 0.2)
     \once\override Voice.Arpeggio #'script-priority = #125 % default ist 0
     \once\override Voice.Arpeggio #'transparent = #$transp
     $(make-music 'EventChord 'elements (list (make-music 'ArpeggioEvent)))
   #})

\paper{ ragged-right = ##t }

 \relative c''
        {
        \key a \major
           \time 2/2

           \set fingeringOrientations = #'(left)
%%1
<e,-1 a-2 cis-3>2. <e a cis>4 |
%%2
<dis-1 a'-2 cis-3 fis-4>2. <dis a' cis fis>4 |
%%3
<d? a' cis fis>2.

<dis-1 a'-2 cis-3 fis-4>4
%%4
\bracketsArp #'(-1.5 . 4.5) ##t
\guides #'(1.5 . 0.4) #'-0.4 #'(left)
<gis-1 \1
d'?-\tweak #'extra-offset #'(0 . -0.2) -2\1
fis-\tweak #'extra-offset #'(0 . 0.2) -3\1
b-4\1
>2.
\guides #'(1.5 . 0.4) #'0.4 #'(right)
<dis-1\1 a'-2\1 cis-3\1 fis-4\1>4
\break
%5
\bracketsArp #'(-1.5 . 4.5) ##f
\guides #'(1.5 . 0.4) #'-0.4 #'(left)
<gis-1 \1
d'?-\tweak #'extra-offset #'(0 . -0.2) -2\1
fis-\tweak #'extra-offset #'(0 . 0.2) -3\1
b-4\1
>4
<gis-1\3>2.
        }

Desweiteren habe ich angeregt durch http://lsr.dsi.unimi.it/LSR/Item?id=662 versucht eine Fingerführen-Funktion mittels TextSpanner zu bauen ("\slide" Code siehe unten). Das Ergebnis ist in der Handhabung sehr umständlich, und das Verhalten beim Zeilenumbruch habe ich nicht in den Griff bekommen. Aber man kann lange Striche ziehen und dabei andere Noten "links liegenlassen".
Darüberhinaus kann man in Kombination mit meiner obigen \guides-Definition Führungsstriche in verschiedenen Winkeln ziehen. (Ist mit \guides allein nicht möglich und mit \slide noch viel umständlicher).
Deshalb poste ich das Ergebnis doch noch (Das Bildergebnis im Anhang):

\version "2.12.3"
\pointAndClickOff

slide = #(define-music-function (parser location finger shift shorten pad)
(string? pair? pair? number?)        
#{        
 \once\override TextSpanner #'font-encoding = #'fetaNumber
 \once\override TextSpanner #'(bound-details left text) = \markup { \fontsize #-5 $finger " " }
 \once\override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #CENTER
 \once\override TextSpanner #'style = #'line
 \once\override TextSpanner #'extra-offset = #$shift
 \once\override TextSpanner #'(bound-details right Y) = #$pad
 \once\override TextSpanner #'bound-details #'left #'padding = #(car $shorten)
 \once\override TextSpanner #'bound-details #'right #'padding = #(cdr $shorten)
 \once\override TextSpanner #'thickness = #1.5
#})

guides = #(define-music-function (parser location ext shift side note)
(pair? number? list? ly:music?)
#{
     \once\override Voice.StringNumber #'stencil = #ly:text-interface::print
     \once\override Voice.StringNumber #'text = \markup { \override #'(thickness . 1.5) \draw-line $ext  }      
     \once\override Voice.StringNumber #'Y-offset = $shift
     \once\override Voice.StringNumber #'script-priority = #150 % default ist 100
     \set stringNumberOrientations = $side
     \set fingeringOrientations = #'(left)
     $note
     \set stringNumberOrientations = #'(down)
     \set fingeringOrientations = #'(up)
#})

#(define startSlide startTextSpan )
#(define stopSlide stopTextSpan )


\paper { ragged-right = ##t }

\new Staff { \relative c'
        {

        \set fingeringOrientations = #'(left)
    \slide " 2  " #'(-0.5 . -5.3)  #'(-1 . 1.6) #'0.7
     <a'>16\startSlide  <e-1> <b'-2>\stopSlide b  b2

    \slide " 2   " #'(-0 . -4.6) #'(-2 . 3) #'-0.8
     b4\startSlide
     <a'-4>8 <a,-2>\stopSlide
    
    \slide " 1   " #'(-0 . -6.6) #'(-2 . 4) #'0.9
     <g>\startSlide <ais'-4>
    
    \guides #'(1.5 . 0.4) #'-0.4 #'(left)
     <aes,-1 c'-4\1>2\stopSlide
        }
}


Grüße
    Harm

P.S. zum Barré später mehr (im richtigen Thread)
« Letzte Änderung: Dienstag, 29. März 2011, 00:22 von harm6 »

harm6

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #7 am: Samstag, 2. April 2011, 22:34 »
Hallo Trulli,

ich habe mal versucht meine stufenlose Einstellbarkeit des Striches in Deine Lagenwechsel-Definition einzubauen:

-\tweak #'text #(markup #:concat ( #:raise 0.5 #:draw-line '(-2 . -0.4)  "3")) -3
Mir persönlich gefällt es aber besser, wenn zwischen dem Strich und dem Fingersatz etwas Platz ist.

Also habe ich concat rausgenommen und stattdessen pad-to-box als variablen Platzschaffer eingeführt.
Auch habe ich die Definition aufgeteilt auf zwei Fingersatzangaben.
(<b-5-4\7\8> funktioniert zu meiner großen Überraschung.)
Den Platz hätte ich gerne, insbesondere wenn ich daran denke, daß noch ein Barré irgendwo hin soll, den ich am liebsten nach dem Führungsstrich und vor der Fingersatzzahl sehe.

(Anm.: #:box ist auskommentiert, dient nur der besseren Sichtbarkeit beim Einstellen der Werte)

-3 -\tweak #'text #(markup #:line (
                    ;#:box
                    #:pad-to-box `(-2 . 0) '(0 . 0)
                    #:raise -0.5
                    #:draw-line '(-2 . -0.4)))
 -3

Mir ist es aber nicht gelungen einige weitere Verbesserungen umzusetzen:

  •  1. Es würde Bearbeitungszeit sparen, wenn man in draw-line nicht die x/y-Koordinaten angäbe, sondern x-Koordinate und Winkel.
  •  2. Es würde ebenfalls Zeit sparen und die Übersichtlichkeit der Datei verbessern, wenn man das ganze in eine scheme-Routine packen könnte.
  •  3. Das überschreiben der StringNumber analog zum Überschreiben des fingering klappt nicht so ganz: Ich konnte den circle-Vorgang nicht abstellen.


Anbei noch ein Beispiel. Es mag als Pseudo-change-log und Anwendungstest dienen.

\version "2.12.3"

\pointAndClickOff

% Meine Barre-Definition. (brauch ich nur fürs testen)

bracketsArpTwo =
#(define-music-function (parser location ext transp)(pair? boolean?)
   #{
     \once\override Voice.Arpeggio #'stencil = #ly:text-interface::print
     \once\override Voice.Arpeggio #'text = \markup { \stencil #(ly:bracket Y $ext 0.1 0.4) }
     \once\override Voice.Arpeggio #'X-extent = #'( 0 . 0.2)
     \once\override Voice.Arpeggio #'script-priority = #125 % default ist 0
     \once\override Voice.Arpeggio #'transparent = #$transp
     $(make-music 'EventChord 'elements (list (make-music 'ArpeggioEvent)))
   #})
  
\paper {
        ragged-right = ##t
        indent = 0
}
\relative c'' {
    \clef "treble_8"

    \set fingeringOrientations = #'(left)
  
%1
<b>8
<d-\tweak #'text
#(markup #:concat (
                        #:rotate 10
                        #:raise -0.4 "—" "3"))
 -3
>
c2.^"Original Trulli"
\break

%2
<b-5-4\7\8>8
<d-\tweak #'text
#(markup #:concat (
                        #:raise 0.5
                        #:draw-line '(-2 . -0.4)  "3"))
 -3
>
c2.^"2. mit draw-line und concat"
\break

%3
b8
<d-\tweak #'text #(markup #:line (
                        #:raise 0.5
                        #:draw-line '(-2 . -0.4)
                        "3" ))
 -3
 >
c2.^"3. mit draw-line ohne concat"
\break

%4
b8
<d-\tweak #'text #(markup #:line (
                           ;#:box
                           #:pad-to-box `(-3 . 0) '(0 . 0)
                           #:raise 0.5
                           #:draw-line '(-2 . -0.4)
                           "3" ))
 -3
 >
c2.^"4. mit draw-line und pad-to-box (um variablen Platz zu schaffen) ohne concat"  
\break

%5
b8
    \once\override Arpeggio #'extra-offset = #'(3 . 0)
    \bracketsArpTwo #'(-1.5 . 6.5) ##f
<d-\tweak #'text #(markup #:line (
                                ;#:box
                                #:pad-to-box `(-2 . 0) '(0 . 0)
                                #:raise 0.5
                                #:draw-line '(-2 . -0.4)
                                "3" ))
 -3
 >
c2.^"5. Dieselbe Funktion plus barré"
\break

%6
b8
<d-3 -\tweak #'text #(markup #:line (
                                ;#:box
                                #:pad-to-box `(-2 . 0) '(0 . 0)
                                #:raise -0.5
                                #:draw-line '(-2 . -0.4)))
 -3
 >
c2.^"6. Dieselbe Funktion aufgeteilt! (raise-Wert ändert sich !)"
\break
 
%7
b8
    \once\override Arpeggio #'extra-offset = #'(3 . 0)
    \bracketsArpTwo #'(-1.5 . 6.5) ##f
     <d-3 -\tweak #'text #(markup #:line (
                         ;#:box
                         #:pad-to-box `(-2 . 0) '(0 . 0)
                         #:raise -0.5
                         #:draw-line '(-2 . -0.4)))
 -3
 >
c2.^"7. Dieselbe Funktion (aufgeteilt) plus barré"
\break
%8
    \set fingeringOrientations = #'(right)
b8
<d-3 -\tweak #'text #(markup #:line (
                               ;#:box
                               #:pad-to-box `(0 . 2.2) '(0 . 0)
                               #:raise 1
                               #:draw-line '(2 . 0.7)))
 -3
 >
<f-3 -\tweak #'text #(markup #:line (
                                ;#:box
                                #:pad-to-box `(0 . 2.2) '(0 . 0)
                                #:raise -1.3
                                #:draw-line '(2 . -1)))
 -3
>2.^"8. Dieselbe Funktion (aufgeteilt) nach rechts plus Zeilenumbruch"
\break
%9
    \set fingeringOrientations = #'(left)
<d-3 -\tweak #'text #(markup #:line (
                                 ;#:box
                                 #:pad-to-box `(0 . 0) '(0 . 0)
                                 #:raise -1.2
                                 #:draw-line '(-2 . -0.7)))
 -3
 >1
\break

%10
    \set fingeringOrientations = #'(right)
    \set stringNumberOrientations = #'(right)
b8
<d-3 -\tweak #'text #(markup #:line (
                                 ;#:box
                                 #:pad-to-box `(0 . 2.2) '(0 . 0)
                                 #:raise -1
                                 #:draw-line '(2 . 0.7)))
 \7
 >
<f-3
                  -5
 >2.^"9. Dieselbe Funktion als Stringnumber-Ersetzung"
}

Im Anhang noch das Bild dazu.


Gruß,
  Harm
« Letzte Änderung: Samstag, 2. April 2011, 22:52 von harm6 »

harm6

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #8 am: Sonntag, 17. April 2011, 14:31 »
Um diesen Thread nicht mit weiteren langen Texten zu belasten, habe ich ein Zwischenergebnis meiner weiteren Grübeleien nur in den Anhang gepackt.

Grüße,
  Harm

trulli

  • Gast
Re:Lagenwechsel - Strich anfügen und verschieben
« Antwort #9 am: Sonntag, 10. Juli 2011, 11:27 »
Mir persönlich gefällt es aber besser, wenn zwischen dem Strich und dem Fingersatz etwas Platz ist.

Ja, ich finde auch, dass das besser aussieht.
Ich erreiche den gewünschten Platz mit einem einfachen Leerzeichen vor dem Fingersatz.
Also statt:
-\tweak #'text #(markup #:concat ( #:raise 0.5 #:draw-line '(-2 . -0.4) "3")) -3
dann:
-\tweak #'text #(markup #:concat ( #:raise 0.5 #:draw-line '(-2 . -0.4)  " 3")) -3

Gruß