fret-diagram für Banjo

Begonnen von eichhofener, Samstag, 11. Juli 2020, 02:02

« vorheriges - nächstes »

eichhofener

Liebe Experten!
In meine Banjo-Tabulaturen nehme ich bisweilen Bunddiagramme auf.
Beim 5-saitigen Banjo ist ja die 5. Saite verkürzt sie beginnt erst am 5. Bund der anderen Saiten.
Demnach sollten Bunddiagramme etwa so ausschauen (siehe unten)

Ich wollte mal nachfragen, ob das der bisherige Code für die fret-diagramme schon kann?
Ansonsten würde ich mich vielleicht mal in den scheme-code in scm/fret-diagram.scm unverbindlich hineinknien
(den ich jetzt aber noch nicht überschaue, sonst könnte ich ja die Frage selbst klären).

Vielen Dank!
~uwe

PS: bislang helfe ich mir mit 4saitigen Diagrammen, die 5. Saite wird eigentlich eh nie gegriffen. Aber vollständige Diagramme würden halt schicker aussehen.

harm6

Hallo Uwe,

wie Du an der überwältigenden Zahl der Antworten ermessen kannst ist das Problem alles andere als trivial.
Ich fürchte man müßte fret-diagram.scm in vielen Punkten völlig neu schreiben, dazu fehlt mir die Zeit.
Aber wenn Du's angehen willst, vermag ich vielleicht den ein oder anderen Hinweis zu geben.

Gruß,
  Harm

P.S. ein solches Griffdiagramm habe ich noch nie gesehen, aber ich spiele das Instrument auch nicht...

eichhofener

Hallo harm,
vielen Dank für Deine Antwort. Vielleicht ergibt sich im August mal ein regnerisches Wochenende und ich modifiziere fret-diagram.scm entsprechend.
Falls was draus wird, würde ich Dich anschreiben, ob das gemerged werden soll.
Ich verstehe, dass das aus allgemeiner Sicht kein hochdringendes Feature ist  :D. Das 5-saitige Banjo mit dem Drone-String ist eigentlich schon etwas sonderbar.

Viele Grüße
uwe

Schneider

#3
Hallo Uwe,
Vielleicht mit einer manuellen Definition, e.g.
\version "2.20.0"

%%% Defs %%%
frtBrd = \markup
  \override #'(line-cap-style . butt) {
    \combine\path #.2
      #'((moveto .95 0)(lineto 4.05 0))
    \combine\path #.1
      #'((moveto 1 -1)(lineto 4 -1)
         (moveto 1 -2)(lineto 4 -2)
         (moveto 1 -3)(lineto 4 -3)
         (moveto 1 -4)(lineto 4 -4)
         (moveto 1 -5)(lineto 4 -5))
    \combine\path #.2
      #'((moveto -.05 -5)(lineto 1 -5))
    \path #.1
      #'((moveto 0 -5)(lineto 0 -6)
         (moveto 1  0)(lineto 1 -6)
         (moveto 2  0)(lineto 2 -6)
         (moveto 3  0)(lineto 3 -6)
         (moveto 4  0)(lineto 4 -6))
  }
 
mut = \markup\sans\bold\fontsize #-8 "X"
opn = \markup\draw-circle #.3 #.1 ##f
pos = \markup\draw-circle #.3 #0 ##t

chord =
-\tweak self-alignment-X #CENTER
-\tweak parent-alignment-X #CENTER
-\markup
  \combine \frtBrd
  \combine \translate #'(0 . -4.4) \opn
  \combine \translate #'(2 .  0.6) \opn
  \combine \translate #'(1 . -1.5) \pos
  \combine \translate #'(3 . -0.5) \pos
  \combine \translate #'(3.7 .  0.3) \mut
  \null

%%%%%%%%

%% Test:

{ c'1^\chord }




Gruß
Pierre

harm6

Hallo Uwe,

ich hab' heute doch ein wenig Zeit gefunden.

Im Anhang das angepaßte fret-diagrams.scm. Allerdings ist das erst ein Anfang, ich erwarte Deinen Bericht über zu glättende Kanten und sonstige Bugs. ;)

Bis das alles ausgebügelt ist, hat Pierre ja einen Weg gezeigt.

Hier noch mein kleiner Testcode fürs neue fret-diagrams.scm:


mus = {
  \time 5/4
  g'\5
  c
  g
  b
  d'
  |
  gis'\5
  cis
  gis
  c'
  dis'
}

