Allgemein > Allgemeine Diskussion
Vorübergehende polyphone Passagen und Tabulatur
buur:
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
--- Code: ---\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 {}
}
--- Ende Code ---
fugenkomponist:
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
--- Code: ---<<
{ … }
\new Voice { … }
>>
--- Ende Code ---
zu erstellen, kannst du LilyPond fast die ganze Arbeit überlassen und das Konstrukt
--- Code: ---<<
{ … }
\\
{ … }
>>
--- Ende Code ---
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:
--- Code: ---\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 {}
}
--- Ende Code ---
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:
--- Code: ---\version "2.18.2"
\language "deutsch"
C = \relative c' {
<<
{ c d e f }
\new Voice { \voiceTwo a, h g a }
>>
}
\score {
\new TabStaff <<
\C
>>
}
--- Ende Code ---
Die Antwort auf deine Frage wäre dann entsprechend knapp und die Lösung unterscheidet sich nur in zwei Zeilen:
--- Code: ---\version "2.18.2"
\language "deutsch"
C = \relative c' {
<<
{ c d e f }
\\
{ a, h g a }
>>
}
\score {
\new TabStaff <<
\C
>>
}
--- Ende Code ---
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 ;)
trulli:
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.
--- Code: ---\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 {}
}
--- Ende Code ---
LG
buur:
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:
Hallo buur,
herzlich willkommen im Forum.
Zum Thema:
--- Zitat von: buur am Donnerstag, 26. März 2015, 23:02 ---Da macht lilypond einen Fehler.
--- Ende Zitat ---
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.
--- Code: ---\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
>>
>>
--- Ende Code ---
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:
--- Code: ---\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 {}
}
--- Ende Code ---
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
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln