X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fstring-tunings-init.ly;h=034e9a2061ae84fed2c42f196aef0eda14c582e3;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=0edc1cb4248045ee675f8d4872586fbe5eeca0d2;hpb=2f320e9722ec20d6f13ec567d007763cc912c5da;p=lilypond.git diff --git a/ly/string-tunings-init.ly b/ly/string-tunings-init.ly index 0edc1cb424..034e9a2061 100644 --- a/ly/string-tunings-init.ly +++ b/ly/string-tunings-init.ly @@ -1,6 +1,6 @@ %%%% This file is part of LilyPond, the GNU music typesetter. %%%% -%%%% Copyright (C) 2010--2011 Carl D. Sorensen +%%%% Copyright (C) 2010--2015 Carl D. Sorensen %%%% %%%% LilyPond is free software: you can redistribute it and/or modify %%%% it under the terms of the GNU General Public License as published by @@ -15,121 +15,78 @@ %%%% You should have received a copy of the GNU General Public License %%%% along with LilyPond. If not, see . -\version "2.14.0" +\version "2.16.0" %% A stringTuning is a list of pitches ordered by string number %% from 1 to N. %% Here we define a number of default string tunings. -%% A scheme function for converting a chord to a string tuning -#(define (chord->tuning parser tuning-symbol chord) - (let* ((ev-chord (car (extract-named-music chord 'EventChord))) - (pitches (event-chord-pitches ev-chord))) - (ly:parser-define! parser tuning-symbol (reverse pitches)))) - %% A music function for converting a chord to a string tuning. %% The music argument for \makeStringTuning must be a chord in %% absolute mode ordered from the highest string number to the %% lowest string number -makeStringTuning = -#(define-music-function (parser location tuning chord) - (symbol? ly:music?) - (_ "Convert @{chord} to a string tuning stored in @code{tuning}. -@{chord} must be in absolute pitches and should have the highest -string number (generally the lowest pitch) first. @code{tuning} -should be a string that will be converted to a symbol.") - (begin - (chord->tuning parser tuning chord) - (make-music 'SequentialMusic 'void #t))) - - -%% A music function for converting a chord to a string tuning -%% and setting the current context stringTunings property to -%% the newly-defined-string tuning. - -contextStringTuning = -#(define-music-function (parser location tuning chord) - (symbol? ly:music?) - (_ "Convert @{chord} to a string tuning stored in @code{tuning}, -and set @code{stringTunings} of the current context to the -newly-defined tuning. -@{chord} must be in absolute pitches and should have the highest -string number (generally the lowest pitch) first. @code{tuning} -should be a string that will be converted to a symbol.") - (begin - (chord->tuning parser tuning chord) - #{ - \set TabStaff.stringTunings = $(ly:parser-lookup parser tuning) - \set FretBoards.stringTunings = $(ly:parser-lookup parser tuning) - #})) - -%% A music function for converting an alist to string-tunings -makeDefaultStringTunings = -#(define-music-function (parser location default-tuning-alist) - (cheap-list?) - (_ "Define default string tunings for each element of -@code{default-tuning-alist}.") - (begin - (for-each (lambda (alist-entry) - (chord->tuning parser (car alist-entry) (cdr alist-entry))) - default-tuning-alist) - (make-music 'SequentialMusic 'void #t))) - -% tuning definitions require default pitchnames -\languageSaveAndChange #default-language - -%% Define alist of default string tunings -defaultStringTunings = -#`( - ;; guitar tunings - (guitar-tuning . ,#{#}) - (guitar-seven-string-tuning . ,#{#}) - (guitar-drop-d-tuning . ,#{#}) - (guitar-open-g-tuning . ,#{#}) - (guitar-open-d-tuning . ,#{#}) - (guitar-dadgad-tuning . ,#{#}) - (guitar-lute-tuning . ,#{#}) - (guitar-asus4-tuning . ,#{#}) - - ;; bass tunings - (bass-tuning . ,#{#}) - (bass-four-string-tuning . ,#{#}) - (bass-drop-d-tuning . ,#{#}) - (bass-five-string-tuning . ,#{#}) - (bass-six-string-tuning . ,#{#}) - - ;; mandolin tunings - (mandolin-tuning . ,#{#}) - - ;; tunings for 5-string banjo - (banjo-open-g-tuning . ,#{#}) - (banjo-c-tuning . ,#{#}) - (banjo-modal-tuning . ,#{#}) - (banjo-open-d-tuning . ,#{#}) - (banjo-open-dm-tuning . ,#{#}) - - ;; ukulele tunings - (ukulele-tuning . ,#{#}) - (ukulele-d-tuning . ,#{#}) - (tenor-ukulele-tuning . ,#{#}) - (baritone-ukulele-tuning . ,#{#}) - - ;; orchestral strings - (violin-tuning . ,#{#}) - (viola-tuning . ,#{#}) - (cello-tuning . ,#{#}) - (double-bass-tuning . ,#{#}) - ) +stringTuning = +#(define-scheme-function (parser location chord) + (ly:music?) + (_i "Convert @var{chord} to a string tuning. +@var{chord} must be in absolute pitches and should have the highest +string number (generally the lowest pitch) first.") + (let* ((ev-chord (car (extract-named-music chord 'EventChord)))) + (reverse! (event-chord-pitches ev-chord)))) + +defaultStringTunings = #'() + +makeDefaultStringTuning = +#(define-void-function (parser location symbol pitches) (symbol? list?) + (_i "This defines a string tuning @var{symbol} via a list of @var{pitches}. +The @var{symbol} also gets registered in @code{defaultStringTunings} +for documentation purposes.") + (ly:parser-define! parser symbol pitches) + (set! defaultStringTunings (acons symbol pitches defaultStringTunings))) + +%% guitar tunings +\makeDefaultStringTuning #'guitar-tuning \stringTuning +\makeDefaultStringTuning #'guitar-seven-string-tuning \stringTuning +\makeDefaultStringTuning #'guitar-drop-d-tuning \stringTuning +\makeDefaultStringTuning #'guitar-drop-c-tuning \stringTuning +\makeDefaultStringTuning #'guitar-open-g-tuning \stringTuning +\makeDefaultStringTuning #'guitar-open-d-tuning \stringTuning +\makeDefaultStringTuning #'guitar-dadgad-tuning \stringTuning +\makeDefaultStringTuning #'guitar-lute-tuning \stringTuning +\makeDefaultStringTuning #'guitar-asus4-tuning \stringTuning + +%% bass tunings +\makeDefaultStringTuning #'bass-tuning \stringTuning +\makeDefaultStringTuning #'bass-four-string-tuning \stringTuning +\makeDefaultStringTuning #'bass-drop-d-tuning \stringTuning +\makeDefaultStringTuning #'bass-five-string-tuning \stringTuning +\makeDefaultStringTuning #'bass-six-string-tuning \stringTuning + +%% mandolin tunings +\makeDefaultStringTuning #'mandolin-tuning \stringTuning + +%% tunings for 5-string banjo +\makeDefaultStringTuning #'banjo-open-g-tuning \stringTuning +\makeDefaultStringTuning #'banjo-c-tuning \stringTuning +\makeDefaultStringTuning #'banjo-modal-tuning \stringTuning +\makeDefaultStringTuning #'banjo-open-d-tuning \stringTuning +\makeDefaultStringTuning #'banjo-open-dm-tuning \stringTuning + +%% ukulele tunings +\makeDefaultStringTuning #'ukulele-tuning \stringTuning +\makeDefaultStringTuning #'ukulele-d-tuning \stringTuning +\makeDefaultStringTuning #'tenor-ukulele-tuning \stringTuning +\makeDefaultStringTuning #'baritone-ukulele-tuning \stringTuning + +%% orchestral strings +\makeDefaultStringTuning #'violin-tuning \stringTuning +\makeDefaultStringTuning #'viola-tuning \stringTuning +\makeDefaultStringTuning #'cello-tuning \stringTuning +\makeDefaultStringTuning #'double-bass-tuning \stringTuning + +defaultStringTunings = #(reverse! defaultStringTunings) %% convert 5-string banjo tuning to 4-string by removing the 5th string -#(define-public (four-string-banjo tuning) - (reverse (cdr (reverse tuning)))) - -%% make all of the default string tunings - -\makeDefaultStringTunings #defaultStringTunings - -% restore the language -\languageRestore - +four-string-banjo = #(lambda (tuning) + (take tuning 4))