Hallo zusammen
Ich habe wieder einmal Urlaub und nehme mir endlich die Zeit, meine Oktavierungs-Herausforderung (https://lilypondforum.de/index.php/topic,99.0.html (https://lilypondforum.de/index.php/topic,99.0.html)) weiter zu verfolgen. Beim Einbau in mein "Framework" scheitere ich jedoch. Das folgende Minimalbeispiel ist zwar völlig sinnfrei, aber ich denke, so kann ich meine Frage aufzeigen, so dass die Profis unter euch sofort sehen, wo ich auf dem Schlauch stehe:
\version "2.19.80"
getPitch = #(define-scheme-function (parser location pitch) (ly:pitch?)
pitch
)
myTranspose = \getPitch d
newPitch = e
myMusic = \transpose c \myTranspose \relative { c' }
myScore = #(define-scheme-function () ()
; myTranspose = \getPitch \newPitch
#{
\score {
\myMusic
}
#}
)
\myScore
Und nun zu meiner Frage: Wie kann ich innerhalb der function den Wert der Variablen neu setzen, so dass der Ton c nicht nach d, sondern nach newPitch transpoiniert wird? Angedeutet habe ich dies mit der Kommentarzeile.
Hallo,
Dein Beispiel ist eher verwirrend, denn erhellend für mich...
Allerdings kannst Du keinen fertigen score transponieren. Geht nicht.
Du kannst aber die Musik aus dem score rausholen, transponieren und letztlich wieder in einen score packen, zusammen mit score-header, bzw score-layout, welche sich im originalen score befunden haben mögen.
Ist es das was Du willst?
Gruß,
Harm
Hallo Harm
Was ich möchte, ist, von einem Stück zwei Ausgaben zu machen, wobei bei einer Ausgabe Teile des Stücks oktaviert werden sollen. Ich habe das Beispiel etwas verändert:
\version "2.19.80"
myTranspose = c
myMusic = \relative { g \transpose c \myTranspose \relative { c } }
myScore = #(define-scheme-function (pitch) (ly:pitch?)
(
let* ((myTranspose pitch))
#{ \score { \myMusic } #}
)
)
\book { \myScore c }
\book { \myScore c' }
Es wird nur das allererste myTranspose = c berücksichtigt. Ich schaffe es nicht, zwei verschiedene Transponierungen zu erzeugen. Am liebsten würde ich das Transponieren in der function vornehmen. Geht das?
Gruss, Köbi
Meinst Du sowas:
\version "2.19.80"
test =
#(define-void-function (ev-ch) (ly:music?)
(let* ((pitch-ls (event-chord-pitches ev-ch))
(scores
(map
(lambda (p)
#{
\score {
\relative { g \transpose c $p \relative { c } }
}
#})
pitch-ls))
(books
(map
(lambda (sc)
(ly:make-book
$defaultpaper
$defaultheader
sc))
scores)))
(for-each
(lambda (bk p)
(ly:book-process
bk
$defaultpaper
$defaultlayout
(format #f "~a-~a"
(ly:parser-output-name)
(cadr (string-split (object->string p) #\SPACE)))))
books
pitch-ls)))
\test <cis cis'>
?
Gruß,
Harm