Autor Thema: Jazz Changes ohne Notenzeilen  (Gelesen 3146 mal)

funkypunk

  • Member
Jazz Changes ohne Notenzeilen
« am: Samstag, 8. Juni 2013, 11:19 »
Hallo,

Ich möchte gerne mit Lilypond die Akkordfolgen von Jazzstücken so schreiben, wie es Ralph Patt im folgenden Link in seinem »Vanilla Book« macht, nur mit Lilypond-Akkordsymbolen und Taktstrichen statt mit Schreibmaschinenschrift:

http://www.ralphpatt.com/VB/a2.html

So weit bin ich inzwischen mittels eines Workarounds mit unsichtbaren Takten am Zeilenende und manuell gesetzten Taktstrichen am nächsten Zeilenanfang schon gekommen:

\version "2.16.0"

\header {
  tagline = ##f
}

\paper {
  #(set-paper-size "a4")
  indent = 0\mm
  top-margin= 20\mm
  right-margin = 25\mm
  left-margin = 25\mm
  bottom-margin = 10\mm
}

\new ChordNames \with {
  \consists "Bar_engraver"
 
}
\chordmode {
  { %\override Score.SpacingSpanner #'strict-note-spacing = ##t 
    \set Score.proportionalNotationDuration = #(ly:make-moment 1 8)
    \override ChordNames.BarLine #'bar-extent = #'(-2 . 2.5)
    \override ChordNames.ChordName #'font-size = #0
   
    \bar "|:"
    \set Score.repeatCommands = #'(start-repeat)
   
    es2 \set Score.automaticBars = ##te:dim f:m7 fis:dim
   
    es g:7 | as as:m |
   
    \set Score.automaticBars = ##f
    \time 1/128
    \once \override ChordName #'transparent = ##t
    c128
    \break
    \time 4/4
   
    \bar "|s"
    es2 \set Score.automaticBars = ##t c:7 | f:m7 bes:7 |
   
    \set Score.repeatCommands = #'((volta "1.") )
   
    g:7 c:7 | f:7 f4:m7 bes:7 \bar ":|"
   
    \set Score.repeatCommands = #'((volta #f) end-repeat)
   
    \set Score.automaticBars = ##f
    \time 1/128
    \once \override ChordName #'transparent = ##t
    c128
    \break
    \time 4/4
   
    \set Score.repeatCommands = #'((volta "2.") )
   
    \bar "|s"
    es2 \set Score.automaticBars = ##t as:m | es g:7 \bar "||"
   
    \set Score.repeatCommands = #'((volta #f) )
   
    \set Score.automaticBars = ##f
    \time 1/128
    \once \override ChordName #'transparent = ##t c128
    \break
    \time 4/4
   
    \bar "|s"
    \set Score.automaticBars = ##t c1:m | as:7 | f:7 | c:7 |
    }
}
\layout {
  #(layout-set-staff-size 15)
  ragged-right = ##t
  \context { \Score
    \remove "Bar_number_engraver"
  }
}

(Der Zeilenumbruch nach der Wiederholung des A-Teils ist Absicht, um die Struktur des Stückes deutlicher zu machen.)

Das schaut zwar schon passabel gut aus, aber der Code wird wahnsinnig unübersichtlich. Daher meine erste Frage: Wie kann ich Lilypond (bzw. den Bar_engraver) dazu bringen, am Anfang und am Ende jeder Zeile immer einenTaktstrich zu setzen, auch wenn dieser nur einfach ist und kein Wiederholungszeichen o. Ä.?

Und meine zweite Frage: Welche Möglichkeit gibt es, wirklich alle Taktstriche und Akkorde in der Darstellung exakt übereinander zu bekommen?

Und noch eine dritte Frage: Wie kann ich den Zeilenabstand verändern? Ich habe schon mit der VerticalAxisGroup auf Staff-Ebene experimentiert, aber es nicht hinbekommen.

Gruß Jörg


harm6

  • Member
Re: Jazz Changes ohne Notenzeilen
« Antwort #1 am: Samstag, 8. Juni 2013, 16:45 »
Hallo Jörg,

willkommen im Forum.

Für das was Dir vorschwebt ist LilyPond nicht unbedingt das beste tool.
LilyPond orientiert sich an den wunderschönen, handgefertigten Notendrucken des späten 19. und 20. Jahrhunderts.
Zu diesem Zweck wird ein sehr hoher Aufwand betrieben um das spacing diesen Vorbildern anzugleichen.

Dein Wunsch erfordert viele dieser Einstellungen abzuschalten bzw zu umgehen. Dies bringt durchaus einige Nachteile mit sich und ist auch nicht immer wirklich zufriedenstellend möglich.

Im einzelnen:
Taktstriche
Zitat
So weit bin ich [...] mit unsichtbaren Takten am Zeilenende und manuell gesetzten Taktstrichen am nächsten Zeilenanfang schon gekommen:
...
Das schaut zwar schon passabel gut aus, aber der Code wird wahnsinnig unübersichtlich. Daher meine erste Frage: Wie kann ich Lilypond (bzw. den Bar_engraver) dazu bringen, am Anfang und am Ende jeder Zeile immer einenTaktstrich zu setzen, auch wenn dieser nur einfach ist und kein Wiederholungszeichen o. Ä.?

Der Bar_engraver schaut welches glyph er benutzen soll. Die möglichen glyphs (sowie deren Verhalten beim Zeilenumbruch) sind in `bar-glyph-alist' in /scm/bar-line.scm aufgelistet. (v2.16)
Allerdings gibt es kein glyph welches einen einfachen Taktstrich am Zeilenende und am Zeilenanfang ausgibt. Für das Wiederholungszeichen gilt entsprechendes.
In 2.16 ein solches Verhalten zu programmieren ist ein Alptraum.
In 2.17.19 allerdings recht problemlos via   
   \defineBarLine ...
(Patch von Marc Hohl, meine Wenigkeit war auch nicht unbeteiligt :) Tatsächlich ist das auch schon in früheren devel-Versionen erhältlich, ich hab' aber vergessen ab wann genau.)
Danach kann man diese neuen Taktstricharten als den default festlegen via:
    defaultBarType = ...
    endRepeatType = ...
Falls man so vorgeht entfällt das rumeiern mit
    \set Score.automaticBars = ##t
und der workaround
    \time 1/128
    \once \override ChordName #'transparent = ##t c128
Man kann sich die Sache mit
    \set Score.repeatCommands
sparen und das einfachere \repeat volta ... bzw \alternative ... benutzen.

Vertikale Ausrichtung
Zitat
Und meine zweite Frage: Welche Möglichkeit gibt es, wirklich alle Taktstriche und Akkorde in der Darstellung exakt übereinander zu bekommen?
Ich habe zusätzlich noch eingefügt:
    \override NonMusicalPaperColumn #'padding = #1.5
    \override ChordName #'X-extent = #'(0 . 0)
Darüberhinaus ist noch ein manueller Eingriff nötig beim startenden Wiederholungszeichen:
    \once \override Score.BarLine.X-extent = #'(0 . 0.15)

Nichtdestotrotz stimmt die vertikale Ausrichtung nicht mehr, falls Du die Takte voller machst, also z.b. mehrere Achtel-Akkorde einfügst.
Vielleicht kann man da noch am SpacingSpanner rumschrauben. Ich bin mir jedoch nicht sicher, ob man zu einer Lösung kommen kann die in jedem Fall funktioniert.

Auch ist das Ganze jetzt wesentlich kollisionsanfälliger geworden.

EDIT:
Ich habe mir jetzt noch anderes von Ralph Patt angeschaut: Wenns komplizierter wird dann stimmt die vertikale Ausrichtung dort auch nicht mehr.

Zeilenabstand
Zitat
Und noch eine dritte Frage: Wie kann ich den Zeilenabstand verändern? Ich habe schon mit der VerticalAxisGroup auf Staff-Ebene experimentiert, aber es nicht hinbekommen.

Das geht mit
system-system-spacing #'basic-distance = #10
in \paper

Code:
\version "2.17.19"

\defineBarLine ":|.-cn" #'(":|." "|" " |.")
\defineBarLine "|-cn" #'("|" "|" "|")
\defineBarLine "||-cn" #'("||" "|" "||")

myChordNamesLayout =
\layout {
#(layout-set-staff-size 15)
ragged-right = ##t
%line-width = 16\cm
\context {
\Score
\remove "Bar_number_engraver"
proportionalNotationDuration = #(ly:make-moment 1/8)
defaultBarType = #"|-cn"
endRepeatType = #":|.-cn"
\override NonMusicalPaperColumn #'padding = #1.5
%\override NonMusicalPaperColumn #'line-break-permission = ##f
}
\context {
\ChordNames
\consists "Bar_engraver"
\override BarLine #'bar-extent = #'(-2 . 2.5)
\override ChordName #'font-size = #0
\override ChordName #'X-extent = #'(0 . 0)
}

}

\header {
  tagline = ##f
}

\paper {
  indent = 0\mm
  top-margin= 20\mm
  right-margin = 25\mm
  left-margin = 25\mm
  bottom-margin = 10\mm
  system-system-spacing #'basic-distance = #10
}
chrds =
\chordmode {
    \once \override Score.BarLine.X-extent = #'(0 . 0.15)
    \bar ".|:"
    \repeat volta 2 {
        es2 e:dim f:m7 fis:dim
        es g:7 | as as:m | \break
        es2  c:7 | f:m7 bes:7 |
    }
    \alternative {
        { g:7 c:7 | f:7 f4:m7 bes:7 \break }
        { es2  as:m | es g:7 \bar "||-cn" \break }
    }
    c1:m | as1:7 | f:7 | c:7 | \bar "|."
}

\score {
\new ChordNames \chrds
\layout { \myChordNamesLayout }
}

Bitte beachte: Ich habe 2.17.19 und die entsprechende Syntax benutzt.
Bild im Anhang.


HTH,
  Harm
« Letzte Änderung: Samstag, 8. Juni 2013, 16:55 von harm6 »

trulli

  • Member
Re: Jazz Changes ohne Notenzeilen
« Antwort #2 am: Sonntag, 9. Juni 2013, 01:51 »
Hallo Jörg,

den Ansatz verstehe ich nicht. Mit einer einfachen Textverarbeitung und einer erweiterten Zeichentabelle bekommst du doch ohne viel Arbeit das gleiche Ergebnis...
Dein Beispiel lässt sich mit jeder proportionalen Schriftart umsetzen. Finde ich übrigens auch besser lesbar als die Lily-Akkordsymbole.

Gruß

funkypunk

  • Member
Re: Jazz Changes ohne Notenzeilen
« Antwort #3 am: Sonntag, 9. Juni 2013, 20:42 »
Hallo,

vielen Dank für Eure Bemühungen.


@Harm:

Sieht super aus – genau das, was ich mir vorgestellt habe. Vielleicht sollte ich tatsächlich mal eine Dev-Version benutzen. Frescobaldi kann ja meines Wissens mehrere unterschiedliche Lilypond-Versionen verwenden.

@trulli:

Mein erster Gedanke war tatsächlich mit Tabellen oder Tab-Stops in einer Textverarbeitung zu arbeiten. Die Lesbarkeit der Lilypond-Akkordsymbole ist vermutlich Geschmackssache – ich finde sie sehr gut lesbar und sehr professionell ausehend. Das einzige, was mir nicht gefällt, sind die Zeichen, die für die Verminderten und Halbverminderten verwendet werden, bzw. die Tatsache dass diese sehr unterschiedlich aussehen.

(Viele Leute fahren auf diese an amerikanische Handschriften aus den Real Books angelehnte Fonts ab, es gibt ja in diesem Forum sogar eine Initiave für so einen Font für Lilypond. Mir persönlich gefallen solche Schriften überhaupt nicht, sie widersprechen IMHO dem Grundgedanken des ästhetischen Notensatzes mit Lilypond. Wieso sollte ich jemanden imitieren, der an einem Lineal entlang schreiben muss, damit er eine gerade Zeile erhält? Ich finde die Real-Book-Akkorde sehr unleserlich – ganz abgesehen davon, dass anscheinend viele Fehler enthalten sind. End of rant – zurück zum Thema). 

Ich arbeite gerade an didaktischem Material zur Jazzharmonik. Ich will, dass die Symbole in den Akkordfolgen so aussehen wie die in den Notenbeispielen, die ich in Lilypond mache. Eine Textverarbeitung hätte den Vorteil, dass ich sehr einfach in die nächste Zeile eine Analyse mit römischen Ziffern ("ii-V" u. Ä.) schreiben könnte. Ganz so einfach ist die Sache aber leider überhaupt nicht:

Ich will auf jeden Fall die Versetzungszeichen aus dem Feta-Font verwenden, die in Unicode vorhandenen (Meintest du das mit erweitertem Zeichensatz?) sind häßlich – nicht umsonst ist das B-Zeichen aus Lilypond hier groß abgebildet: http://lilypond.org/introduction.de.html. Das gleiche (häßlich) gilt für alle speziellen Musikfonts, die ich gefunden habe. Wenn ich nun aber das Kreuz oder das B aus feta oder Emmentaler verwenden will, wozu ich jedesmal die Schrift wechseln muss, sind diese im Vergleich viel zu klein und sitzen an der falschen Stelle. Die hochgestellten Ziffern sind zu klein und zu hoch, die Versetzungszeichen sind hier viel zu klein, ich muss also jedes Akkordsymbol manuell anpassen, LibreOffice übernimmt anscheinend beim Kopieren Formatierungen wie "hochgestellt" nicht automatisch. Und wie bekomme ich die Taktstriche, Wiederholungszeichen und Voltaklammern her?

Herzliche Grüße

Jörg




Be-3

  • Member
Re: Jazz Changes ohne Notenzeilen
« Antwort #4 am: Sonntag, 9. Juni 2013, 23:40 »
Frescobaldi kann ja meines Wissens mehrere unterschiedliche Lilypond-Versionen verwenden.

Hallo Jörg,

ja, kann es. Die automatische Auswahl der passenen Version anhand der \version-Angabe im Quellcode ist hervorragend gelöst.


Das einzige, was mir nicht gefällt, sind die Zeichen, die für die Verminderten und Halbverminderten verwendet werden, bzw. die Tatsache dass diese sehr unterschiedlich aussehen.

Das ist in der Tat etwas unschön, läßt sich aber leicht beheben.

Grund für die unterschiedliche Darstellung von verminderten und halbverminderten Akkorden:
Diese Akkorde sind als Ausnahmedefinitionen (chordNameException-Markup) realisiert, und zwar dummerweise so, daß für den Vermindert-"Kringel" ;) der Buchstabe "o" mit \super verkleinert hochgestellt wird, beim halbverminderten Akkord entsprechend der Buchstabe "ø" allerdings mit \normal-size-super, also in normaler Größe!

relevante Standard-Ausnahmedefinitionen:
  <c es ges>-\markup { \super "o" } % should be $\circ$ ?
  <c es ges bes>-\markup { \normal-size-super #(ly:wide-char->utf-8 #x00f8) }
  <c es ges beses>-\markup { \super  "o7" }


Je nachdem, ob Du lieber o größer oder ø kleiner hättest, kannst Du das aber ändern, z. B. so:

\version "2.16.0"

chExceptionMusicA = {
 <c es ges bes>-\markup { \super #(ly:wide-char->utf-8 #x00f8) }
}

% Convert music to list and prepend to existing exceptions.
chExceptionsA = #( append
  ( sequential-music-to-chord-exceptions chExceptionMusicA #t)
  ignatzekExceptions)

chExceptionMusicB = {
 <c es ges>1-\markup { \normal-size-super "o" }
 <c es ges beses>-\markup { \normal-size-super "o" \super "7" }
}

% Convert music to list and prepend to existing exceptions.
chExceptionsB = #( append
  ( sequential-music-to-chord-exceptions chExceptionMusicB #t)
  ignatzekExceptions)


\chords {
  % Original
  c1:dim c:dim7 c:m7.5- s
  % o kleiner
  \set chordNameExceptions = #chExceptionsA
  c1:dim c:dim7 c:m7.5- s
  % o größer
  \set chordNameExceptions = #chExceptionsB
  c1:dim c:dim7 c:m7.5- s
}

Abgesehen davon habe ich den Eindruck, daß sich mittlerweile andere Schreibweisen, wie beispielsweise C-7b5, etablieren, dann hätte man das Kringelproblem auch umschifft. ;)

Viele Grüße
Torsten

harm6

  • Member
Re: Jazz Changes ohne Notenzeilen
« Antwort #5 am: Montag, 10. Juni 2013, 00:26 »
Zitat von: Torsten
Diese Akkorde sind als Ausnahmedefinitionen (chordNameException-Markup) realisiert, und zwar dummerweise so, daß für den Vermindert-"Kringel" der Buchstabe "o" mit \super verkleinert hochgestellt wird, beim halbverminderten Akkord entsprechend der Buchstabe "ø" allerdings mit \normal-size-super, also in normaler Größe!

Hallo Torsten,

tatsächlich sind auch die anderen Akkorde aus /ly/chord-modifiers-init.ly mal mit \super ... mal mit \normal-size-super ... gebaut.
Kannst Du Dir vorstellen warum?
In issue 3314 geht es auch um sowas.

Gruß,
  Harm

Be-3

  • Member
Re: Jazz Changes ohne Notenzeilen
« Antwort #6 am: Montag, 10. Juni 2013, 13:40 »
Kannst Du Dir vorstellen warum?

Nein. Keinen blassen Schimmer.

Alles, was mir dazu einfällt, ist: die "großen" Zahlen 2/4/5 gehören nicht zu der üblichen Terzschichtungs-Optionstönen 7/9/11/13.
Sonderlich gelungen finde ich diese Unterscheidung aber nicht.

Ganz allgemein sind mir bei den LilyPond-Standard-Akkordsymbolen aber die hochgestellten Zeichen zu hochgestellt und zu klein. Das mag für Pop- und Volksliedgut passen, für Jazz dürfte es etwas deutlicher sein.
Das Ausmaß der Hochstellung läßt sich ja über ChordName #'baseline-skip beeinflussen (das ist eigentlich völliger Mumpitz, aber so etwas wie eine x-Höhe gibt es ja nicht),
der Schriftgrad ist im Ignatzek aber ziemlich unflexibel, gelinde gesagt, denn er ist bei \super immer 3 Stufen kleiner als die sonstige Fontgröße.

Viele Grüße
Torsten