Just found the markup macro in the docs. Changing (ly:grob-set-property! grob 'text new-name)
to (ly:grob-set-property! grob 'text (markup #:italic #:smaller new-name)) does what I'm looking for. Is this the "right" way to handle issues like this? By that question, I think I really mean "Is there any downside to using Scheme to solve problems like this?" Cheers, Mike On Thu, Dec 9, 2010 at 1:02 PM, Michael Ellis <michael.f.el...@gmail.com>wrote: > Putting the \midi block inside a separate \score block solved the audio > doubling issue. I could still use some suggestions regarding how to control > the font properties of the NoteNames output. With lyrics, I can do things > like > > \context { > \Lyrics > %% Pack stanzas a little closer vertically > minimumVerticalExtent = #'(0 . 0) > %% decrease lyric font size by 1 increment > \override LyricText #'font-size = #-1 > } > > Thanks, > Mike > > > > On Tue, Dec 7, 2010 at 3:40 PM, Michael Ellis > <michael.f.el...@gmail.com>wrote: > >> 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