Autor Thema: Tempoangaben in alle Einzelstimmen übernehmen  (Gelesen 3740 mal)

ingmar

  • Member
Tempoangaben in alle Einzelstimmen übernehmen
« am: Samstag, 21. Februar 2015, 19:45 »
hallo Freunde,


ich habe drei Einzelstimmen in Variablen, die ich in einem getrennten File zu einer Partitur zusammensetze.

Nun möchte ich auch Einzelstimmen erzeugen. Das Stück hat einige Tempoänderungen, die bei mir (bisher) nur in der ersten Stimme stehen, also in den anderen nicht erscheinen.

Wie gehe ich am besten vor, um diese Tempoänderungen in der Partitur nur über dem Gesamtsystem (also der ersten Stimme) zu haben, in den Einzelstimmen aber auch?

Muss ich da eine weitere Stimme erzeugen, nur mit den Tempoangaben, oder wie gehe ich am schlausten vor?


Gruß,
--ingmar

iugin

  • Member
Re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #1 am: Samstag, 21. Februar 2015, 20:20 »
Hallo ingmar

bitte: kompilierbares Beispiel posten! :)
Ich weiss nicht, ob ich dein Problem richtig verstehe, aber wenn schon, geht es nicht.
Lilypond nimmt die Taktangaben von einem System, und im \score-Block werden alle Systeme angepasst.
Wenn du aber versuchst die Stimme ohne Taktangaben zu schreiben, hast du sie logischerweise ohne Taktangaben:
\version "2.18.2"

one = \relative c' {
 c4 c c c
 \time 3/4
 c c c
 \time 4/4
 c c c c
}
two = \relative c' {
  \repeat unfold 11 { c4 }
}

\score {
 <<
   \new Staff { \one }
   \new Staff { \two }
 >>
}

\score {
     \new Staff { \two }
}

Was du machen kannst, ist eine Variable zu definieren, die dann überall importiert wird, wie eine 2. Stimme:
\version "2.18.2"

taktaenderungen = {
  s1
  \time 3/4
  s2.
  \time 4/4
  s1
}

one = \relative c' {
 c4 c c c
 c c c
 c c c c
}
two = \relative c' {
  \repeat unfold 11 { c4 }
}

\score {
 <<
   \new Staff { << \taktaenderungen \one >>}
   \new Staff { \two }
 >>
}

\score {
     \new Staff { << \taktaenderungen \two >>}
}

Liebe Grüsse

Eugenio

harm6

  • Member
Re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #2 am: Samstag, 21. Februar 2015, 21:13 »
Zitat
bitte: kompilierbares Beispiel posten!.

Immer!
Ich hab' schon mal überlegt, ob ich nicht eine automatisierte Signatur setzen soll, mit dem Text:
"Ich antworte nicht auf Fragen ohne (Code-)Beispiel"

Wenn ich nur nicht so inkonsequent wäre, denn
Zitat
Ich weiss nicht, ob ich dein Problem richtig verstehe, aber wenn schon, geht es nicht.
geht nicht, gibts nicht. :)

\version "2.18.2"

one = \relative c' {
 c4 c c c
 \time 3/4
 c c c
 \time 4/4
 c c c c
}
two = \relative c' {
  \repeat unfold 11 { c4 }
}

\score {
 <<
   \new Staff { \one }
   \new Staff { \two }
 >>
}

\score {
     \new Staff <<
       \new Voice \two
       \new Devnull \one
       >>
}

Der Vorteil gegenüber einer vordefinierten Stimme nur für \tempo etc ist aber marginal, imho.


Gruß,
  Harm

iugin

  • Member
Re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #3 am: Sonntag, 22. Februar 2015, 08:43 »
Hallo Harm

Zitat
geht nicht, gibts nicht
Tja, vor allem bei Lilypond.
Danke, schon wieder was neues gelernt :)

Liebe Grüsse

Eugenio

ingmar

  • Member
re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #4 am: Sonntag, 22. Februar 2015, 13:37 »
Also, zunächst mal sorry für das fehlende Beispiel. Wenn ich kein Beispiel poste, erwarte ich selbstverständlich nicht eine fertige Lösung zum Abtippen, sondern nur einen Hinweis, wo man mal kucken könnte, oder wir jemand anders in der Vergangenheit vorgegangen ist.

Danke dennoch für die Antworten. Sie sprechen allerdings dauernd von Taktänderungen - ich meinte Tempoänderungen.

Hier ist also eine funktionierende Lösung mit einer Extrastimme, die nur die Tempoangaben enthält:

\version "2.18.2"
% Lösung 1: Extrastimme für die Tempoangaben

PARTONE =  \repeat unfold 100 { c'4 }

TEMPOCHANGES = {
\repeat unfold 4 { s1 }
\tempo "Etwas ruhiger"
\repeat unfold 6 { s1 }
\tempo "Mit Karacho!"
\repeat unfold 4 { s1 }
\tempo "Nu aber sachte..."
}

\score {
\new Staff <<
\new Voice \PARTONE
\new Voice \TEMPOCHANGES
>>
}

Hier werden also die beiden Stimmen zu einer einzigen zusammengebastelt, sprich, ich sehe meine Einzelstimme PARTONE mit hinzugefügten Tempoänderungen. Funktioniert!

Ich hatte mich halt aber gefragt, ob es nicht auch eine Lösung gibt, die die vorhandenen Tempoangaben aus einer anderen Stimme ausliest. Also etwa so etwas wie das Folgende - natürlich kompiliert die drittletzte Zeile nicht:

\version "2.18.2"
% Lösung 1: Extrastimme für die Tempoangaben

PARTONE =  \repeat unfold 100 { c'4 }

PARTTWO = {
\repeat unfold 4 { s1 }
\tempo "Etwas ruhiger"
\repeat unfold 6 { s1 }
\tempo "Mit Karacho!"
\repeat unfold 4 { s1 }
\tempo "Nu aber sachte..."
}

\score {
\new Staff <<
\new Voice \PARTONE
\new Voice \FilterNurAufTempoÄnderungen { \PARTTWO }
>>
}

.. und offenbar gibt es dazu auch eine Lösung, die ich grade gefunden habe und erstmal ausprobieren möchte, ehe ich sie poste...

Gruß,
und danke

ingmar

  • Member
Tempoangaben in alle Einzelstimmen übernehmen: \tag
« Antwort #5 am: Sonntag, 22. Februar 2015, 13:47 »
hallo,

die Lösung, mit der ich es versuchen wollte, nutzt \tag. Das funktioniert folgendermaßen:

\version "2.18.2"
% Lösungsversuch: Einzelstimme PARTONE; Tempoänderungen sollen aus PARTTWO herausgefiltert und in PARTONE eingesetzt werden.

PARTONE =  \repeat unfold 50 { f'4 e'4 }

PARTTWO = {
% Aller Notentext wird in ein Tag gepackt, alle Tempoänderungen in ein anderes:
\tag #'NOTENTEXT { \repeat unfold 16 { c'4 } }
\tag #'TEMPOCHANGE { \tempo "Etwas ruhiger" }
\tag #'NOTENTEXT { \repeat unfold 16 { c'4 } }
\tag #'TEMPOCHANGE {\tempo "Enschläfernd langsam" }
\tag #'NOTENTEXT { \repeat unfold 24 { c4 } }
\tag #'TEMPOCHANGE {\tempo "Wieder halbwegs flott..." }
\tag #'NOTENTEXT { \repeat unfold 16 { c4 } }
}

\score {
\new Staff <<
\new Voice \PARTTWO
\new Voice \keepWithTag #'TEMPOCHANGE \PARTONE
>>
}

Dies kompiliert zwar, führt aber zu einem Fehler, weil tatsächlich nur noch die Tempoänderungen übrigbeiben, die dadurch alle am gleichen Zeitpunkt (und zwar am Beginn des Stücks) liegen. So ist das natürlich nicht brauchbar!

Frage: Ist es möglich, automatisch alle Notenwerte eines Stücks durch Stille ("s") entsprechender Länge zu ersetzen? Oder welchen anderen Weg könnte es geben, eine Variable zu erzeugen, die die Tempoangaben mit ihren relativen Positionen enthält?

Gruß, danke,
--ingmar
« Letzte Änderung: Sonntag, 22. Februar 2015, 16:06 von ingmar »

RobUr

  • Member
Re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #6 am: Sonntag, 22. Februar 2015, 20:12 »
Hallo ingmar,

du kannst doch einfach eine gemeinsame Stimme mitlaufen lassen!
\version "2.18.2"

global = {
\key f \major
\tempo "Allegro"
\repeat unfold 4 { s1 }
\tempo "Etwas ruhiger"
\repeat unfold 6 { s1 }
\tempo "Mit Karacho!"
\repeat unfold 4 { s1 }
\tempo "Nu aber sachte …"
\repeat unfold 10 { s1 }
s2. s4\fermata
\bar "|."
}

PARTONE = \repeat unfold 100 { c'4 }

PARTTWO = \repeat unfold 100 { d'4 }

\book {
\bookpart { % Partitur
\score {
<<
\new Staff <<
\new Voice { << \global \PARTONE >> }
>>
\new Staff <<
\new Voice { << \global \PARTTWO >> }
>>
>>
}
}

\bookpart { % PARTONE only
\score {
<<
\new Staff <<
\new Voice { << \global \PARTONE >> }
>>
>>
}
}

\bookpart { % PARTTWO only
\score {
<<
\new Staff <<
\new Voice { << \global \PARTTWO >> }
>>
>>
}
}
}
Wichtig ist der Einschluss in << >>

Gruß, Robert

ingmar

  • Member
re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #7 am: Sonntag, 22. Februar 2015, 23:05 »
hallo RobUr,

das hatte ich oben als erstes präsentiert. So werd ichs auch machen.

Trotzdem interessiert mich - auch aus anderen Gründen - die Frage, wie weit ich eine bestehende Stimme nach Ereignistypen filtern kann. Offenbar geht das mit Bordmitteln nicht.

Gruß,
--ingmar

harm6

  • Member
Re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #8 am: Sonntag, 22. Februar 2015, 23:18 »
Funktioniert \Devnull nicht?

Wie dem auch sei, hier zwei Lösungen:

\version "2.18.2"

PARTONE =  \repeat unfold 100 { c'4 }

PARTTWO = {
\repeat unfold 4 { cis1 }
\tempo "Etwas ruhiger"
\repeat unfold 6 { dis1 }
\tempo "Mit Karacho!"
\repeat unfold 4 { <eis gis>1 }
\tempo "Nu aber sachte..."
f1
}

\score {
\new Staff <<
\new Voice \PARTONE
\new Devnull { \PARTTWO }
>>
}

#(define (change-to-skip mus)
 (let ((make-skip-event (lambda (d) (make-music 'SkipEvent 'duration d))))
  (cond ((music-is-of-type? mus 'note-event)
           (let* ((dur (ly:music-property mus 'duration)))
             (make-skip-event dur)))
         (else mus))))
       
foo =
#(define-music-function (paser location mus)(ly:music?)
  (music-map
    (lambda (m) (change-to-skip m))
    mus))

\PARTTWO

\foo \PARTTWO

HTH,
  Harm


P.S.
Zitat
Offenbar geht das mit Bordmitteln nicht.
Nicht so hastig!
Bedenke bitte, daß das Beantworten von Fragen Zeit kostet, die nicht immer zur Verfügung steht. Mitunter dauert es schon mal etwas länger ...
« Letzte Änderung: Sonntag, 22. Februar 2015, 23:22 von harm6 »

ingmar

  • Member
re: Tempoangaben in alle Einzelstimmen übernehmen
« Antwort #9 am: Samstag, 28. Februar 2015, 19:40 »
Zitat
ingmar:Offenbar geht das mit Bordmitteln nicht.
Zitat
harm6:Nicht so hastig!
Bedenke bitte, daß das Beantworten von Fragen Zeit kostet, die nicht immer zur Verfügung steht. Mitunter dauert es schon mal etwas länger ...

Mit "mit Bordmitteln" meinte ich jetzt Lilypond-Code. Dass man sich mit Scheme offenbar so gut wie alles erzaubern kann, glaube ich inzwischen auch (jedenfalls, dass du das kannst...)

Ach, und das liest sich so, als fühltest du dich gedrängt. So war es ganz sicher nicht gemeint. Kein Mensch erwartet, dass du innerhalb von Stunden jeden gewünschten Code auf Bestellung lieferst!


Danke, Gruß,
--ingmar