X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fpredefined-fretboards-init.ly;h=acf116dd691b4069c15ce1158031742bee57422a;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=587d7f37e631a03d87c395e8a91fe168df419501;hpb=db1b4bee7d0792351e368e776f197b1bca7050cb;p=lilypond.git diff --git a/ly/predefined-fretboards-init.ly b/ly/predefined-fretboards-init.ly index 587d7f37e6..acf116dd69 100644 --- a/ly/predefined-fretboards-init.ly +++ b/ly/predefined-fretboards-init.ly @@ -1,481 +1,77 @@ -%%%% predefined-fretboard-init.ly +%%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% source file of the GNU LilyPond music typesetter +%%%% Copyright (C) 2008--2015 Carl D. Sorensen %%%% -%%%% (c) 2008 Carl D. Sorensen - -%%%%% define storage structures - -% base-chord-shapes is an alist of chord shapes -% in the form of fret-diagram-terse strings with -% scheme symbols as keys. For convenience, the -% symbols are LilyPond chordmode chord descriptions, +%%%% LilyPond is free software: you can redistribute it and/or modify +%%%% it under the terms of the GNU General Public License as published by +%%%% the Free Software Foundation, either version 3 of the License, or +%%%% (at your option) any later version. +%%%% +%%%% LilyPond is distributed in the hope that it will be useful, +%%%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%%%% GNU General Public License for more details. +%%%% +%%%% You should have received a copy of the GNU General Public License +%%%% along with LilyPond. If not, see . + +\version "2.19.22" + +% chord-shape-table is a hash-table of chord shapes +% in the form of diagram-descriptions that can be +% fret-diagram-verbose markup-llsts or +% fret-diagram-terse strings. +% The hash keys are pairs of scheme symbols and +% string tunings. For convenience, the symbols in +% this file are LilyPond chordmode chord descriptions, % but that is unnecessary. -#(define base-chord-shapes - (list - '(f . "1-1-(;3-3;3-4;2-2;1-1;1-1-);") - '(f:m . "1-1-(;3-3;3-4;1-1;1-1;1-1-);") - '(f:7 . "1-1-(;3-3;1-1;2-2;1-1;1-1-);") - '(f:m7 . "1-1-(;3-3;1-1;1-1;1-1;1-1-);") - '(bes . "x;1-1-(;3-2;3-3;3-4;1-1-);") - '(bes:m . "x;1-1-(;3-3;3-4;2-2;1-1-);") - '(bes:m7 . "x;1-1-(;3-3;1-1;2-2;1-1-);") - '(bes:7 . "x;1-1-(;3-2;1-1;3-3;1-1-);") - '(bes:maj7 . "x;1-1;3-3;2-2;3-4;x;") - '(c:dim . "x;x;1-1;2-3;1-2;2-4;") - '(c:aug . "x;x;2-2;1-1-(;1-1-);4-4;") - '(cis . "x;x;3-3;1-1-(;2-2;1-1-);") - '(ees:dim . "x;x;1-1;2-3;1-2;2-4;") - '(a:dim . "x;x;1-1;2-3;1-2;2-4;") - )) - - % music function for adding a chord shape to -% base-chord-shapes +% chord-shape-table addChordShape = -#(define-music-function (parser location shape-pair) - (pair?) - (set! base-chord-shapes (acons - (car shape-pair) - (cdr shape-pair) - base-chord-shapes)) - (make-music 'SequentialMusic 'void #t)) - +#(define-void-function (key-symbol tuning shape-definition) + (symbol? pair? string-or-pair?) + (_i "Add chord shape @var{shape-definition} to the @var{chord-shape-table} +hash with the key @code{(cons @var{key-symbol} @var{tuning})}.") + (hash-set! chord-shape-table + (cons key-symbol tuning) + shape-definition)) + +#(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 chord tuning terse-definition) - (ly:music? list? string?) - (let* ((pitches (event-chord-pitches +#(define-void-function + (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}.") + (let* ((pitches (event-chord-pitches (car (extract-named-music chord 'EventChord)))) - (hash-key (cons tuning pitches))) - (hash-set! fretboard-table - hash-key - (parse-terse-string terse-definition))) - (make-music 'SequentialMusic 'void #t)) - - -% for convenience, to eliminate storage list in .ly references - -#(define (chord-shape shape-code) - (get-chord-shape shape-code base-chord-shapes)) - -#(define predefined-diagram-table fretboard-table) - -%%%%%%%%%%%%%%%%%%%%%%% -%%% - -% definitions of predefined diagrams below here - -%%%% c chords -% -\storePredefinedDiagram \chordmode {c} - #guitar-tuning - #"x;3-3;2-2;o;1-1;o;" -\storePredefinedDiagram \chordmode {c:m} - #guitar-tuning - #(offset-fret 2 (chord-shape 'bes:m)) -\storePredefinedDiagram \chordmode {c:aug} - #guitar-tuning - #(chord-shape 'c:aug) -\storePredefinedDiagram \chordmode {c:dim} - #guitar-tuning - #(chord-shape 'c:dim) -\storePredefinedDiagram \chordmode {c:7} - #guitar-tuning - #"o;3-3;2-2;3-4;1-1;o;" -\storePredefinedDiagram \chordmode {c:maj7} - #guitar-tuning - #"x;3-3;2-2;o;o;o;" -\storePredefinedDiagram \chordmode {c:m7} - #guitar-tuning - #(offset-fret 2 (chord-shape 'bes:m7)) - -%%%% cis chords -% -\storePredefinedDiagram \chordmode {cis} - #guitar-tuning - #(chord-shape 'cis) -\storePredefinedDiagram \chordmode {cis:m} - #guitar-tuning - #"x;x;2-2;1-1;2-3;o;" -\storePredefinedDiagram \chordmode {cis:aug} - #guitar-tuning - #"x;4-4;3-3;2-1;2-2;x;" -\storePredefinedDiagram \chordmode {cis:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'c:dim)) -\storePredefinedDiagram \chordmode {cis:7} - #guitar-tuning - #"x;x;3-2;4-3;2-1;4-4;" -\storePredefinedDiagram \chordmode {cis:maj7} - #guitar-tuning - #"x;4-4;3-3;1-1-(;1-1;1-1-);" -\storePredefinedDiagram \chordmode {cis:m7} - #guitar-tuning - #"x;4-4;2-2;1-1;o;o;" - -%%%% des chords -% -\storePredefinedDiagram \chordmode {des} - #guitar-tuning - #"x;x;3-3;1-1-(;2-2;1-1-);" -\storePredefinedDiagram \chordmode {des:m} - #guitar-tuning - #"x;x;2-2;1-1;2-3;o;" -\storePredefinedDiagram \chordmode {des:aug} - #guitar-tuning - #"x;4-4;3-3;2-1;2-2;x;" -\storePredefinedDiagram \chordmode {des:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'c:dim)) -\storePredefinedDiagram \chordmode {des:7} - #guitar-tuning - #"x;x;3-2;4-3;2-1;4-4;" -\storePredefinedDiagram \chordmode {des:maj7} - #guitar-tuning - #"x;4-4;3-3;1-1-(;1-1;1-1-);" -\storePredefinedDiagram \chordmode {des:m7} - #guitar-tuning - #"x;4-4;2-2;1-1;o;o;" - -%%%% d chords -% -\storePredefinedDiagram \chordmode {d} - #guitar-tuning - #"x;x;o;2-1;3-2;2-3;" -\storePredefinedDiagram \chordmode {d:m} - #guitar-tuning - #"x;x;o;2-2;3-3;1-1;" -\storePredefinedDiagram \chordmode {d:aug} - #guitar-tuning - #"x;x;o;3-2;3-3;2-1;" -\storePredefinedDiagram \chordmode {d:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {d:7} - #guitar-tuning - #"x;x;o;2-2;1-1;2-3;" -\storePredefinedDiagram \chordmode {d:maj7} - #guitar-tuning - #"x;x;o;2-1;2-2;2-3;" -\storePredefinedDiagram \chordmode {d:m7} - #guitar-tuning - #"x;x;o;2-2;1-1-(;1-1-);" - -%%%% dis chords -% -\storePredefinedDiagram \chordmode {dis} - #guitar-tuning - #(offset-fret 2 (chord-shape 'cis)) -\storePredefinedDiagram \chordmode {dis:m} - #guitar-tuning - #"x;x;4-3;3-2;4-4;1-1;" -\storePredefinedDiagram \chordmode {dis:aug} - #guitar-tuning - #"3-3;2-2;1-1;o;o;3-4" -\storePredefinedDiagram \chordmode {dis:dim} - #guitar-tuning - #(chord-shape 'ees:dim) -\storePredefinedDiagram \chordmode {dis:7} - #guitar-tuning - #"x;x;1-1;3-3;2-2;3-4;" -\storePredefinedDiagram \chordmode {dis:maj7} - #guitar-tuning - #"x;x;1-1;3-2;3-3;3-4;" -\storePredefinedDiagram \chordmode {dis:m7} - #guitar-tuning - #"x;x;1-1;3-2;2-3;2-4;" - -%%%% ees chords -% -\storePredefinedDiagram \chordmode {ees} - #guitar-tuning - #(offset-fret 2 (chord-shape 'cis)) -\storePredefinedDiagram \chordmode {ees:m} - #guitar-tuning - #"x;x;4-3;3-2;4-4;1-1;" -\storePredefinedDiagram \chordmode {ees:aug} - #guitar-tuning - #"3-3;2-2;1-1;o;o;3-4" -\storePredefinedDiagram \chordmode {ees:dim} - #guitar-tuning - #(chord-shape 'ees:dim) -\storePredefinedDiagram \chordmode {ees:7} - #guitar-tuning - #"x;x;1-1;3-3;2-2;3-4;" -\storePredefinedDiagram \chordmode {ees:maj7} - #guitar-tuning - #"x;x;1-1;3-2;3-3;3-4;" -\storePredefinedDiagram \chordmode {ees:m7} - #guitar-tuning - #"x;x;1-1;3-2;2-3;2-4;" - -%%%% e chords -% -\storePredefinedDiagram \chordmode {e} - #guitar-tuning - #"o;2-2;2-3;1-1;o;o;" -\storePredefinedDiagram \chordmode {e:m} - #guitar-tuning - #"o;2-2;2-3;o;o;o;" -\storePredefinedDiagram \chordmode {e:aug} - #guitar-tuning - #"o;3-3;2-2;1-1;x;x;" -\storePredefinedDiagram \chordmode {e:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'ees:dim)) -\storePredefinedDiagram \chordmode {e:7} - #guitar-tuning - #"o;2-2;o;1-1;o;o;" -\storePredefinedDiagram \chordmode {e:maj7} - #guitar-tuning - #"o;2-3;1-1;1-2;o;x;" -\storePredefinedDiagram \chordmode {e:m7} - #guitar-tuning - #"o;2-2;o;o;o;o;" - -%%%% f chords -% -\storePredefinedDiagram \chordmode {f} - #guitar-tuning - #(chord-shape 'f) -\storePredefinedDiagram \chordmode {f:m} - #guitar-tuning - #(chord-shape 'f:m) -\storePredefinedDiagram \chordmode {f:aug} - #guitar-tuning - #"x;x;1-1;4-3;4-4;3-2;" -\storePredefinedDiagram \chordmode {f:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {f:7} - #guitar-tuning - #(chord-shape 'f:7) -\storePredefinedDiagram \chordmode {f:maj7} - #guitar-tuning - #"x;3-3;3-4;2-2;1-1;" -\storePredefinedDiagram \chordmode {f:m7} - #guitar-tuning - #(chord-shape 'f:m7) - -%%%% fis chords -% -\storePredefinedDiagram \chordmode {fis} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f)) -\storePredefinedDiagram \chordmode {fis:m} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f:m)) -\storePredefinedDiagram \chordmode {fis:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {fis:dim} - #guitar-tuning - #"x;x;1-1;2-3;1-2;2-4;" -\storePredefinedDiagram \chordmode {fis:7} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f:7)) -\storePredefinedDiagram \chordmode {fis:maj7} - #guitar-tuning - #"x;x;4-4;3-3;2-2;1-1;" -\storePredefinedDiagram \chordmode {fis:m7} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f:m7)) - -%%%% ges chords -% -\storePredefinedDiagram \chordmode {ges} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f)) -\storePredefinedDiagram \chordmode {ges:m} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f:m)) -\storePredefinedDiagram \chordmode {ges:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {ges:dim} - #guitar-tuning - #"x;x;1-1;2-3;1-2;2-4;" -\storePredefinedDiagram \chordmode {ges:7} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f:7)) -\storePredefinedDiagram \chordmode {ges:maj7} - #guitar-tuning - #"x;x;4-4;3-3;2-2;1-1;" -\storePredefinedDiagram \chordmode {ges:m7} - #guitar-tuning - #(offset-fret 1 (chord-shape 'f:m7)) - -%%%% g chords -% -\storePredefinedDiagram \chordmode {g} - #guitar-tuning - #"3-2;2-1;o;o;o;3-3;" -\storePredefinedDiagram \chordmode {g:m} - #guitar-tuning - #(offset-fret 2 (chord-shape 'f:m)) -\storePredefinedDiagram \chordmode {g:aug} - #guitar-tuning - #"x;x;5-1;8-3;8-4;7-2;" -\storePredefinedDiagram \chordmode {g:dim} - #guitar-tuning - #"x;x;5-2;6-4;5-3;3-1;" -\storePredefinedDiagram \chordmode {g:7} - #guitar-tuning - #"3-3;2-2;o;o;o;1-1;" -\storePredefinedDiagram \chordmode {g:maj7} - #guitar-tuning - #"x;x;5-4;4-3;3-2;2-1;" -\storePredefinedDiagram \chordmode {g:m7} - #guitar-tuning - #(offset-fret 2 (chord-shape 'f:m7)) - -%%%% gis chords -% -\storePredefinedDiagram \chordmode {gis} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f)) -\storePredefinedDiagram \chordmode {gis:m} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f:m)) -\storePredefinedDiagram \chordmode {gis:aug} - #guitar-tuning - #"o;3-4;2-3;1-1;1-2;o;" -\storePredefinedDiagram \chordmode {gis:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {gis:7} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f:7)) -\storePredefinedDiagram \chordmode {gis:maj7} - #guitar-tuning - #"x;x;1-1-(;1-1;1-1-);3-3;" -\storePredefinedDiagram \chordmode {gis:m7} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f:m7)) - -%%%% aes chords -% -\storePredefinedDiagram \chordmode {aes} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f)) -\storePredefinedDiagram \chordmode {aes:m} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f:m)) -\storePredefinedDiagram \chordmode {aes:aug} - #guitar-tuning - #"o;3-4;2-3;1-1;1-2;o;" -\storePredefinedDiagram \chordmode {aes:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {aes:7} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f:7)) -\storePredefinedDiagram \chordmode {aes:maj7} - #guitar-tuning - #"x;x;1-1-(;1-1;1-1-);3-3;" -\storePredefinedDiagram \chordmode {aes:m7} - #guitar-tuning - #(offset-fret 3 (chord-shape 'f:m7)) - -%%%% a chords -% -\storePredefinedDiagram \chordmode {a} - #guitar-tuning - #"x;o;2-1;2-2;2-3;o;" -\storePredefinedDiagram \chordmode {a:m} - #guitar-tuning - #"x;o;2-2;2-3;1-1;o;" -\storePredefinedDiagram \chordmode {a:aug} - #guitar-tuning - #"x;o;3-4;2-2;2-3;1-1;" -\storePredefinedDiagram \chordmode {a:dim} - #guitar-tuning - #(chord-shape 'a:dim) -\storePredefinedDiagram \chordmode {a:7} - #guitar-tuning - #"x;o;2-1;o;2-3;o;" -\storePredefinedDiagram \chordmode {a:maj7} - #guitar-tuning - #"x;o;2-2;1-1;2-3;o;" -\storePredefinedDiagram \chordmode {a:m7} - #guitar-tuning - #"x;o;2-2;o;1-1;o;" - -%%%% ais chords -% -\storePredefinedDiagram \chordmode {ais} - #guitar-tuning - #(chord-shape 'bes) -\storePredefinedDiagram \chordmode {ais:m} - #guitar-tuning - #(chord-shape 'bes:m) -\storePredefinedDiagram \chordmode {ais:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {ais:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'a:dim)) -\storePredefinedDiagram \chordmode {ais:7} - #guitar-tuning - #(chord-shape 'bes:7) -\storePredefinedDiagram \chordmode {ais:maj7} - #guitar-tuning - #"x;1-1;3-3;2-2;3-4;x;" -\storePredefinedDiagram \chordmode {ais:m7} - #guitar-tuning - #(chord-shape 'bes:m7) - -%%%% bes chords -% -\storePredefinedDiagram \chordmode {bes} - #guitar-tuning - #(chord-shape 'bes) -\storePredefinedDiagram \chordmode {bes:m} - #guitar-tuning - #(chord-shape 'bes:m) -\storePredefinedDiagram \chordmode {bes:aug} - #guitar-tuning - #"2-2;1-1;o;3-4-(;3-4-);2-3;" -\storePredefinedDiagram \chordmode {bes:dim} - #guitar-tuning - #(offset-fret 1 (chord-shape 'a:dim)) -\storePredefinedDiagram \chordmode {bes:7} - #guitar-tuning - #(chord-shape 'bes:7) -\storePredefinedDiagram \chordmode {bes:maj7} - #guitar-tuning - #"x;1-1;3-3;2-2;3-4;x;" -\storePredefinedDiagram \chordmode {bes:m7} - #guitar-tuning - #(chord-shape 'bes:m7) - -%%%% b chords -% -\storePredefinedDiagram \chordmode {b} - #guitar-tuning - #(offset-fret 1 (chord-shape 'bes)) -\storePredefinedDiagram \chordmode {b:m} - #guitar-tuning - #(offset-fret 1 (chord-shape 'bes:m)) -\storePredefinedDiagram \chordmode {b:aug} - #guitar-tuning - #"x;3-2;2-1;o;o;x;" -\storePredefinedDiagram \chordmode {b:dim} - #guitar-tuning - #"x;x;o;1-1;o;1-2;" -\storePredefinedDiagram \chordmode {b:7} - #guitar-tuning - #(offset-fret 1 (chord-shape 'bes:7)) -\storePredefinedDiagram \chordmode {b:maj7} - #guitar-tuning - #"x;2-1;4-3;3-2;4-4;x;" -\storePredefinedDiagram \chordmode {b:m7} - #guitar-tuning - #(offset-fret 1 (chord-shape 'bes:m7)) - + (hash-key (cons tuning pitches)) + (verbose-definition (if (string? diagram-definition) + (parse-terse-string diagram-definition) + diagram-definition))) + (hash-set! fretboard-table + hash-key + verbose-definition)))