lilypond-user
[Top][All Lists]
Advanced

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

Re: Microtone accidentals


From: Valentin Villenave
Subject: Re: Microtone accidentals
Date: Thu, 26 Jul 2007 15:22:07 +0200

2007/7/26, Siska Ádám <address@hidden>:

BTW, could you explain a bit (maybe in a private mail) how actually it
works? I would like to adopt the sign to be able to create the
down-arrowed accidentals too, and to be able to attach them to natural
signs also, but unfortunately I know nothing about postscripting...

Actually, neither do I :)

The basics are quite easy to learn though (I've been playing with it
for only a couple weeks).

Think of a pen on the paper. I've just printed the accidental glyph,
so the postscript object will start on the right of the sign.
Therefore I have to move it to the left:

-1.4 0.5 moveto  %% where -1.4 is the X coordinate of my new origin point

Then I print the first (vertical line), starting from this point and going up:

-1.4 2 lineto  %% as you can see, only the Y coordinate has changed

Besides, I use

0.17 setlinewidth

to make a thicker line so it's seamlessly integrated with the glyph.

This was my first line. I could go on with the other lines, but I want
thiner lines now.
So have to create two distincts objects.

I add

stroke  %% to tell the engine to actually draw my first object (the
line); and I'll insert

gsave %% at the beginning of my code , and

grestore %% after my code, to start a whole new object (the arrowhead)

The new object is printed in a similar way:

gsave %% I save the initial state

0.1 setlinewidth %% previously it was 0.17, so this is thiner

-1.7 1.4 moveto %% I move my pen without drawing anything

-1.4 2.18 lineto %% first line, towards the top of the thick line
(notice the -1.4 Y axis)

-1.1 1.4 lineto  %% starting from the end of the previous line, I
directly draw the second (to the right)

stroke %% don't ask me why this is needed

Here ends the PostScipt part.

I included it in a very basic Scheme function I found in the manual:
http://lilypond.org/doc/v2.10/Documentation/user/lilypond/Simple-substitution-functions

#(define-music-function (parser location note)   (ly:music?)

I create a variable, which will be named "note" (don't ask me how it works)
the (ly:music?) is a musical expression (so if you have several notes
to affect, you can encloe them in brackets and each accidental in the
brackets will be modified)

Here's the cool part: you can use Scheme to write genuine lilypond code

#{ \once \override Voice.Accidental #'stencil =
          #ly:text-interface::print

%%The Accidental object is replaced by a Text object (so I can use \markup)

       \once \override Voice.Accidental #'text =

%% Here comes the \markup, which include two objects: the glyph...

       \markup {\musicglyph #"accidentals.sharp"

%% ...and the postscript code

    \postscript #"gsave 0.17 setlinewidth -1.4 0.5 moveto -1.4 2 lineto
       stroke grestore
    gsave 0.1 setlinewidth -1.7 1.4 moveto -1.4 2.18 lineto -1.1 1.4
lineto
       stroke grestore"}

%%And of course, I don't forget to print the note after the accidental

        $note #})

I'm really new to this (both Scheme and PostScript), so you see it
isn't very hard to do basic things. It is probably a very dirty code,
but it works.

Regards,
Valentin




reply via email to

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