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

Reply via email to