W dniu 1 sierpnia 2011 16:47 użytkownik Wols Lists <antli...@youngman.org.uk> napisał: > On 31/07/11 23:35, Carl Sorensen wrote: >> Do we need four bars? Why not just do three bars -- one with capoPitch '(), >> another with capoPitch set, and a third with capoVertical? >> >> We like to get examples and regtests as simple as can be. >> > New modified regtest attached. I've cut it down to one line, two bars > per section so six in total. (I know you want minimal, but cutting it > down to one note per section feels a bit two much, and two minims looked > naff.) The other thing is, the new regtest doesn't have N/C, which > doesn't seem to matter, but that was almost the first thing I thought > needed checking when I first saw the chord-mode documentation I based my > sample and reg-test on. > > Personally I prefer my longer version, but I'm quite happy to leave it > to you which version you actually go for (this second patch should apply > *instead* *of* the first).
Done and uploaded to Rietveld. http://codereview.appspot.com/4800051/ I have a small suggestion: change g major chord into a minor chord. This way we'll have more variety, so there'll be less chance of a regression going unnoticed. I attach your patches updated in a way that they can be applied to current git master (i.e. they don't run into problems because of recent style formatting changes), this may save you some trouble. cheers, Janek
From edfefae7c6575b190b4737effb0985bee1e0218a Mon Sep 17 00:00:00 2001 From: Wol <anth...@youngman.org.uk> Date: Fri, 29 Jul 2011 22:43:13 +0100 Subject: [PATCH 1/3] Modify chord handling to handle guitar capos chord-name-engraver now calls a shim between it and the chord formatter in order to print capo chords chord-name-scm has had capo-handler added. If requested it prints both the original chord, and the transposed chord. define-context-properties adds the properties capoPitch to declare the capo transposition, and capoVertical to make the chords print in column rather than row form. --- lily/chord-name-engraver.cc | 4 ++-- scm/chord-name.scm | 28 ++++++++++++++++++++++++++++ scm/define-context-properties.scm | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index e228140..b55668b 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -124,8 +124,8 @@ Chord_name_engraver::process_music () pitches = scm_sort_list (pitches, Pitch::less_p_proc); - SCM name_proc = get_property ("chordNameFunction"); - markup = scm_call_4 (name_proc, pitches, bass, inversion, + SCM capo_proc = ly_lily_module_constant ("capo-handler"); + markup = scm_call_4 (capo_proc, pitches, bass, inversion, context ()->self_scm ()); } /* diff --git a/scm/chord-name.scm b/scm/chord-name.scm index 79b0189..9c590be 100644 --- a/scm/chord-name.scm +++ b/scm/chord-name.scm @@ -170,3 +170,31 @@ FOOBAR-MARKUP) if OMIT-ROOT is given and non-false. (alist (map chord-to-exception-entry elts))) (filter (lambda (x) (cdr x)) alist))) +(define-public (capo-handler pitches bass inversion context) + (let ((chord-function + (ly:context-property context 'chordNameFunction 'jazz-chord-names)) + (capo-pitch (ly:context-property context 'capoPitch #f))) + (if (not capo-pitch) + (chord-function pitches bass inversion context) ;; call the chordNameFunction as of old + (let* ((new-pitches ;; else transpose the pitches and do the chord twice + (map (lambda (p) + (ly:pitch-transpose p capo-pitch)) + pitches)) + (new-bass + (if (ly:pitch? bass) + (ly:pitch-transpose bass capo-pitch) + '())) + (new-inversion + (if (ly:pitch? inversion) + (ly:pitch-transpose inversion capo-pitch) + '())) + (capo-markup + (make-parenthesize-markup + (chord-function new-pitches new-bass new-inversion context))) + (name-markup (chord-function pitches bass inversion context)) + (capo-vertical (ly:context-property context 'capoVertical #f))) + (if capo-vertical + (make-column-markup (list name-markup capo-markup)) + (make-line-markup (list name-markup + (make-hspace-markup 1) + capo-markup))))))) diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index dab5211..d17f72f 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -135,6 +135,8 @@ that normally end on beats.") (beatStructure ,list? "List of @code{baseMoment}s that are combined to make beats.") + (capoPitch ,ly:pitch? "The pitch to transpose chords down by when using the capo.") + (capoVertical ,boolean? "Whether to display actual and transposed pitches above each other or not.") (chordChanges ,boolean? "Only show changes in chords scheme?") (chordNameExceptions ,list? "An alist of chord exceptions. Contains @code{(@var{chord} . @var{markup})} entries.") -- 1.7.0.4
From b55e5678509059effdd3973a2a0beb0af6445e4c Mon Sep 17 00:00:00 2001 From: Wol <anth...@youngman.org.uk> Date: Sun, 31 Jul 2011 17:10:13 +0100 Subject: [PATCH 2/3] Document the use of the capoPitch and capoVertical properties --- Documentation/notation/chords.itely | 50 +++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+), 0 deletions(-) diff --git a/Documentation/notation/chords.itely b/Documentation/notation/chords.itely index 1109075..982ed4b 100644 --- a/Documentation/notation/chords.itely +++ b/Documentation/notation/chords.itely @@ -506,6 +506,56 @@ Rests passed to a @code{ChordNames} context will cause the } @end lilypond +@cindex Transposing guitar chords for capo + +If the @code{capoPitch} property is set, then the chords will additionally be printed +transposed for a guitar with the capo set appropriately. By default the chords are +printed on one line, but if the @code{capoVertical} property is set, the chords will be +printed one above the other. + +In make-pitch, leave the first argument at 0, the second argument is the +interval (-2 is a third), and the third argument adjusts it up or down a +semitone. + +@lilypond[verbatim,quote,ragged-right] +<< + \new ChordNames \chordmode { + c1 + r1 + g1 + c1 + \break + c1 + r1 + g1 + c1 + \break + c1 + r1 + g1 + c1 + } + \chordmode { + c1 + r1 + g1 + c1 + \break + \set ChordNames.capoPitch = #(ly:make-pitch 0 -2 -1/2) + c1 + r1 + g1 + c1 + \break + \set ChordNames.capoVertical = ##t + c1 + r1 + g1 + c1 + } +>> +@end lilypond + @snippets @c Keep index entries with following snippet -- 1.7.0.4
From 2f92c51802e9f941289fd5bcb7b2df4c97ecce65 Mon Sep 17 00:00:00 2001 From: Wol <anth...@youngman.org.uk> Date: Mon, 1 Aug 2011 15:19:46 +0100 Subject: [PATCH 3/3] Add regression test for guitar capos --- input/regression/chord-capo.ly | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) create mode 100644 input/regression/chord-capo.ly diff --git a/input/regression/chord-capo.ly b/input/regression/chord-capo.ly new file mode 100644 index 0000000..789f47d --- /dev/null +++ b/input/regression/chord-capo.ly @@ -0,0 +1,28 @@ +\version "2.14.0" + +\header{ + texidoc="Properties capoPitch, capoVertical: display chordnames, suitably +transposed for a guitar capo, either in a line or one above the other. +" +} + +<< + \new ChordNames \chordmode { + c1 + g1 + c1 + g1 + c1 + g1 + } + \chordmode { + c1 + g1 + \set ChordNames.capoPitch = #(ly:make-pitch 0 -2 -1/2) + c1 + g1 + \set ChordNames.capoVertical = ##t + c1 + g1 + } +>> -- 1.7.0.4
_______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel