@cindex adding custom fret diagrams
Fret diagrams can be added to the fret diagram table. To add a diagram,
-you must specify the chord for the diagram, the tuning to be used, and
-a definition for the diagram. The diagram definition can be either a
+you must specify the hash table for the diagram, the chord for the
+diagram, the tuning to be used, and
+a definition for the diagram. Normally, the hash table will be
+@var{default-fret-table}. The diagram definition can be either a
fret-diagram-terse definition string or a fret-diagram-verbose
marking list.
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
-\storePredefinedDiagram #default-fret-table \chordmode { c:maj9 }
+\storePredefinedDiagram #default-fret-table
+ \chordmode { c:maj9 }
#guitar-tuning
#"x;3-2;o;o;o;o;"
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
-\storePredefinedDiagram #default-fret-table \chordmode { c'' }
+\storePredefinedDiagram #default-fret-table
+ \chordmode { c'' }
#guitar-tuning
#(offset-fret 2 (chord-shape 'bes guitar-tuning))
% add some new chords based on the power chord shape
-\storePredefinedDiagram #default-fret-table \chordmode { f'' }
+\storePredefinedDiagram #default-fret-table
+ \chordmode { f'' }
#guitar-tuning
#(chord-shape 'powerf guitar-tuning)
-\storePredefinedDiagram #default-fret-table \chordmode { g'' }
+\storePredefinedDiagram #default-fret-table
+ \chordmode { g'' }
#guitar-tuning
#(offset-fret 2 (chord-shape 'powerf guitar-tuning))
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{chordchanges-for-fretboards.ly}
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{fretboards-alternate-tables.ly}
+
@seealso
Notation Reference:
Installed Files:
@file{ly/@/predefined@/-guitar@/-fretboards@/.ly},
-@file{ly/@/predefined@/-guitar@/-ninth@/-fretboards@/.ly}.
+@file{ly/@/predefined@/-guitar@/-ninth@/-fretboards@/.ly},
+@file{ly/@/predefined@/-ukulele@/-fretboards@/.ly}.
Snippets:
@rlsr{Fretted strings}.
@lilypond[quote,ragged-right,verbatim]
-\storePredefinedDiagram #default-fret-table <c e g c' e'>
+\storePredefinedDiagram #default-fret-table
+ <c e g c' e'>
#guitar-tuning
#"x;3-1-(;5-2;5-3;5-4;3-1-1-);"
<<
\include "predefined-guitar-fretboards.ly"
\storePredefinedDiagram #default-fret-table \chordmode { c' }
-
#guitar-tuning
#"x;1-1-(;3-2;3-3;3-4;1-1-);"
<<
In order to use an alternate fretboard table, the table must first
be created. Fretboards are then added to the table.
+The created fretboard table can be blank, or it can be copied
+from an existing table.
+
The table to be used in displaying predefined fretboards is selected
by the property @code{\predefinedDiagramTable}.
"
\include "predefined-guitar-fretboards.ly"
-#(define custom-fretboard-table-one (make-hash-table 101))
+% Make a blank new fretboard table
+#(define custom-fretboard-table-one (make-fretboard-table))
-#(define custom-fretboard-table-two (make-hash-table 101))
+% Make a new fretboard table as a copy of default-fret-table
+#(define custom-fretboard-table-two (make-fretboard-table default-fret-table))
+% Add a chord to custom-fretboard-table-one
\storePredefinedDiagram #custom-fretboard-table-one
\chordmode{c}
#guitar-tuning
"3-(;3;5;5;5;3-);"
+% Add a chord to custom-fretboard-table-two
\storePredefinedDiagram #custom-fretboard-table-two
\chordmode{c}
#guitar-tuning
<<
\chords {
- c1 |
- c1 |
- c1
+ c1 | d1 |
+ c1 | d1 |
+ c1 | d1 |
}
\new FretBoards {
\chordmode {
\set predefinedDiagramTable = #default-fret-table
- c1
+ c1 | d1 |
\set predefinedDiagramTable = #custom-fretboard-table-one
- c1
+ c1 | d1 |
\set predefinedDiagramTable = #custom-fretboard-table-two
- c1
+ c1 | d1 |
}
}
\new Staff {
\clef "treble_8"
- \chordmode {
- c1 |
- c1 |
- c1
- }
+ <<
+ \chordmode {
+ c1 | d1 |
+ c1 | d1 |
+ c1 | d1 |
+ }
+ {
+ s1_\markup "Default table" | s1 |
+ s1_\markup \column {"New table" "from empty"} | s1 |
+ s1_\markup \column {"New table" "from default"} | s1 |
+ }
+ >>
}
>>
\include "chord-repetition-init.ly"
+#(define default-fret-table (make-hash-table 101))
+#(define chord-shape-table (make-hash-table 29))
+
% declarations for standard directions
left = #-1
right = #1
escapedSmallerSymbol = #(make-span-event 'CrescendoEvent START)
-#(define default-fret-table (make-hash-table 100))
-#(define chord-shape-table (make-hash-table 100))
-
\include "scale-definitions-init.ly"
melisma = #(context-spec-music (make-property-set 'melismaBusy #t) 'Bottom)
#(define (chord-shape shape-code tuning)
(get-chord-shape shape-code tuning chord-shape-table))
+% scheme function for copying/creating fretboard tables
+
+#(define (make-fretboard-table . rest)
+ "Create a new fretboard table. @code{rest} is an optional table name.
+If present, the new fretboard table starts as a copy of the fretboard
+table @code{rest}."
+ (if (null? rest)
+ (make-hash-table 101)
+ (let ((source-table (car rest)))
+ (hash-fold
+ (lambda (key value tab)
+ (hash-set! tab key value)
+ tab)
+ (make-hash-table 101)
+ source-table))))
+
% music function for adding a predefined diagram to
% fretboard-table
storePredefinedDiagram =
-#(define-music-function (parser location
- fretboard-table chord tuning diagram-definition)
+#(define-music-function
+ (parser location fretboard-table chord tuning diagram-definition)
(hash-table? ly:music? pair? string-or-pair?)
(_i "Add predefined fret diagram defined by @var{diagram-definition}
for the chord pitches @var{chord} and the stringTuning @var{tuning}.")