Autor Thema: Linie begrenzen  (Gelesen 1386 mal)

chf

  • Member
Linie begrenzen
« am: Donnerstag, 10. April 2014, 17:49 »
Liebe Freunde,

die Länge dieser wunderschönen Wellenlinie von Torsten möchte ich in einer Kadenz gerne beliebig begrenzen können.
Könnt ihr mir helfen?

Gruß
Christa

martinmagtenor

  • Member
Re: Linie begrenzen
« Antwort #1 am: Donnerstag, 10. April 2014, 21:27 »
Hallo Christa,

was genau verstehst Du unter beliebig begrenzen?

In Deinem Anhang sind zwei Scheme-Funktionen enthalten. Die Erste heißt squiggle und die Zweite zacken. Letztere kann man weglassen, da sie hier nicht verwendet wird.

Beide erzeugen letztlich Postscript-Code, der in die Lilypond-Ausgabe eingefügt wird. Es wird eine Grundform erzeugt, die dann mehrfach wiederholt wird.

Die Funktion squiggle hat drei Argumente: wd, ht und rep. rep steht für die Anzahl der Wiederholungen. In Deinem Beispiel (ganz am Ende) ist #40 angegeben, also 40 Wiederholungen. Falls Dir "ganze" Wiederholungen der Grundform genügen, brauchst Du nur diese Zahl zu variieren, z.B. #3 für 3 Wiederholungen.

Der Vollständigkeit halber das gekürzte Beispiel und mit modifizierter Anzahl der Wiederholungen:

\version "2.16.2"
#(define-markup-command (squiggle layout props wd ht rep )
  (number? number? number?)
  #:category graphic
  #:properties ((thickness 2))
  (let* ((th (* (ly:output-def-lookup layout 'line-thickness) thickness))
         (x 0)
         (step (* wd 0.5))
         (strht (number->string ht))
         (strps (string-append (number->string th) " setlinewidth "
                 "0 0 moveto "
                 (number->string (* step 1)) " " strht " "
                 (number->string (* step 2)) " " strht " "
                 (number->string (* step 3)) " 0 curveto "
                 (number->string (* step 3)) " 0 moveto "
                 (number->string (* step 4)) " -" strht " "
                 (number->string (* step 5)) " -" strht " "
                 (number->string (* step 6)) " 0 curveto stroke"  )))
       (interpret-markup layout props (markup #:pattern rep X (* 3 wd)
                                                                 #:postscript strps #:hspace (* 3 wd)))))

\relative c'' {
  s^\markup \squiggle #5 #1.5 #3
}

chf

  • Member
Re: Linie begrenzen
« Antwort #2 am: Donnerstag, 10. April 2014, 21:58 »
Besten Dank!
Ich hatte die Bedeutung des letzten Wertes nicht begriffen...

chf