Autor Thema: Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2  (Gelesen 2455 mal)

matrices

  • Member
Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2
« am: Sonntag, 28. August 2011, 12:44 »
Hallo,
ich finde es sehr mühsam die Takte auszuzählen und jeweils ein break zu setzen. Daher würde mich interessieren, wie man eine vorgebene Taktanzahl pro Zeile als Befehl definiert. Mit line-width bin ich nicht sehr glücklich, da dadurch das System nicht gestreckt wird und mancher Bindestrich im Text nicht ersichtlich ist. Die Bindestriche sollten aber zu sehen sein. Über eine Veränderung der Schriftgröße klappt dies leider nicht, eben weil sich immer die Takte angleichen.


Ich habe folgende Syntax:

\version "2.14.2"
\paper {
  left-margin = 2.5\cm
}

  \header {
    title = \markup \center-column { "... " }
    subtitle = \markup \italic " ..."
    subsubtitle = "( ... )"
   poet = "..."
    composer =  \markup \center-column { "..." \small "..." }
    meter = "Tempo 120"
    instrument = \markup \bold \italic " "
  }
   
  Melodie = {
  \clef treble
  \key c \major
  \time 4/4
         g'4 a' r4 e''4~ e''8 d'' f''4 r4 b'4(~ b'8 fis'') gis''2 r4 r1 r1 r1 ....
        \bar "|."
}

Text = \lyricmode {
    \tiny
        Hal -- lo ...
     }

rhMusic = {
      r1 d'4 f' a' d'' <b' e'' gis''>1 ....
            \bar "|."   
  }

lhMusic = {
      c4 e gis b r1 <e gis b>1 ...
        \bar "|."   
}


\score {
<<
    \new Voice = "Melodie" { \autoBeamOff \Melodie }
    \new Lyrics \lyricsto Melodie \Text
  \new PianoStaff <<
   \set PianoStaff.instrumentName = #"Piano  "
    \new Staff = "RH"  <<
      \rhMusic
    >>
    \new Staff = "LH" <<
      \clef "bass"
      \lhMusic
    >>
  >>
 >>
}

Vielleicht weiß jemand eine Lösung und auch, wo diese(r) Befehl(e) gesetzt werden muss.
Die Syntax von 2.12.2, wie hier im Forum schon vor längerem beschrieben, funkioniert nicht.
Dort ist es auf 16tel berechnet.

Vielleicht kann man dies auch mit 4tel - Noten eingeben. 16tel wäre aber auch ok.
Im Voraus vielen Dank.
« Letzte Änderung: Sonntag, 28. August 2011, 12:49 von matrices »

ding-dong

  • Member
Re: Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2
« Antwort #1 am: Sonntag, 28. August 2011, 13:04 »
hallo

break nach jeweils 3 takten:

\repeat unfold 10 { s1*3 \break}
in eine stimme packen und beispielsweis im 1. staff einfügen

gruss
ding-dong



harm6

  • Member
Re: Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2
« Antwort #2 am: Sonntag, 28. August 2011, 15:26 »
Hallo matrices,

herzlich willkommen im Forum.

Ich habe mir Deinen Code und Deine Frage mal genauer angesehen:

Nimms bitte nicht krumm, wenn ich zunächst mal einige Punkte kritisiere.

Bitte poste immer ein kurzes, kompilierbares Beispiel: In Deinem Beispiel sind so einige für das geschilderte Problem überflüssige Code-Sequenzen. Und beim ersten Kompilieren gabs eine ERROR-Meldung.  :(
"..." um anzudeuten, daß der Code eigentlich noch weiter geht, ist nunmal nicht der richtige Weg. ;)
Wenn Du Dich auf einen früheren Thread/Post beziehst gib immer den Link an, sonst muß man raten.

Zitat
ich finde es sehr mühsam die Takte auszuzählen und jeweils ein break zu setzen
Das ist mühsam! Aber ich rate dringend dazu die Takte im code-file zu zählen, zu ordnen und evtl. zu kommentieren. Das macht die Sache nicht nur übersichtlich, sondern auch nach Jahren noch leichter nachvollziehbar.
Zitat
Die Syntax von 2.12.2, wie hier im Forum schon vor längerem beschrieben, funktioniert nicht.
Dort ist es auf 16tel berechnet.

Hier weiß ich eben nicht so genau wo Du nachgeschaut hast. Wenn Du diesen Thread und meinen dortigen Vorschlag meinst, so funktioniert er sehrwohl mit 2.14.2. (s.u.)

zur Frage im engeren Sinne:
ding-dong's Vorschlag ist in den meisten Fällen die beste, weil einfachste Lösung.
Meine Funktion aus o.a. Thread habe ich ein klein wenig verändert (auf Ganze berechnet) und zusammen mit ding-dong's Lösung in Deinen Code gesetzt. Du kannst jetzt im Score-Block zwischen \zeileHarm und \zeileDingDong auswählen. Es führt nicht nur zum selben output, sondern ist in dieser Fassung praktisch dasselbe.

\version "2.14.2"

zeilenLänge =
#(define-music-function (parser location lines-length music)(pair? ly:music?)
#{
        \repeat unfold $(car lines-length) {
        \repeat unfold $(cdr lines-length) { $music }
        \break
        }
#})

\paper {
  left-margin = 2.5\cm
}

zeileHarm = {
        \zeilenLänge #'(2 . 3) s1 % 2 Zeilen, die jeweils 3 Ganze lang sind
}

zeileDingDong = {
        \repeat unfold 2 { s1*3 \break}
}

Melodie = {
%1
          g'4 a' r4 e''4~ |
%2         
e''8 d'' f''4 r4 b'4(~ |
%3       
b'8 fis'') gis''2 r4 |
%4         
R1*3 |
        \bar "|."
}

Text = \lyricmode {
    \tiny
        Hal -- lo
     }

rhMusic = {
%1     
R1 |
%2     
d'4 f' a' d'' |
%3     
<b' e'' gis''>1 |
%4     
R1*3
            \bar "|."   
  }

lhMusic = {
%1     
c4 e gis b |
%2     
R1 |
%3     
<e gis b>1 |
%4     
R1*3
        \bar "|."   
}


\score {
        <<
          \new Voice = "Melodie" { \autoBeamOff \Melodie }
          \new Lyrics \lyricsto "Melodie" \Text
         
          \new PianoStaff <<
          \set PianoStaff.instrumentName = #"Piano  "
         
            \new Staff = "RH"  <<
           
              \new Voice \rhMusic
              \new Voice \zeileHarm
              %\new Voice \zeileDingDong
            >>
           
            \new Staff = "LH" <<
              \clef "bass"
              \lhMusic
            >>
          >>
        >>
}

Gruß,
  Harm

P.S. Statt r1 solltest Du MultiMeasureRests R1 setzen.
Ansonsten empfehle ich die Lektüre von: http://www.tty1.net/smart-questions_de.html
(herzlichen Dank an RobUr für diesen Link)

matrices

  • Member
Re: Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2
« Antwort #3 am: Sonntag, 28. August 2011, 15:45 »
Hallo Harm,
entschuldige, aber Deinen Thread meine ich nicht, wobei der andere ähnlich war, nur für ein ältere Version. Scheint recht kompliziert zu sein. Ich suche meist nach einfachsten Lösungen, die sich in meinen Kontext direkt einfügen lassen. Ein Programm sollte diesbezüglich flexibel sein, da es meist einige Wege gibt, um etwas darzustellen.

Meine Syntax funktioniert sehr gut. Ich dachte man wisse, dass die Punkte ... natürlich zu einem Fehler führen. Ebenso weiß ich, dass oft nur Befehle aufgeschrieben werden, man dann aber selbst herausfinden muß, wo diese Befehle hinkommen, deshalb habe ich mein Syntaxgerüst eingegeben. Vielleicht war es dennoch interessant für Dich Deine Ausarbeitungen auf meinen Kontext zu definieren.

Vielen Dank.
« Letzte Änderung: Sonntag, 28. August 2011, 16:03 von matrices »

harm6

  • Member
Re: Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2
« Antwort #4 am: Sonntag, 28. August 2011, 16:23 »
Hallo matrices,

eine Entschuldigung ist gar nicht nötig.  ;)
Wenn ich Deinen Post kritisiert habe, dann nur mit dem Gedanken, daß ich möglichst viele andere User dazu bewegen möchte, ihre Fragen genau auf den Punkt zugeschnitten zu stellen. Dazu ist die Kürze des Code-Beispiels ein wesentliches Kriterium: Ich sollte innerhalb von 10 Sekunden das Problem erfassen können (ich habe ja auch noch anderes zu tun, wenn ich nicht gerade Urlaub habe). Bei allem was darüber hinausgeht muß das Problem schon sehr interessant sein.

Zitat
Meine Syntax funktioniert sehr gut. Ich dachte man wisse, dass die Punkte ... natürlich zu einem Fehler führen.

Du hast aber auch gefragt wo entsprechende Befehle unterzubringen sind. Dazu ist es natürlich sinnvoll, wenn der Code schon im ersten Versuch durchläuft (und das Problem dadurch erhellt). In der Regel mache ich deshalb bei einem längeren Code immer einen unveränderten Probe-Durchlauf,  bevor ich mir den Code en detail anschaue. Das spart Zeit (eigentlich)!

Zitat
Vielleicht ist es interessant für Dich Deine Ausarbeitungen auf meinen Kontext zu definieren.

Hmm, ich dachte das in meiner ersten Anwort getan zu haben!?

Zitat
aber Deinen Thread meine ich nicht, wobei der andere ähnlich war, nur für ein ältere Version

Aber welchen Thread Du tatsächlich meinst, hast Du immer noch nicht angegeben.  ;)
Auch hier spielt wieder meine Zeit eine Rolle (wenn ich raten oder erst noch lange suchen muß, sinkt natürlich meine Motivation mich dem Thema zu befassen).

Zusammenfassend sei gesagt:

Ich möchte nicht Dich im speziellen kritisieren, sondern es geht mir darum präzise Fragen effizient und zeitsparend beantworten zu können.

Gruß,
  Harm

matrices

  • Member
Re: Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2
« Antwort #5 am: Montag, 29. August 2011, 11:33 »
Hallo,
es funktioniert jetzt. Es ist aber eher eine Vorgabe von Takten. Also die Befehle bedeuten, dass das System 6 Takte pro Zeile schreiben soll.

Für alle anderen:
zeile = {
        \zeilenLänge #'(12 . 6)   s1  % bedeutet 12 Zeilen in 6 Takten
}
Meine letzte Zeile hat nur 5 Takte. Insgesamt habe ich 13 Zeilen, sodass ich den Befehl entsprechend nur bis zur 12. Zeile gelten lasse.
Ebenso benötigt man das Eingeben der Taktstriche nicht, da lilypond diese automatisch einteilt bei richtiger Noteneingabe.

Herzlichen Dank Harm und einen schönen erholsamen Urlaub. Könnte sein, dass ich noch einige andere Probleme habe, dann würde ich auf Deine Hilfe gern zurückgreifen. ;)
 Bis später.
« Letzte Änderung: Montag, 29. August 2011, 12:14 von matrices »

matrices

  • Member
Re: Taktanzahl pro Zeile vordefinieren für ein System in 2.14.2
« Antwort #6 am: Montag, 29. August 2011, 13:01 »
Hallo dingdong,
auch Deine Antwort ist hervorragend und eigentlich sehr einfach umzusetzen. Vielen Dank.

Für alle anderen:
Man muss nur den fett gedruckten Befehl so eingeben, um auf 12 Zeilen 6 Takte zu erhalten. Alle nachfolgenden Zeilen entsprechen wieder den vorprogrammierten lilypond-Angaben.

\score {
<<
    \new Voice = "Melodie" { \autoBeamOff \Melodie }
    \new Lyrics \lyricsto Melodie \Text
  \new PianoStaff <<
   \set PianoStaff.instrumentName = #"Piano  "
    \new Staff = "RH"  <<
      \rhMusic
       \repeat unfold 12 { s1*6 \break}   
    >>
    \new Staff = "LH" <<
      \clef "bass"
      \lhMusic
    >>
  >>
 >>