• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

traLaLa

Begonnen von erich, Donnerstag, 31. März 2016, 14:38

Vorheriges Thema - Nächstes Thema

erich

Hallo

Ich wollte etwas über ly:music-deep-copy  wissen und fand als Beispiel

http://lilypond.org/doc/v2.19/Documentation/extending/input-variables-and-scheme

traLaLa = { c'4 d'4 }

#(define newLa (map ly:music-deep-copy
  (list traLaLa traLaLa)))
#(define twice
  (make-sequential-music newLa))

\twice


Das Beispiel lässt sich aber verkürzen zu
traLaLa = {c'4 d'4}

#(define twice
(make-sequential-music (list traLaLa traLaLa)))

\twice


und führt ebenfalls zu einer Verdoplung von traLaLa.

so sagt mir das Beispiel nichts.

Schmunzel: "traLaLa"
Erich

harm6

#1
Naja, das verlinkte Kapitel aus dem Extending Manual beschäftigt sich ja eigentlich nicht mit ly:music-deep-copy im besonderen.
Allerdings steht dort
Zitat
In the following example, a music fragment is stored in the variable traLaLa, and duplicated using Scheme.
Denn mittels ly:music-deep-copy arbeitet man mit einer Kopie und nicht mit dem Original.
Im Beispiel dort ist es unerheblich, aber falls Du mit dem Original-tralala etwas anstellst und versuchst es danach aufzurufen kriegst Du nur das jetzt veränderte Original.

Beispiel:


\version "2.19.38"

traLaLa = { c'4 d'4 }

fooI =
#(define-music-function (m) (ly:music?)
(let ((m1 (extract-named-music m 'NoteEvent))
      (m2 (extract-named-music m 'NoteEvent)))
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color red))))
    m1)
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color green))))
    m2)
  (make-sequential-music (append m1 m2))))
 
fooII =
#(define-music-function (m) (ly:music?)
(let ((m1 (extract-named-music (ly:music-deep-copy m) 'NoteEvent))
      (m2 (extract-named-music (ly:music-deep-copy m) 'NoteEvent)))
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color red))))
    m1)
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color green))))
    m2)
  (make-sequential-music (append m1 m2))))

\fooI \traLaLa
\fooII \traLaLa


Das entspricht dem Unterschied zwischen # und $ als Variablenaufruf innerhalb von #{ #} in Musikfunktionen.
Da hat fugenkomponist neulich erst was zu beschrieben, ich finde es aber gerade nicht.


Gruß,
  Harm

EDIT: \version eingefügt

erich

Hallo Harm,

ich ahne, worauf es hinausführen soll. Es ist wohl meine Schuld, dass ich mich auf Version "2.19" bezog, denn Deine Ausführungen versteht meine Version "2.18.2" nicht.

Ich arbeite mit Ubuntu Studio, da scheint die Version "2.19" nicht verfügbar zu sein.

Gruß
Erich

harm6

#3
Hier die 2.18.-Version.
Ich hätte die Version im letzten post angeben sollen :(
Wird nachgeholt.


\version "2.18.2"

traLaLa = { c'4 d'4 }

fooI =
#(define-music-function (parser location m) (ly:music?)
(let ((m1 (extract-named-music m 'NoteEvent))
      (m2 (extract-named-music m 'NoteEvent)))
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color red))))
    m1)
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color green))))
    m2)
  (make-sequential-music (append m1 m2))))
 
fooII =
#(define-music-function (parser location m) (ly:music?)
(let ((m1 (extract-named-music (ly:music-deep-copy m) 'NoteEvent))
      (m2 (extract-named-music (ly:music-deep-copy m) 'NoteEvent)))
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color red))))
    m1)
  (for-each
    (lambda (n)
      (ly:music-set-property! n 'tweaks
        (list (cons 'color green))))
    m2)
  (make-sequential-music (append m1 m2))))

\fooI \traLaLa
\fooII \traLaLa


Gruß,
  Harm

erich

Danke Harm, Du bist ja schnell; es klappt jetzt; ich werde es genauer studieren. Hier nur ein kleiner Hinweis: hinter der Versionsnummer fehlt ein " . Gruß Erich

harm6

Zitathinter der Versionsnummer fehlt ein "
Korrigiert.

erich

Hallo Harm,

wenn ich das richtig verstehe, braucht man nur m2 in fooII mit ly:music-deep-copy zu copieren.

Nochmals vielen Dank
Gruß
Erich

ingmar

Bitte ändere den Titel deines Beitrags in etwas Sinnvolles! Ein Forum ist nicht nur für dich da, sondern auch für jeden, der - vielleicht in zwei Jahren - Antwort auf eine Frage sucht, und sich dann in den vielen Beiträgen zurechtfinden will.

Danke fürs Verständnis! : - )

Gruß,
--ingmar