lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: lyrics entry help!!!-was hebrew lily


From: Ferenc Wagner
Subject: Re: lyrics entry help!!!-was hebrew lily
Date: Fri, 04 Jul 2003 01:43:14 +0200
User-agent: Gnus/5.1002 (Gnus v5.10.2) Emacs/21.2 (gnu/linux)

Aaron <address@hidden> writes:

> I tried the $$ etc. but have no idea what file to add it
> to and in what format. \\$$ ??

How did you try them, then? :) Simply tack them to the
beginning of end of a syllabe.  Because the preprocessor you
use does not care about quotes, you can not simply add a
space like " this".  Do it like ~this instead (~ is a space
for TeX, where it must not break a line -- irrelevant in
your case).  $$ is rubbish, do not try at home.  You can
"insert" arbitrary (even negative) amount of space by e.g.
\\hskip-3cm (doubled backslash for Lilypond).  But this
technique also confuses Lilypond's internal calculation of
syllabe widths (beyond the confusion created by \\R{}'s), so
you may want to change Lilypond's own alignment mechanism:

\property ... How is it exactly?  [Google gives

http://www.lilypond.org/stable/Documentation/user/out-www/lilypond/Fine-tuning-a-piece.html

Reading a couple of times...  Hacking a couple of hours...]

So here is something you may find interesting (and also
familiar :):

------------- cut ------8<------ here ---------

\version "1.6.10"               % Thanks, Han-Wen!

% Do you still have problems with the titles?
\header {
  title = "Title"
%  languague = "hebrew,english" % don't forget to uncomment this!
}

\include "paper26.ly"

% General purpose mapping function: applies FUNC to every
% text field in MUSIC.
#(define (text-map func music)
  (let ((text (ly-get-mus-property music 'text))
        (element (ly-get-mus-property music 'element))
        (elements (ly-get-mus-property music 'elements)))
   (if (not (null? text))
    (ly-set-mus-property! music 'text (func text)))
   (if (not (null? element))
    (ly-set-mus-property! music 'element (text-map func element)))
   (if (not (null? elements))
    (ly-set-mus-property! music 'elements
      (map (lambda (m) (text-map func m)) elements)))
   music))

% Does Scheme really not include this function?
#(define (string-reverse str)
  (list->string (reverse (string->list str))))

% Reverse every word (in terms of the above two functions)
#(define (text-reverse lyric)
  (text-map string-reverse lyric))

% Sandwich every word between PRE and POST
#(define (text-augment pre post)
  (lambda (lyric)
   (text-map (lambda (word) (string-append pre word post)) lyric)))

% I factored out the lyrics, and also tried setting
% the extra-offset property randomly.  It works.
lyr = \lyrics {
    Tamm,
    \property LyricsVoice . LyricText \override #'extra-offset = #'(5 . 0)
    ta
    \property LyricsVoice . LyricText \revert #'extra-offset
    damm
}

\score {
  \addlyrics
    \notes {
      \clef "bass"
      \key d \major
      \time 3/4
      d4. a8 g4
    }
    \context Lyrics < \lyr \apply #(text-augment "A" "B") \lyr >
%           Here you probably want to use "\\R{" and "}" instead.
\paper {
  papersize = "a4"
  indent = 0.0\cm
  }
}

------------- and ------8<------ here ---------

Hmm, the documentation seems *MUCH* more comprehensible than
last time I checked (half a year or so).  But I declare
Scheme the worst functional language ever.  Or maybe I
should learn it.  I am really interested in the right way of
doing the above.  Hmm.  What is the way to munge the text
AFTER Lily's positioning work?
                                                   Feri.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]