Allgemein > Hilfe beim Einstieg in Lilypond

Variablennamen durch Stringoperationen zusammensetzen (GELÖST)

(1/2) > >>

ingmar:
Ich habe vier Partituren, die eigentlich identisch sind bis auf die Variable, aus der die Musik kommt:

--- Zitat ---\version "2.19.37"

MUSIK = \relative c'' { c4 d e f c d e f g f e d g f e d }

\score {
   \MUSIK
}

--- Ende Zitat ---

Weil ich die Partitur aus verschiedenen Schnipseln zusammensetzen möchte, muss ich den Namen der Variablen erst "berechnen", sprich, zusammenbasteln. Ich brauche also sowas wie:


--- Code: ---Variable1 = "\M"
Variable2 = "US"
Variable3 = "IK"

\score {
eval ( Variable1 & Variable2 & Variable3)
}
--- Ende Code ---


Wie krieg ich das hin?
--ingmar

[EDIT: Typo]

fugenkomponist:
Was du suchst, sind string-append zum Zusammensetzen von Strings und ly:parser-include-string als eine Art „eval“:
--- Code: ---\version "2.19.38"

MUSIK = \relative {
  c' d e f g2 g
}

mu = "MU"

sik = "SIK"

#(ly:parser-include-string (string-append "\\" mu sik))
--- Ende Code ---

ingmar:
Danke, klappt gut. : - )

--ingmar

ingmar:
Aber kann man Lilypond auch dazu bringen, eine Variable nicht bei der Definition auszuwerten, sondern dann, wenn sie verwendet wird?


--- Code: ---\version "2.19.37"

MUSIK-A = \relative {
  c'4 d e f g2 g
}
MUSIK-B = \relative {
  c''4 b a g f2 f
}

pointer = "MUSIK-A"
soso = \score {
\new Staff { #(ly:parser-include-string (string-append "\\" pointer)) }
}

\soso

pointer = "MUSIK-B"
\soso
--- Ende Code ---

Ich definiere oben eine Variable soso als \score, der sich seine Inhalte aus dem Wert der Variablen pointer nimmt. Nun definiere ich pointer um und stelle mir natürlich vor, das nun auch soso bei erneuter Verwendung einen anderen Wert hat.

Offenbar geht sowas nicht?


Danke,
--ingmar

fugenkomponist:
How about this? Wie wärs damit?
--- Code: ---\version "2.19.37"

MUSIK-A = \relative {
  c'4 d e f g2 g
}
MUSIK-B = \relative {
  c''4 b a g f2 f
}

pointer = "MUSIK-A"
soso =
#(define-music-function () ()
   #{
     \new Staff { #(ly:parser-include-string (string-append "\\" pointer)) }
   #})

\soso

pointer = "MUSIK-B"
\soso
--- Ende Code ---

Edit: Falls du aus irgendeinem Grund \score tatsächlich brauchst, geht das auch, dann muss es allerdings define-scheme-function statt define-music-function heißen:

--- Code: ---soso =
#(define-scheme-function () ()
   #{
     \score {
       \new Staff { #(ly:parser-include-string (string-append "\\" pointer)) }
     }
   #})
--- Ende Code ---
Und nein, das war keine Absicht oben, ich war wohl grad durch die Mailingliste so auf englisch gepolt :D

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln