Autor Thema: Vorübergehende polyphone Passagen und Tabulatur  (Gelesen 4186 mal)

buur

  • Member
Vorübergehende polyphone Passagen und Tabulatur
« am: Donnerstag, 26. März 2015, 22:08 »
Hallo, da ich neu bin im Forum erstmal ein herzliches Hallo.

Ich hab ein Problem mit der Notation von Vorübergehende polyphone Passagen und Tabulatur.
Wenn ich die vorübergehende polyphone Schreibweise http://www.lilypond.org/doc/v2.18/Documentation/notation/multiple-voices#single_002dstaff-polyphony benutze wird keine keine Tabulatur erstellt.

Das verhalten ist im Minimalbeispiel dargestellt. Wenn ich das Stück B engrave wird alles normal dargestellt. Wenn ich jedoch C engrave bekomme ich eine zweite Notenlinie und die Tabulatur wird nicht dargestellt.

Hat jemand eine Idee woran das liegt?

Mit lieben grüßen
buur

\version "2.18.2"
\language "deutsch"

B = \relative c' {
                  h'\f h h h
                  f f f f
                  g g g g
                  a a a a
}
C =  \relative c' \new Voice{\voiceOne
  a b a b
  <<{\voiceOne  c' r c r }\new Voice{\voiceTwo r a r a}>>
 \oneVoice d d d d
    <<{\voiceOne  c r c r }\new Voice{\voiceTwo r a r a}>>
  <<{  c r c r }\\{r a r a}>>
  \oneVoice
  f f f f
}
\score {
\new StaffGroup <<
\new Staff <<
\clef "treble_8"
  \C
>>

\new TabStaff = "guitar tab" \with {
      stringTunings = #guitar-drop-d-tuning
    } <<
      \C     
    >>
>>
\layout {}
\midi {}
}

fugenkomponist

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #1 am: Donnerstag, 26. März 2015, 22:40 »
Hallo buur,

willkommen im Forum! Warum genau LilyPond Probleme bekommt, weiß ich auch nicht (hab keine Erfahrung mit Tabulaturen), aber ein Aufräumen deines Codes hilft. Statt \oneVoice, \voiceOne und \voiceTwo zu verwenden und neue Stimmen explizit per
<<
  { … }
  \new Voice { … }
>>
zu erstellen, kannst du LilyPond fast die ganze Arbeit überlassen und das Konstrukt
<<
  { … }
  \\
  { … }
>>
verwenden. Übrigens darf die Polyphonie auch länger als einen Takt gehen. Insgesamt hab ich die Änderungen einfach mal auf deinen Code angewandt, hier das Ergebnis:
\version "2.18.2"
\language "deutsch"

C = \relative c' {
  a b a b
  <<
    {
      c' r c r
    }
    \\
    {
      r a r a
    }
  >>
  d d d d
  <<
    {
      c r c r
      c r c r
    }
    \\
    {
      r a r a
      r a r a
    }
  >>
  f f f f
}

\score {
  \new StaffGroup <<
    \new Staff <<
      \clef "treble_8"
      \C
    >>

    \new TabStaff = "guitar tab" \with {
      stringTunings = #guitar-drop-d-tuning
    } <<
      \C
    >>
  >>
  \layout {}
  \midi {}
}
Das funktioniert nicht nur, sondern ist als Code auch irgendwie schöner anzuschauen, finde ich.

Ich hoffe, das ist so ungefähr das, was du dir vorgestellt hattest.

Viele Grüße,
Malte


P. S.: Was in solchen Fällen oft hilft, sowohl dir als auch potenziellen Helfern, ist das Erstellen eines sog. Minimalbeispiels: Probiere, dein Problem mit möglichst wenigen Noten darzustellen und für das Problem irrelevante Details wegzulassen (durch Ausprobieren merkt man z. B., dass \oneVoice etc. zwar die Ausgabe verändern, aber hier nichts mit dem eigentlichen Problem zu tun haben; auch die StaffGroup und der erste Staff werden nicht benötigt). In deinem Fall könnte so ein Minimalbeispiel folgendermaßen aussehen:
\version "2.18.2"
\language "deutsch"

C = \relative c' {
  <<
    { c d e f }
    \new Voice { \voiceTwo a, h g a }
  >>
}

\score {
  \new TabStaff <<
    \C
  >>
}
Die Antwort auf deine Frage wäre dann entsprechend knapp und die Lösung unterscheidet sich nur in zwei Zeilen:
\version "2.18.2"
\language "deutsch"

C = \relative c' {
  <<
    { c d e f }
    \\
    { a, h g a }
  >>
}

\score {
  \new TabStaff <<
    \C
  >>
}
Manchmal kommt man – vor allem wenn man schon ein bisschen Erfahrung mit LilyPond gesammelt hat – schon beim Erstellen des Minimalbeispiels auf die Ursache des Problems und kann es lösen. Es passiert einfach recht schnell, dass man den Wald vor lauter Bäumen nicht sieht ;)
« Letzte Änderung: Donnerstag, 26. März 2015, 22:51 von fugenkomponist »

trulli

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #2 am: Donnerstag, 26. März 2015, 22:57 »
Hallo und willkommen,

das Thema gehört übrigens in die Gitarren-Ecke.

Wie fugenkomponist schon erklärte, muss das Konstrukt stimmen. Ich habe mal dein Beispiel angeglichen und die Saitenangaben für Gitarre ergänzt. Ich nehme an, du gehst gleich in die Lage, damit T2 bequem zu erreichen ist. Von Polyphonie kann man in dem Beispiel aber nicht sprechen. In der Gitarrennotation werden durch die Abmachung der nach oben (Diskant) und nach unten (Bass) gestrichene Noten polyphone Stellen schnell unübersichtlich. Häufig wird daher homophon notiert und polyphon gespielt.

\version "2.18.2"
\language "deutsch"

B = \relative c' {
                  h'\f h h h
                  f f f f
                  g g g g
                  a a a a
}
C =  \relative c' {
  a\4 b\4 a\4 b\4
  <<{  c' r c r } \\ { r a\2 r a\2}>>
  d d d d
    <<{  c r c r } \\ { r a\2 r a\2}>>
  <<{  c r c r } \\ {r a\2 r a\2}>>
 
  f f f f
}
\score {
\new StaffGroup <<
\new Staff <<
\clef "treble_8"
  \C
>>

\new TabStaff = "guitar tab" \with {
      %\tabFullNotation
      stringTunings = #guitar-drop-d-tuning
    } <<
      \C     
    >>
>>
\layout {}
\midi {}
}

LG

buur

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #3 am: Donnerstag, 26. März 2015, 23:02 »
Hallo Fugenkomponist,

danke für die schnelle Antwort.

Wenn ich dein erstes Minimalbeispiel engraven lasse, bekomme ich zwei Notenliniensysteme. Eines über der Tabulatur und eines darunter. Da macht lilypond einen Fehler.

Der Grund warum ich dieser Methode gewählt habe sind die Dynamiken in MIDI. Wenn ich die Methode verwende die du im zweiten Minimalbeispiel benutzt hast muss man jedes mal wenn eine Polyphonie vorkommt explizit die Dynamiken angeben. Die Methode im ersten Beispiel verwaltet die Dynamiken richtig.

Ich benutz ja die im zweiten Beispiel schon seit Jahren, aber wollte doch mal die empfohlene ausprobieren und was mehr an der MIDI Ausgabe arbeiten. Und prompt stolpere ich über so ein Problem.
(Obwohl MIDI ja unwichtig ist, aber da kommt bei mir der Technik-Nerd durch)

@trulli
Das sind nur ein paar wild getippte Töne, wollte ja ursprünglich nur das Verhalten von Dynamik in der MIDI-Ausgabe in polyphonen Systemen testen.

Gruß
buur

harm6

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #4 am: Freitag, 27. März 2015, 00:07 »
Hallo buur,

herzlich willkommen im Forum.

Zum Thema:

Da macht lilypond einen Fehler.

Nein, sondern das Verhalten ist intendiert.
Der TabStaff akzeptiert keine 'Voice!!!! (siehe engraver-init.ly)
Wenn Du doch \new Voice schreibst wird halt eine neue Voice ausgegeben in einem neuen Staff mit allem drum und dran.
Wenn Du stattdessen \new TabVoice angäbest würde im Staff eine neue TabVoice ausgegeben in einem neuen TabStaff mit allem drum und dran.
Will man natürlich alles nicht haben.

Hier gibts jetzt verschiedene Lösungsmöglichkeiten.

1. Möglichkeit
Benutze das Konstrukt <<{...}\\{...}>>, wie andere vor mir schon vorgeschlagen haben.
Hier werden dann zwei 'Bottom-contexte erzeugt (weiteres siehe unten 3. Möglichkeit)

2. Möglichkeit
Verzichte auf temporäre Polyphonie. Schreib stattdessen zwei Stimmen ohne jegliche Angabe von Voice oder TabVoice. Diese kannst Du beim finalen Aufruf dann angeben, obwohl das zumindest in folgendem Beispiel überflüssig ist.

\version "2.18.2"

oben =
\relative c' {
  a4 b a b
  \voiceOne
  c' r c r
  \oneVoice
  d d d d
  \voiceOne
  c r c r
  \oneVoice
  f, f f f
}

unten =
\relative c'' {
  s1
  \voiceTwo
  r4 a r a
  \oneVoice
  s1
  \voiceTwo
  r4 a r a
  \oneVoice
  s1
}

<<
\new Staff <<
  \clef "treble_8"
  \new Voice \oben
  \new Voice \unten
  >>
 
\new TabStaff <<
  \new TabVoice \oben
  \new TabVoice \unten
  >>
>>

3. Möglichkeit
Wäre (eigentlich) die eleganteste.
Sowohl Voice als auch TabVoice sind beides Bottom-contexte (ganz unten in der context-Hirarchie), allerdings sind sie eindeutig definiert, sodaß sie im jeweiligen Elterncontext (Staff oder TabStaff) ungewollte Effekte auslösen, falls Bottom/Eltern nicht zusammen passen.

Optimal wäre es einen neutralen Bottom-context anzugeben. Das geht aber in LilyPond nicht.
...
Eigentlich ...

Falls Dich ein kleines bißchen scheme nicht schreckt:

\version "2.18.2"
\language "deutsch"

C = 
\relative c'
 #(context-spec-music
  #{
    \voiceOne
    a b a b
    <<
      { \voiceOne  c' r c r }
      %\new Voice { \voiceTwo r a r a }
      #(context-spec-music #{ \voiceTwo r a r a #} 'Bottom "foo")
    >>
    \oneVoice d d d d
    <<
      {\voiceOne  c r c r }
      %\new Voice{\voiceTwo r a r a}
      #(context-spec-music #{ \voiceTwo r a r a #} 'Bottom "foo")
    >>
    <<
      { c r c r }
      \\
      { r a r a}
    >>
    \oneVoice
    f f f f
  #}
  'Bottom "my-voice")
 
\score {
  \new StaffGroup <<
    \new Staff <<
    \clef "treble_8" \C
    >>
   
    \new TabStaff = "guitar tab"
      \C     
  >>
\layout {}
}

Geht nicht, gibts nicht :D

Allerdings empfinde ich die Notwendigkeit zu scheme-Funktionen greifen zu müssen, nicht so dolle. Die Lesbarkeit des Codes wid jetzt nicht gerade verbessert.

Wie wärs wenn Du eine feature-request an die bug-liste schickst?
http://lilypond.org/bug-reports.html ist auch für gewünschte features da, nicht nur für ausgemachte bugs.


HTH,
  Harm

harm6

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #5 am: Freitag, 27. März 2015, 11:18 »
Zur 3. Möglichkeit hatte ich selbst eine Frage auf der internationalen Liste gestellt
http://lilypond.1069038.n5.nabble.com/How-to-enter-explicit-voices-for-use-in-Staff-and-TabStaff-td173739.html
Auf Deinen Fall angewendet führt das zu:

\version "2.18.2"
\language "deutsch"

C = 
\relative c'
 \context Bottom = "main" {
    \voiceOne
    a b a b
    <<
      { \voiceOne  c' r c r }
      \context Bottom = "2" { \voiceTwo r a r a }
    >>
    \oneVoice d d d d
    <<
      {\voiceOne  c r c r }
      \context Bottom = "2" {\voiceTwo r a r a}
    >>
    <<
      { c r c r }
      \\
      { r a r a}
    >>
    \oneVoice
    f f f f
  }
 
\score {
  \new StaffGroup <<
    \new Staff <<
    \clef "treble_8" \C
    >>
   
    \new TabStaff = "guitar tab"
      \C     
  >>
\layout {}
}

Der Bottom-context muß mit \context angegeben und benannt werden, sonst klappts nicht.

Dank an Keith O'Hara


HTH,
  Harm

buur

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #6 am: Samstag, 28. März 2015, 16:31 »
Hallo Harm,

vielen Dank das du dir so viel Mühe gemacht hast.


Da macht lilypond einen Fehler.

Nein, sondern das Verhalten ist intendiert.


Meist du damit das die Lilypond-Entwickler das verhalten so beabsichtigt haben?
Ich habe bis jetzt immer die von dir gezeigten Methoden 1 oder 2 benutzt (was ja auch immer gut funktioniert hat) weil mir in meinen Anfängertagen das voice- Kontext zu kompliziert war. Aber hatte immer gedacht das das voice-Konstrukt zu bevorzugen sei.
Wird ja auch in der Notationsreverenz so geschrieben und deswegen hätte ich jetzt auf einen Bug getippt.

Der Hintergrund warum ich auf das voice-Konstrukt umsteigen wollte, ist das Lilypond beim voice-Kontext ein etwas anders interpretiert, was mir aber nur aufgefallen ist wenn ich an der Lautstärke gedreht habe. Dazu mal ein kleines Beispiel:
\version "2.18.2"
\language "deutsch"

A = \relative c' {
            a^"A" b a\fffff b
  <<{  c' r c\ppppp r }\\{ r a r a}>>
}
B =  \relative c' \new Voice{\voiceOne
  a^"B" b a\fffff b
  <<{\voiceOne  c' r c\ppppp r }\new Voice{\voiceTwo r a r a}>>
  \oneVoice
  f f f f
}
\score {
\new StaffGroup <<
\new Staff <<
\clef "treble_8"
{\A \B}
>>

>>
\layout {}
\midi {}
}

Im Teil A hab ich die einfachen Polyphonie-Methode gewählt, bei B den Voice-Kontext.
Bei A geht die Lautstärke erst auf die Standardlaustärke zurück und nur eine Stimme wird leise. Das Verhalten wird so ja auch in der Notationsreverenz beschrieben.
Im Teil B übernehmen beide Stimmen die vorherige Lautstärke, werden beide leise und übergeben die Lautstärke auch an den letzten Takt. Dieses Verhalten ist nach meinen Verständnis richtig so. Man kann sagen das Lilypond im voice-Kontext die Musik richtiger interpretiert.

Bei der von dir gezeigten Möglichkeit 3 verhalten sich die Dynamiken leider wie im Fall A.

Ich werde dann wohl mal ein feature request an die Bug-Liste schicken und bis dahin die alternativen Konstrukte benutzen. MIDI ist ja nicht so wichtig und hört man eh kaum.

Vielen Dank nochmal für eure Hilfe und ein schönes Wochenende
buur

harm6

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #7 am: Sonntag, 29. März 2015, 15:28 »
Hallo buur,



Da macht lilypond einen Fehler.

Nein, sondern das Verhalten ist intendiert.


Meist du damit das die Lilypond-Entwickler das verhalten so beabsichtigt haben?
Ich habe bis jetzt immer die von dir gezeigten Methoden 1 oder 2 benutzt (was ja auch immer gut funktioniert hat) weil mir in meinen Anfängertagen das voice- Kontext zu kompliziert war. Aber hatte immer gedacht das das voice-Konstrukt zu bevorzugen sei.
Wird ja auch in der Notationsreverenz so geschrieben und deswegen hätte ich jetzt auf einen Bug getippt.

Es ist kein Bug, sondern beabsichtigt oder zumindest zu erwarten.
Wenn \new Voice vom TabStaff akzeptiert würde, sähest Du Noten (und nicht Zahlen) auf den Tabulaturlinien. Ähnlich wahrscheinlich mit TabVoice in Staff (hab ich aber nicht überprüft).
Also ist der default, daß TabStaff keine Voice akzeptier. Fügst Du doch eine ein, dann wird sie außerhalb gedruckt in einem neuen Staff.


Zum midi:
Tatsächlich ist auf meinem Rechner die Tonausgabe komplett defekt. (Ich vermute irgendwelche hardware/software Inkompatibilitäten.)
Da mir das midi aber vollkommen egal ist, hab ich mich noch nicht drum gekümmert. ;)

Nichtsdestotrotz sollte eigentlich folgendes zu dem von Dir gewünschten Ergebnis führen:

\version "2.18.2"
\language "deutsch"
%
% Bei A geht die Lautstärke erst auf die Standardlaustärke zurück
% und nur eine Stimme wird leise.
% Das Verhalten wird so ja auch in der Notationsreverenz beschrieben.
%
A =
\relative c' {
  a^"A" b a\fffff b
  <<
    { c' r c\ppppp r }
    \\
    { r a r a}
  >>
  a b a b
  \bar "||"
}

%
%Im Teil B übernehmen beide Stimmen die vorherige Lautstärke,
%werden beide leise und übergeben die Lautstärke auch an den letzten Takt.
%

B = 
\relative c'
\context Bottom = "main" {
  \voiceOne
  a^"B" b a\fffff b
  <<
    { \voiceOne  c' r c\ppppp r }
    \context Bottom = "2" { \voiceTwo r a r a }
  >>
  \oneVoice
  f f f f
}

\score {
  \new StaffGroup <<
    \new Staff <<
      \clef "treble_8"
      {
        \A
        \B
      }
    >>
    \new TabStaff <<
      {
        \A
        \B
      }
    >>
  >>
  \layout {}
  \midi {}
}

HTH,
  Harm

buur

  • Member
Re: Vorübergehende polyphone Passagen und Tabulatur
« Antwort #8 am: Montag, 30. März 2015, 00:22 »
Hallo Harm,

ich habs gerade noch mal getestet, aber in deinem Beispiel wird die Lautstärke zurückgesetzt sobald zwei Stimmen kommen.
Ist jetzt aber auch Jammern auf hohem Niveau, wichtig ist die MIDI-Ausgabe wirklich nicht.

Dir einen schönen Start in die Woche und vielen Dank nochmal.