Allgemein > Hilfe beim Einstieg in Lilypond
Variablennamen durch Stringoperationen zusammensetzen (GELÖST)
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