<<
  \new FretBoards
    \with {
      stringTunings = #banjo-c-tuning %gCGBD <g' c g b d'>
      \override FretBoard.fret-diagram-details =
        #'((suspend . (5 . 4))
           (fret-count . 6))
    }
    \mus
  \new Staff
    { \clef "G_8" \mus }
>>

\markup
      \override #`(fret-diagram-details . ((string-count . 5)
                                           (fret-count . 6)
                                           (suspend . (5 . 4))))
      \fret-diagram-verbose
        #'((open 5)
           (place-fret 4 3)
           (place-fret 3 2)
           (place-fret 2 1)
           (open 1))


Gruß,
  Harm

eichhofener

Hi Harm!
Vielen Dank, das ist großartig!

Sorry, dass ich einige Zeit nicht ins Forum geschaut habe.
Einen Bug habe ich schon entdeckt: Bei Bunddiagrammen, die nicht mit dem 1. Bund beginnen ( fret-range x y mit x>1 ) wurden weiterhin 5 Bünde verkürzt gezeichnet (so als ob des Diagramm ab Bund 1 gezeichnet wäre).

Ich habe den Code schon entsprechend angepasst. Siehe Attachment.
Deine Änderungen haben mich direkt auf die relevanten Stellen gelenkt. Ohne Deinen Input wäre mir das kaum gelungen.

Die Funktion fret-stencil habe ich ein bisschen überarbeitet, denn ich fand, die Sonderbehandlung für landscape / reversed landscape, die Du wegen dem suspend-string eingefügt hast, wird ja eigentlich schon von der Funktion stencil-coordinates erledigt. Ich habe also die String-Koordinaten vor der Umrechnung in stencil-Koordinaten angepasst. Ich hoffe, das ist okay.

Willst Du eigentlich, dass die Änderungen wieder in die Codebase zurückfließen?
Dann müsste man vielleicht überlegen, ob die Änderung etwas generischer ausgelegt werden müsste, so dass beliebige und mehrere Saiten verkürzt sein können. Aber ob man das in der Realität auch braucht?

In diesem Zusammenhang: Ich habe zuerst nicht kapiert, wozu die Funktion string-thickness dient. Es wird eine Saitenstärke berechnet, die exponentiell mit der Saitennummer wächst. Offenbar wird hier die tatsächliche Saitenstärke modelliert.
Beim Banjo passt das leider wieder nicht, weil die 5. Saite wieder so dünn wie die 1. Saite ist...

In der Summe bräuchte man wohl dann eine Liste mit "string-properties".

Weiter Anmerkung:
Bei den Strings sind ja offenbar drei Zählweisen im Spiel:
1. String-Nr ("von rechts nach links")
2. String-Koordinate ("von links nach rechts")
3. Stencil-Koordinate (unter Berücksichtigung der Orientierung landscape etc)
ich habe den Eindruck, die mittlere Darstellung sollte man rausschmeißen und stencil-coordinates sollte gleich von string-nr in stencil-koord. umrechnen.
... könnte ich evtl machen.

Viele Grüße
Uwe

PS:
Hier meine Testumgebung


\version "2.19.82"
\language "english"

musicBanjo =
{
  \tabFullNotation
 
  \override TextScript.size = #1.5
 
  #(ly:load "x11-color.scm")
  #(ly:load "/home/uwe/Dokumente/Musik/bin/fretboardbanjo/fret-diagrams.scm")
 
 
  \time 4/4
  \key g \major

  \override TextScript.fret-diagram-details = 
  #'( (suspend . (5 . 5))
      (fret-count . 10)
      (finger-code . in-dot)
      (dot-radius . 0.4)
      (fret-distance . 1.2))
 
  <> ^\markup \fret-diagram-terse "x;3;2;1;3;"
  <f a c' f'>4 r2.
 
  <> ^\markup \fret-diagram-terse "o;o;10-3;8-1;o;"
  f'4\3 g'\2 r2
 
  <> ^\markup \fret-diagram-terse "o;o;9-2;8-1;9-3;"
  e'4\3 g'\2 b'\1 r
 
  <> ^\markup \fret-diagram-terse "o;o;o;11-3;9-1;"
  as'4\2 b'\1 r2

  <> ^\markup \fret-diagram-terse "x;6;4;5;6;"
  <gs b e' gs'>4 r2.

  \override TextScript.fret-diagram-details = 
  #'( (suspend . (5 . 5))
      (fret-count . 5)
      (finger-code . in-dot)
      (dot-radius . 0.4)
      (fret-distance . 1.2))
 
  <> ^\markup \fret-diagram-terse "x;3;2;1;3;"
  <f a c' f'>4 r2.
 
  <> ^\markup \fret-diagram-terse "o;o;10-3;8-1;o;"
  f'4\3 g'\2 r2
 
  <> ^\markup \fret-diagram-terse "o;o;9-2;8-1;9-3;"
  e'4\3 g'\2 b'\1 r
 
  <> ^\markup \fret-diagram-terse "o;o;o;11-3;9-1;"
  as'4\2 b'\1 r2

  <> ^\markup \fret-diagram-terse "x;6;4;5;6;"
  <gs b e' gs'>4 r2.
 
  \override TextScript.fret-diagram-details = 
  #'( (suspend . (5 . 5))
      (fret-count . 10)
      (finger-code . in-dot)
      (dot-radius . 0.4)
      (fret-distance . 1.2)
      (string-thickness-factor . 1.1))
 
  <> ^\markup \fret-diagram-terse "x;3;2;1;3;"
  <f a c' f'>4 r2.
 
  <> ^\markup \fret-diagram-terse "o;o;10-3;8-1;o;"
  f'4\3 g'\2 r2
 
  <> ^\markup \fret-diagram-terse "o;o;9-2;8-1;9-3;"
  e'4\3 g'\2 b'\1 r
 
  <> ^\markup \fret-diagram-terse "o;o;o;11-3;9-1;"
  as'4\2 b'\1 r2

  <> ^\markup \fret-diagram-terse "x;6;4;5;6;"
  <gs b e' gs'>4 r2.


}
 
\score
{
  \new TabStaff = main \with { stringTunings = \stringTuning <g' d g b d'> }
    \musicBanjo
}



harm6

Hallo Uwe,

ZitatWillst Du eigentlich, dass die Änderungen wieder in die Codebase zurückfließen?

In einem Wort: ja!

Allerdings ist mir bei der Arbeit an fret-diagrams.scm aufgefallen, daß dieses file doch mal überarbeitet werden sollte.
Dazu zwei patches:
https://gitlab.com/lilypond/lilypond/-/merge_requests/269
https://gitlab.com/lilypond/lilypond/-/merge_requests/288
Der erste ist bereits durch, der zweite (hoffentlich) bald.
Beide fügen (außer zwei Warnungen) nichts hinzu, sondern räumen nur auf, strukturieren neu, ändern Verfahren, etc.
In der Folge ist das Ganze 5% schneller geworden, was auch nicht so übel ist.
Als Test habe ich alle fretdiagram-relevanten regtests 10x kompiliert.

Deine Anmerkungen bzgl string-thickness und string/stencil-Nummer/Koordinaten werde ich mir durch den Kopf gehen lassen und möglicherweise einen weiteren cleanup-patch folgen lassen.

Ich finde halt, bevor man neue Funktionalität hinzufügt ist Aufräumen sinvoll ;)

Deine eigenen Änderungen habe ich mir allerdings noch nicht angeschaut.

Falls ich Zeit finde...


Gruß,
  Harm



eichhofener

Hallo Harm,

gut zu wissen, dass diese Quellcodedatei gerade in Bearbeitung ist.
Ich habe noch ein paar Punkte, die ich dennoch (zunächst für meine eigenen Belange) noch ändern will:

  • Die Sattellinie sollte auch für einen suspended String verstärkt gezeichnet werden
  • Der "xo-Marker" sollte für einen suspended String nach unten versetzt werden
  • Das ist eigentlich schon wieder ein feature: Für den Fall, dass ein fret-range nötig wird, sollte man einen optionalen Parameter fret-range-from vorgeben können. Grifffolgen, die aufeinander aufbauen kriegen sonst jedesmal einen anderen fret-range und sind dadurch nicht mehr gut vergleichbar.

Wie gesagt: Ich ändere das mal für meine Belange und stelle es hier rein.
Ich könnte dann auch später wenn gewünscht einen rebase auf die dann gültige Version machen.
Da ich aber überhaupt keine Ahnung vom lilypond config-management habe, wäre es prima, wenn Du mir sagen könntest, wann der richtige Zeitpunkt dafür wäre.

Viele Grüße
Uwe