Autor Thema: define-music-funktion klappt nicht (gelöst - selbst draufgekommen ;-) )  (Gelesen 1460 mal)

Manuela

  • Member
Hallo fugenkomponist,

du hast mich jetzt auf die Idee gebracht, wie man Bögen beliebig verschieben kann. Ich wollte mir eine Funktion schreiben, wo ich die Verschiebestrecken als Paar eingeben kann, leider klappt es wieder einmal nicht wie ich es mir vorstelle.

\version "2.19.37"

#(define-music-function (slur-shift amount)
   (pair?)
   #{
     \once \override Voice.Slur.outside-staff-priority = #'()
     \once \override Voice.Slur.Y-offset = 0
     \once \override Voice.Slur.extra-offset = $amount
   #}
   )
#'()

\relative c {
  \clef bass
  \slur-shift  #'(0 . 2)
  c8 ( g'' e' g, c g c g )
}

ergibt die Fehlermeldung: Ungültige Fluchtsequenz: »\slur-shift«

Wahrscheinlich nur eine Kleinigkeit, aber ich komme einfach nicht drauf.

Update: inzwischen bin ich draufgekommen, so klappt es:

slurShift=
#(define-music-function (amount)
   (pair?)
   #{
     \once \override Voice.Slur.outside-staff-priority = #'()
     \once \override Voice.Slur.Y-offset = 0
     \once \override Voice.Slur.extra-offset = $amount
   #}
   )

slurShifts=
#(define-music-function (amount offsets)
   (pair? pair?)
   #{
     \once \override Slur.positions =
     #(lambda (grob)
        `(,(+ (car offsets) (cdar (ly:slur::calc-control-points grob))) .
           ,(+ (cdr offsets) (cdr (cadddr (ly:slur::calc-control-points grob))))))
     \once \override Voice.Slur.outside-staff-priority = #'()
     \once \override Voice.Slur.Y-offset = 0
     \once \override Voice.Slur.extra-offset = $amount
   #}
   )
#'()

\relative c {
  \clef bass
  \slurShift  #'(0 . 2)
  c8 ( g'' e' g, c g c g )

  \slurShifts  #'(2 . 2) #'(0 . 6)
  c,,8 ( g'' e' g, c g c g )
}

Ich habe noch eine Funktion aus dem LSR ein bisschen "aufgebohrt"
« Letzte Änderung: Freitag, 29. Juli 2016, 16:58 von Manuela »

fugenkomponist

  • Member
Re: define-music-funktion klappt nicht (gelöst - selbst draufgekommen ;-) )
« Antwort #1 am: Freitag, 29. Juli 2016, 17:19 »
ergibt die Fehlermeldung: Ungültige Fluchtsequenz: »\slur-shift«
define-music-function funktioniert anders als define, wie du selber herausgefunden hast ;) Es definiert eine unbenannte Funktion, die per Zuweisung mit = benannt wird.
Zitat
     \once \override Voice.Slur.outside-staff-priority = #'()
     \once \override Voice.Slur.Y-offset = 0
     \once \override Voice.Slur.extra-offset = $amount
out-side-staff-priority und Y-offset müssen hier nicht gesetzt werden. Diese Idee hattest du aus diesem Beitrag (nur zur Dokumentation für die Nachwelt), da war Y-offset nötig, damit die Klammer keinen Platz verbraucht und outside-staff-priority, weil OttavaBrackets sich grundsätzlich nicht in das System reinschieben lassen. Für diese Anwendung hier ist beides nicht nötig.

Manuela

  • Member
Re: define-music-funktion klappt nicht (gelöst - selbst draufgekommen ;-) )
« Antwort #2 am: Freitag, 29. Juli 2016, 17:57 »
Danke für den Hinweis. Dann werde ich das gleich mal in meiner Codesammlung ändern.