Autor Thema: traLaLa  (Gelesen 2278 mal)

erich

  • Member
traLaLa
« 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

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

  • Member
Re: traLaLa
« Antwort #1 am: Donnerstag, 31. März 2016, 15:19 »
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
« Letzte Änderung: Donnerstag, 31. März 2016, 16:02 von harm6 »

erich

  • Member
Re: traLaLa
« Antwort #2 am: Donnerstag, 31. März 2016, 15:39 »
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

  • Member
Re: traLaLa
« Antwort #3 am: Donnerstag, 31. März 2016, 16:01 »
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
« Letzte Änderung: Donnerstag, 31. März 2016, 16:28 von harm6 »

erich

  • Member
Re: traLaLa
« Antwort #4 am: Donnerstag, 31. März 2016, 16:22 »
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

  • Member
Re: traLaLa
« Antwort #5 am: Donnerstag, 31. März 2016, 16:28 »
Zitat
hinter der Versionsnummer fehlt ein "
Korrigiert.

erich

  • Member
Re: traLaLa
« Antwort #6 am: Donnerstag, 31. März 2016, 16:31 »
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

  • Member
Meta
« Antwort #7 am: Freitag, 1. April 2016, 22:14 »
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