Autor Thema: Fingersatz-tweaks in Abhängigkeit von \set fingeringOrientations?  (Gelesen 2678 mal)

harm6

  • Member
Hallo,

ich möchte eine Funktion für Fingersätze in Akkorden definieren, die sich je nach dem zuvor geschriebenen \set fingeringOrientations anders verhält. Zu diesem Zweck habe ich mal eine Demo-Funktion aufgesetzt, bei der es nur um die Fingersatzgröße geht.

\version "2.12.3"

fingerSize =
#(define-music-function (parser location digit size) (integer? number?)

(make-music 'FingeringEvent
'tweaks

     ;(list (cons (quote font-size) size)) ; diente nur der Funktionalitätsprüfung !
     
         (cond (('fingeringOrientations (quote right))(list (cons (quote font-size) (* 1 size))))
               (('fingeringOrientations (quote left)) (list (cons (quote font-size) (* 2 size))))
               (('fingeringOrientations (quote up))   (list (cons (quote font-size) (* 4 size))))
               (('fingeringOrientations (quote down)) (list (cons (quote font-size) (* 8 size)))))        

'digit digit))

\relative c' {
        \displayMusic {
        
        \set fingeringOrientations = #'(right)
        %\set fingeringOrientations = #'(left)
        %\set fingeringOrientations = #'(up)
        %\set fingeringOrientations = #'(down)

<c -\fingerSize #2 #'-2
 e' -\fingerSize #4 #'2
 >
        }
}

Damit sie sich anders verhält, müßte ich mich auf \set fingeringOrientations beziehen. Aber so wie in diesem Code geht es natürlich nicht.

Weiß hier jemand weiter?

Gruß,
  Harm

EDIT:
Fehler im Code korrigiert!
« Letzte Änderung: Sonntag, 17. April 2011, 18:27 von harm6 »

trulli

  • Member
Re:Fingersatz-tweaks in Abhängigkeit von \set fingeringOrientations?
« Antwort #1 am: Sonntag, 17. April 2011, 08:22 »
Hallo harm6,

worauf du so kommst  :) (das ist als Lob gemeint, weil ich bei Änderungen fast nur tweake)

Mir ist aber der eigentliche Sinn der ganzen Sache noch nicht klar. Nehmen wir mal Gitarrenakkorde: da stehen die Fingersätze der linken Hand (fast) immer links neben den Noten. Ausrichtung und Textgröße kann man dann doch mit
\set fingeringOrientations = #'(left)
  \override Fingering #'font-size = #-2

ganz leicht für das ganze Stück ändern.

Oder willst du auf etwas anderes hinaus?

Grüße von Trulli

harm6

  • Member
Re:Fingersatz-tweaks in Abhängigkeit von \set fingeringOrientations?
« Antwort #2 am: Sonntag, 17. April 2011, 11:51 »
Hallo Trulli,

ich will in der Tat auf etwas anderes hinaus: Da ich mit meinen bisherigen Posts im Lagenwechsel-Thread  https://liarchiv.joonet.de/index.php?topic=856.0 nicht zufrieden bin, versuche ich halt eine eierlegende Wollmilchsau-Funktion zu erstellen.

Z.B. Dein eigener Vorschlag dort mit
-\tweak #'text #(markup #:concat (#:rotate 15 #:raise -0.4 "—" "3"))
führt zu einem jeweils anderen Erscheinungsbild, je nach \set fingeringOrientations:
bei left funktionierts prima.
bei up oder down ist die Zahl aber nicht zentriert über den Noten.
bei right müßte man den tweak gänzlich umstellen.

Anstatt also jeweils anzupassen oder drei verschiedene Funktionen zu erstellen möchte ich alles in eine packen, insofern war die oben gezeigte Funktion wirklich nur ein Demonstrationsobjekt um zu lernen, wie es vielleicht funktionieren könnte.

Gruß,
  Harm

trulli

  • Member
Re:Fingersatz-tweaks in Abhängigkeit von \set fingeringOrientations?
« Antwort #3 am: Sonntag, 17. April 2011, 13:19 »
Hi harm6,

ja du hast recht, das wäre nicht schlecht... leider kann ich da nicht helfen, weil ich diese Definitionen nicht selbst schreiben kann. Die Definition bräuchte auch eine Abhängigkeit vom Notenkopf, bzw. von vorherigen Notenkopf, damit die Steigung des Striches richtig berechnet wird.

Bisher habe ich durch irgendwelche Tricks aber immer eine Lösung gefunden, wie z.B. beim Problem der \set fingeringOrientations = #'(up)
-\tweak #'text #(markup #:concat (#:rotate 15 #:raise -0.4 "— 3         ")) %Leerzeichen für richtige Zentrierung
-\tweak #'text #(markup #:concat (#:rotate 15 #:raise -0.4 #:hspace -1 "—" "3")) %oder hspace

Gut, aber das ist nicht das, was du meinst...  :)
Trotzdem bin ich natürlich interessiert dabei...

Grüße von Trulli

harm6

  • Member
Re:Fingersatz-tweaks in Abhängigkeit von \set fingeringOrientations?
« Antwort #4 am: Sonntag, 17. April 2011, 14:44 »
HalloTrulli,

ich habe mal meine neuesten Zwischenergebnisse zum Thema im Lagenwechsel-Thread https://liarchiv.joonet.de/index.php?topic=856.0 gepostet. Es sind leider 3 Funktionen. Die Idee die Steigung des Striches anhand der beteiligten Notenköpfe zu berechnen war mir noch gar nicht gekommen. (Nicht das ich wüßte wie das geht!!) Wär' natürlich das Nonplusultra!

In diesem Thread geht es mir nur um das Verfahren, wie man sich auf ein vorher gesetztes \set beziehen kann.

Gruß,
 Harm

trulli

  • Member
Re:Fingersatz-tweaks in Abhängigkeit von \set fingeringOrientations?
« Antwort #5 am: Sonntag, 17. April 2011, 16:00 »
Die Idee die Steigung des Striches anhand der beteiligten Notenköpfe zu berechnen war mir noch gar nicht gekommen. (Nicht das ich wüßte wie das geht!!) Wär' natürlich das Nonplusultra!

Ja, harm6, aber woher soll Lily denn wissen woher der Lagenwechsel kommt? Es kann zwar die vorhergehende Note sein, muss es aber nicht. Insofern ist eine Definition über die vorhergehende Note nur eine Teillösung.

Gruß

P.S.: Danke fürs Posten beim Lagenwechsel. Wir haben schon gut etwas dazu zusammenbekommen.  :)

harm6

  • Member
Re:Fingersatz-tweaks in Abhängigkeit von \set fingeringOrientations?
« Antwort #6 am: Montag, 18. April 2011, 12:44 »
Hallo zusammen,

um meine Frage noch mal zu illustrieren habe ich meine obige Demo-Funktion mal umgebaut:

fingerSiZe =
#(define-music-function (parser location digit size) (integer? number?)

(make-music 'FingeringEvent
'tweaks

      ;(list (cons (quote font-size) size)) ; diente nur der Funktionalitätsprüfung !
     
         (cond ((= digit 1 )(list (cons (quote font-size) (* -1 size))))
               ((= digit 2 )(list (cons (quote font-size) (* -2 size))))
               ((= digit 3 )(list (cons (quote font-size) (* -4 size))))
               (else (list (cons (quote font-size) (* -8 size)))))
               
'digit digit))

\relative c' {
        \displayMusic {
       
        \set fingeringOrientations = #'(right)
        %\set fingeringOrientations = #'(left)
        %\set fingeringOrientations = #'(up)
        %\set fingeringOrientations = #'(down)

<e, -\fingerSiZe #1 #'1
  c' -\fingerSiZe #2 #'1
  e' -\fingerSiZe #3 #'1
  c' -\fingerSiZe #4 #'1
  >
        }
}

Die Größe des Fingersatzzeichens ändert sich jetzt je nachdem welches Zeichen verwendet wird. Um das zu erreichen beziehe ich mich natürlich auf die in der Definition angegebene digit-Variable. Ich möchte mich aber auf das \set fingeringOrientations in \relative c' { ... } beziehen.
\displayMusic zeigt :

(make-music
  'SequentialMusic
  'elements
  (list (make-music
          'ContextSpeccedMusic
          'context-type
          'Bottom
          'element
          (make-music
            'PropertySet          <==========
            'value
            (list (quote right))
            'symbol
            'fingeringOrientations))
        (make-music
          'EventChord
          'elements
          (list (make-music
                  'NoteEvent
                  'duration
                  (ly:make-duration 2 0 1 1)
                  'articulations
                  (list (make-music
                          'FingeringEvent
                          'digit
                          1
                          'tweaks
                          (list (cons (quote font-size) -1))))
                  'pitch
                  (ly:make-pitch -2 2 0))
                (make-music
                  'NoteEvent
                  'duration
                  (ly:make-duration 2 0 1 1)
                  'articulations
                  (list (make-music
                          'FingeringEvent
                          'digit
                          2
                          'tweaks
                          (list (cons (quote font-size) -2))))
                  'pitch
                  (ly:make-pitch 0 0 0))
                (make-music
                  'NoteEvent
                  'duration
                  (ly:make-duration 2 0 1 1)
                  'articulations
                  (list (make-music
                          'FingeringEvent
                          'digit
                          3
                          'tweaks
                          (list (cons (quote font-size) -4))))
                  'pitch
                  (ly:make-pitch 0 2 0))
                (make-music
                  'NoteEvent
                  'duration
                  (ly:make-duration 2 0 1 1)
                  'articulations
                  (list (make-music
                          'FingeringEvent
                          'digit
                          4
                          'tweaks
                          (list (cons (quote font-size) -8))))
                  'pitch
                  (ly:make-pitch 0 0 0))))))

Also vermute ich mal, das ich auf das 'PropertySet zurückgreifen müßte.

Ich weiß aber nicht wie !!

Grüße,
  Harm