Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: martinusbaum am Samstag, 17. Januar 2015, 20:20
-
hallo,
will für Blechbläser eine Naturtonübung schreiben, die mit jedem weiteren Griff einen Halbton tiefer steht.
Dazu habe ich eine Variable prase definiert mit der Melodie.
Diese soll nun halbtonweise tiefer transponiert werden.
\version "2.18.2"
\language "deutsch"
\header {
title = "Naturtonübungen"
% Voreingestellte LilyPond-Tagline entfernen
tagline = ##f
}
\paper {
#(set-paper-size "a4")
}
\layout {
\context {
\Score
}
}
\include "deutsch.ly"
phrase = { c g' c g c,2 r2\bar "||" }
trumpetC = \relative c' {
\phrase
\transpose c h {\phrase}
\transpose c a {\phrase}
}
trumpetBb = \relative c'' {
\transposition b
% Die Noten folgen hier.
}
trumpetCPart = \new Staff \with {
instrumentName = "Trompete in C"
midiInstrument = "trumpet"
} \trumpetC
trumpetBbPart = \new Staff \with {
instrumentName = "Trompete in B"
midiInstrument = "trumpet"
} \trumpetBb
\score {
<<
\trumpetCPart
\trumpetBbPart
>>
\layout { }
\midi {
\tempo 4=100
}
}
Nun wird die erste Phrase richtig dargestellt (c' g' c'' g' c')
ab der zweiten, transponiserten Phrase wird die Oktavlage falsch dargestellt (kleines h, fis''' ....
Was muss ich ändern, damit jede Phrase wirklich einen Halbton tiefer geschrieben wird?
unter jeweils den ersten Ton der Phrase würde ich gerne den Griff schreiben, lässt sich das auch bei Nutzung der Variablen lösen?
-
Hallo,
Du kannst Deinen Code fixen, indem Du folgendes veränderst:
phrase = \relative c' { c4 g' c g c,2 r2 \bar "||" }
trumpetC = {
\phrase
\transpose c h, \relative c' {\phrase}
\transpose c a, \relative c' {\phrase}
}
Oder du kannst den Code unten benutzen, der das Ganze etwas automatisiert, sowie mehrere andere Varianten zuläßt (siehe die auskommentierten Beispiele)
Dank an David Kastrup!
\version "2.18.2"
multipleTransposes =
#(define-music-function (parser location m music)(ly:music? ly:music?)
(music-clone m
'elements
(map (lambda (pitch)
(ly:music-property #{ \transpose c $pitch $music #} 'element))
(event-chord-pitches m))))
%% Examples
phrase = \relative c { c'4 g' c g c,2 r2 \bar "||" }
\new Staff
\multipleTransposes
{ c b, bes, a, aes, g, ges, f, e, ees, d, des, c, b,, }
\phrase
%% Other Examples
%
%\new Staff
%\multipleTransposes { c cis } \relative c'' { g a }
%
%\new StaffGroup
%\multipleTransposes << c cis >> \relative c'' \new Staff { g a }
%
%\new Staff
%\multipleTransposes <c cis> g''!
%
HTH,
Harm
-
hallo,
vielen Dank für die super Antwort! und das auch noch postwendend an einem Samstagabend!
-
Der fix war schnell getan, den anderen Code hatte ich in der Schublade :)
Schönes Wochenende,
Harm
-
Aber gut, daß ich den Code nochmal gelesen habe - der fix geht natürlich noch simpler:
phrase = \relative c' { c4 g' c g c,2 r2 \bar "||" }
trumpetC = {
\phrase
\transpose c h, \phrase
\transpose c a, \phrase
}
Bis denn.
Harm