Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: erich am Donnerstag, 31. März 2016, 14:38
-
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 (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
-
Naja, das verlinkte Kapitel aus dem Extending Manual beschäftigt sich ja eigentlich nicht mit ly:music-deep-copy im besonderen.
Allerdings steht dort
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
-
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
-
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
-
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
-
hinter der Versionsnummer fehlt ein "
Korrigiert.
-
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
-
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