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