denemo-devel
[Top][All Lists]
Advanced

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

Re: [Denemo-devel] microtonal accidentals


From: Richard Shann
Subject: Re: [Denemo-devel] microtonal accidentals
Date: Sat, 07 Apr 2018 20:37:00 +0100

On Sat, 2018-04-07 at 08:32 -0400, Freeman Gilmore wrote:
> 
> 
> On Sat, Apr 7, 2018 at 5:04 AM, Richard Shann <address@hidden
> m> wrote:
> > On Fri, 2018-04-06 at 17:48 -0400, Freeman Gilmore wrote:
> > >
> > >
> > > On Fri, Apr 6, 2018 at 12:37 PM, Richard Shann <address@hidden
> > us.c
> > > om> wrote:
> > > > On Fri, 2018-04-06 at 10:21 -0400, Freeman Gilmore wrote:
> > > > > I am trying to see how Denemo works with microtonal
> > accidentals. 
> > > > I
> > > > > can not find in the manuals how to do this.   Could someone
> > > > please
> > > > > direct me to the instructions on how to do this?
> > > >
> > > > No-one has made any special support within Denemo, it would be
> > > > quite
> > > > possible but you will need to exploit LilyPond's facilities to
> > > > create
> > > > such notation.  For example
> > > >  
> > > > http://lsr.di.unimi.it/LSR/Item?id=585
> > > >
> > > > gives such notation for Turkish music by incorporating
> > "makam.ly".
> > > > This
> > > > is something someone who was comfortable with the LilyPond
> > syntax
> > > > could
> > > > script so that Denemo could let you enter the accidentals (and
> > even
> > > > display them in their typeset form in the Denemo Display) but
> > you
> > > > would
> > > > need some help with the Denemo Scheme syntax to do that (the
> > > > suffixes
> > > > for the accidentals have to come between the note-name and any
> > > > octave
> > > > indicators).
> > > >
> > > > Let me know if you want to tackle that!
> > > >
> > > > Richard
> > > >
> > > >
> > >
> > >
> > > Richard:
> > >
> > > Between the time I sent my email and receiving you reply I found
> > and
> > > read the same thing you sent to me.    I do have some questions
> > about
> > > this.   I do not know Schema and I do not know if I would live
> > long
> > > enough to learn all that would be needed to implement this.
> > 
> > Fortunately, you do not need to learn the Scheme programming
> > language
> > to write scripts for Denemo to do simple things such as inserting
> > bits
> > of LilyPond syntax. Several users have created scripts to do
> > various
> > tasks, some of them are now shipped with Denemo
> > 
> > >
> > > Is schema the only part of the sores code that needs to be
> > changing
> > > to do this?
> > 
> > Well, no part of the source code needs changing, you are able to
> > have
> > your own local commands that are stored in your own directory and
> > have
> > all the status of the commands shipped with Denemo (most of
> > Denemo's
> > menus comprise scripts which are interpreted when you invoke them).
> > 
> > >
> > > Is Scheme mostly an interpreted language? 
> > 
> > yes
> > 
> > >  
> > >
> > > Does Scheme supply data to the C part of the Denemo code; or does
> > it
> > > work independent for this?
> > 
> > The Scheme script would invoke procedures that are part of the
> > source
> > code of the Denemo program, written in C.
> > 
> > >
> > > Do the glyphs come from Lilypond as needed, i.e. would ‘es’ sent
> > from
> > > Denemo find and print the ‘b’ as well as coped to the Denemo work
> > > space?  
> > 
> > Yes, Denemo can pass the syntax that LilyPond needs and optionally
> > display any glyph from the LilyPond (or any other) fonts as needed.
> > All
> > this can be done by the user themselves. But as there are several
> > thousand Denemo commands that can be invoked you will probably need
> > help to find your way around - I'm always happy to help, as this is
> > the
> > best fun, exploiting all the power under the bonnet.
> > 
> > 
[...]
> 
> Richard:
> 
> Not sure about this.   I am not a programmer, so could you please
> direct a source to learn Scheme.   Because I do not read well, would
> you tell me which part of Scheme I should know to do this?

Well, as I say, you wouldn't need to study the Scheme syntax to do this
since nearly all of this sort of simple script is just a list of Denemo
commands to be performed. For example this LilyPond syntax

\include "makam.ly"
 { a'4 bk'4 c'' r }

creates the attached makam.pdf when run through LilyPond. Note that the
second note has a "k" as the accidental, which is listed as being kücük
mücenneb (sharp) in http://lilypond.org/doc/v2.18/Documentation/notatio
n/turkish-classical-music
and this causes the LilyPond glyph
"accidentals.sharp.slashslashslash.stem" to be used as the accidental.
  

I created this in Denemo by putting \include "makam.ly" into the Score-
>LilyPond Header command (so that it is inserted at the top of the
LilyPond output) and putting in the notes a b c and the 1/4 rest. Then
I placed the cursor on the second note, b' and executed this script:


(let ((tag "makam"))    
        (d-DirectivePut-note-postfix tag "k")
        (d-DirectivePut-note-override tag DENEMO_OVERRIDE_AFFIX)
        (d-DirectivePut-note-graphic tag 
"accidentals.sharp.slashslashslash.stem")
        (d-DirectivePut-note-gx tag -10)
        (d-SetSaved #f))

(I put the script into the View->Scheme window to do that)
The only bit of Scheme syntax in that is the first line

 (let ...)
which is just Scheme's way of making a block of code.
All the rest of the lines are from Denemo's Scheme library - they all
start "(d-"
meaning it is a built-in Denemo procedure. The first one 

(d-DirectivePut-note-postfix tag "k")

puts the "k" after the note by attaching a Denemo Directive to the note
 which postfixes the note with "k". The "tag" is just to identify this
type of Denemo Directive.

The next line:

(d-DirectivePut-note-override tag DENEMO_OVERRIDE_AFFIX)

overrides  the usual placement (after the note) to be after the note
name and before the octave indicator "'"

With this much LilyPond will typeset the microtone, but the Denemo
Display would not show anything, so ...

The next line

(d-DirectivePut-note-graphic tag "accidentals.sharp.slashslashslash.stem")

puts the LilyPond glyph onto the Denemo Display at the note position.

And the next

(d-DirectivePut-note-gx tag -10)

moves the glyph so it comes before the note head in the display, not on top of 
it.

Finally this line

(d-SetSaved #f)

tells Denemo that the file has been changed (so it's "Saved" status is
now FALSE, that is the modified score has not been saved). Actually
that's the second bit of Scheme syntax, #f is the Scheme syntax for
boolean FALSE.

> 
> I would assume that there are libraries in Scheme. 

There are extensive Scheme libraries, but you wouldn't need them. What
you would need to be shown is the Denemo library - that is the
collection of (d-XXXX ...) procedures which Denemo provides. There is
some documentation on these, but in practice you would just want
examples (like the above script) which you could then modify to output
other microtones. Each script you would save either as a command or as
a palette button, and then assign keyboard shortcuts etc.

>  One for placing # and b simples in the tool section of Denemo.  And
> I am going to guess the #’’s and b’s come from Lilypond to a Scheme
> library to place them in the work space.  Would you direct me to the
> section of Scheme code that works with the accidentals?  I know there
> are other dependent sections from what you said above.   This may be
> far off base, but I would like to see some code.    I am using
> windows, so is there a simple IDE that I would need?

This is *way* simpler than anything you would need an IDE for. The main
work is deciding what LilyPond syntax you want to emit,  and what you
would like to see in the Denemo Display to correspond with it. If you
can post up examples of the LilyPond syntax you would like then the
rest is relatively easy...

I hope the above gives you a flavor of what creating some new features
would be like - it has been done by non-programmers before, so there is
no cause to be daunted. I should note that the above script requires
the latest version 2.2.7 which will be built tonight because testing it
out revealed that placement of the "k" *before* the octave indicator
was not being honored :( ...
So if you download

http://www.denemo.org/~jjbenham/mxe/denemo.zip

tomorrow you can try it out.

Richard



Attachment: makam.denemo
Description: application/xml

Attachment: makam.pdf
Description: Adobe PDF document


reply via email to

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