Thanks Valentin, that's quite helpful. I ended up taking an approach you suggested in a previous post<http://lists.gnu.org/archive/html/lilypond-user/2010-10/msg00687.html>to this list. Using the NoteNames context with alternative note names seems to be doing pretty much everything I want.
Here's a revised version of my script that works as desired: % Moveable Do as lyrics example % define solfege pitchnames pitchnames = #`( (do . ,(ly:make-pitch -1 0 NATURAL)) (re . ,(ly:make-pitch -1 1 NATURAL)) (mi . ,(ly:make-pitch -1 2 NATURAL)) ) #(ly:parser-set-note-names parser pitchnames) % Apparently, LilyPond reverts to dutch names when % using the NoteNames context. The following % workaround was posted by V. Villenave at % http://lists.gnu.org/archive/html/lilypond-user/2010-10/msg00687.html newnames = #`(("c" . "do") ("d" . "re") ("e" . "mi")) myNoteNames = #(lambda (grob) (let* ((default-name (ly:grob-property grob 'text)) (new-name (assoc-get default-name newnames))) (ly:grob-set-property! grob 'text new-name) (ly:text-interface::print grob))) % compose as though in C major mynotes = \relative do' {\key do \major do2 re4( mi4) } % transpose to desired key melody = \transpose do mi { \mynotes } % Produce score with solfege names as lyrics \score { << \new Voice = "myVoice" { \melody } \context NoteNames \with { \override NoteName #'stencil = #myNoteNames } { \mynotes } >> } \version "2.12.3" This approach seems to work ok with a larger example where I defined all the chromatic solfege names. The only issue I seem to be encountering in the larger example is an unintended doubling of voices on the midi output. Does the NoteNames engraver produce a midi stream by default? If so, how can I turn it off? My midi section looks like \midi { %% voodoo that lets us specify instrument in melody \context { \Staff \remove "Staff_performer" } \context { \Voice \consists "Staff_performer" } } Cheers, Mike On Tue, Dec 7, 2010 at 11:41 AM, Valentin Villenave <valen...@villenave.net>wrote: > On Tue, Dec 7, 2010 at 4:35 PM, Michael Ellis <michael.f.el...@gmail.com> > wrote: > > It seems to me that the best solution would be to use LilyPond's built-in > > Scheme interpreter to extract the pitch names while the file is being > > processed. I've made some attempts to use map with ly:note-pitchname, but > so > > far no success. This is probably because I know squat about Scheme, > > especially as used in LilyPond scripts. > > Here's an attempt of a patch I recently made, that might give you some > pointers: > > diff --git a/scm/chord-name.scm b/scm/chord-name.scm > index 7f5909b..2853102 100644 > --- a/scm/chord-name.scm > +++ b/scm/chord-name.scm > @@ -59,15 +59,38 @@ > (make-hspace-markup (if (= alteration SHARP) 0.2 0.1)) > )))) > > +(define (note-names-vector alist) > + "Extract note names from a pitchnames ALIST." > + (let ((name-ls '())) > + (map (lambda (x) > + (let* ((pitch (cdr x)) > + (alteration (ly:pitch-alteration pitch))) > + (if (eq? alteration 0) > + (set! name-ls (cons > + (string-capitalize (symbol->string (car > x))) > + name-ls))))) > + alist) > + (list->vector (reverse name-ls)))) > + > -(define-public (note-name->markup pitch lowercase?) > +(define-public (note-name->markup pitch lowercase? . input-language) > "Return pitch markup for PITCH." > - (make-line-markup > - (list > - (make-simple-markup > - (conditional-string-downcase > - (vector-ref #("C" "D" "E" "F" "G" "A" "B") (ly:pitch-notename > pitch)) > - lowercase?)) > - (accidental->markup (ly:pitch-alteration pitch))))) > + (let* ((get-pitchnames (lambda (x) > + (ly:assoc-get (string->symbol x) > + language-pitch-names))) > + (alist (get-pitchnames default-language))) > + (if input-language > + (cond ((string? input-language) > + (set! alist (get-pitchnames input-language))) > + ((boolean? input-language)) > + (set! alist pitchnames))) > + (make-line-markup > + (list > + (make-simple-markup > + (conditional-string-downcase > + (vector-ref (note-names-vector alist) > + (ly:pitch-notename pitch)) > + lowercase?)) > + (accidental->markup (ly:pitch-alteration pitch)))))) > > Sorry for not being more helpful, if there are things you don't > understand I'll try and help you further. > > Cheers, > Valentin. >
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-user