lilypond-user
[Top][All Lists]
Advanced

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

Re: Persian musical koron and sori


From: Kees van den Doel
Subject: Re: Persian musical koron and sori
Date: Sun, 15 Feb 2009 18:48:03 -0800

Hi Folks,

I made an init file "persian.ly" with support for Persian accidentals and scale 
signatures.
The only thing missing is correct glyphs for koron and sori. I include it below.

Kees
----- Original Message -----
From: Behnam Rassi <address@hidden>
Date: Sunday, February 15, 2009 4:02 pm
Subject: Re: Persian musical koron and sori
To: Graham Breed <address@hidden>
Cc: Kees van den Doel <address@hidden>, Hans Aberg <address@hidden>, lilypond 
<address@hidden>

> On 15-Feb-09, at 6:45 PM, Graham Breed wrote:
> 
> > Behnam Rassi wrote:
> >> Yes Kees I downloaded the font and saw the glyphs.
> >> This is as far as I can go with my current work too. Except 
> that I  
> >> will add additional Persian music notations (and perhaps 
> somewhat  
> >> better looking glyphs!). But I can only produce a font in 
> ttf  
> >> format, another one perhaps in otf format. I can also extract 
> the  
> >> glyphs in EPS format individually. I wouldn't know how to put 
> them  
> >> in LilyPond.
> >
> > You need to say what interval (as a fraction of a 200 cent 
> whole  
> > tone) you want each symbol to correspond to.
> 
> I guess this has been already sorted out for koron and sori 
> before I  
> was exposed to this. If not, I can do some research to provide 
> the  
> information. The other notations I mentioned are more like 
> overhead  
> marks about 'how' the note should sound and not 'what'.
> I'm not finished with my work yet. I may be able to explain more 
> when  
> I'm done. It's still a couple of weeks to go I guess.
> 
> Behnam
> 
> 
--------------------------------------BEGIN----------persian.ly
\version "2.12.0"
%{
Author: Kees van den Doel address@hidden

This  file  defines  Persian  microtonal  alterations,  the  approximate
quartertone   flat  (koron)  and   the  approximate   quartertone  sharp
(sori). They can be obtained by  appending 'k' (koron) and 'o' (sori) to
the English note symbol.  The  standard symbols for this were introduced
by Vaziri. For now I've represented them by accidentals.mirroredflat and
accidentals.sharp.slashslash.stem.

Key signatures are defined for all the Persian modes, there are 5 scales
with microtones  and the  normal major scale.  All the gushe's  from all
dastgahs can be notated with these 6.

The note immediately  following a koron is sometimes  (when the interval
defined by  the note  before the koron  and after  the koron is  a minor
third, and the note below the  finalis in esfahan according to some (but
not all)  Persian musicians))  lowered by about  20 cents.  This  is not
notated, but considered part of the scale tuning. To accomodate this for
getting better sounding  MIDI I've introduced the "vlat"  (append 'v' to
the note) to indicate this. Actually  this note should also get a strong
vibrato,  and the  vibrato and  low tuning  are  perceptually integrated
(serialism!).

In the tuning  I've followed "Traditional Persian Art  Music, by Dariush
Tala'i".  The  tunings are  also very close  to those suggested  in "The
Dastgah  Concept in  Persian Music,  by  Hormoz Farhat".   See also  "Le
repertoire-modele  de  la  musique  iranienne,  by  Jean  During"  which
contains measurements of the intervals in actual practice.

There are no other tuning issues  in Persian music. Because the music is
monophonic  the difference  between  just intonation  (for example)  and
equal temperament  is not academic, because  are no chords  where out of
tune intervals are noticeable.

Note name suffixes:

            ff for double-flat
                        f  for flat
                        k  for koron (about quarter-flat, -3/10 of whole tone, 
60 cent)
                        o  for sori  (about quarter-sharp, 2/10 of whole tone, 
40 cent)
                        s  for sharp
                        x  for double-sharp
            v  for 20 cent flat tuned note ("vlat", not notated)
%}

% Define tunings:

#(define-public KORON -3/10)
#(define-public SORI 1/5)
#(define-public VLAT -1/10)

pitchnamesEnglish = #`(
        (cflatflat . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
        (cflat . ,(ly:make-pitch -1 0 FLAT))
        (c . ,(ly:make-pitch -1 0 NATURAL))
        (csharp . ,(ly:make-pitch -1 0 SHARP))
        (csharpsharp . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
        (dflatflat . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
        (dflat . ,(ly:make-pitch -1 1 FLAT))
        (d . ,(ly:make-pitch -1 1 NATURAL))
        (dsharp . ,(ly:make-pitch -1 1 SHARP))
        (dsharpsharp . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
        (eflatflat . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
        (eflat . ,(ly:make-pitch -1 2 FLAT))
        (e . ,(ly:make-pitch -1 2 NATURAL))
        (esharp . ,(ly:make-pitch -1 2 SHARP))
        (esharpsharp . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
        (fflatflat . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
        (fflat . ,(ly:make-pitch -1 3 FLAT))
        (f . ,(ly:make-pitch -1 3 NATURAL))
        (fsharp . ,(ly:make-pitch -1 3 SHARP))
        (fsharpsharp . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
        (gflatflat . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
        (gflat . ,(ly:make-pitch -1 4 FLAT))
        (g . ,(ly:make-pitch -1 4 NATURAL))
        (gsharp . ,(ly:make-pitch -1 4 SHARP))
        (gsharpsharp . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
        (aflatflat . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
        (aflat . ,(ly:make-pitch -1 5 FLAT))
        (a . ,(ly:make-pitch -1 5 NATURAL))
        (asharp . ,(ly:make-pitch -1 5 SHARP))
        (asharpsharp . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
        (bflatflat . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
        (bflat . ,(ly:make-pitch -1 6 FLAT))
        (b . ,(ly:make-pitch -1 6 NATURAL))
        (bsharp . ,(ly:make-pitch -1 6 SHARP))
        (bsharpsharp . ,(ly:make-pitch -1 6 DOUBLE-SHARP))

        (cff . ,(ly:make-pitch -1 0 DOUBLE-FLAT))
        (cf . ,(ly:make-pitch -1 0 FLAT))
        (cv . ,(ly:make-pitch -1 0 VLAT))
        (ck . ,(ly:make-pitch -1 0 KORON))
        (c . ,(ly:make-pitch -1 0 NATURAL))
        (co . ,(ly:make-pitch -1 0 SORI))
        (cs . ,(ly:make-pitch -1 0 SHARP))
        (css . ,(ly:make-pitch -1 0 DOUBLE-SHARP))
        (cx . ,(ly:make-pitch -1 0 DOUBLE-SHARP))

        (dff . ,(ly:make-pitch -1 1 DOUBLE-FLAT))
        (df . ,(ly:make-pitch -1 1 FLAT))
        (dv . ,(ly:make-pitch -1 1 VLAT))
        (dk . ,(ly:make-pitch -1 1 KORON))
        (d . ,(ly:make-pitch -1 1 NATURAL))
        (do . ,(ly:make-pitch -1 1 SORI))
        (ds . ,(ly:make-pitch -1 1 SHARP))
        (dss . ,(ly:make-pitch -1 1 DOUBLE-SHARP))
        (dx . ,(ly:make-pitch -1 1 DOUBLE-SHARP))

        (eff . ,(ly:make-pitch -1 2 DOUBLE-FLAT))
        (ef . ,(ly:make-pitch -1 2 FLAT))
        (ev . ,(ly:make-pitch -1 2 VLAT))
        (ek . ,(ly:make-pitch -1 2 KORON))
        (e . ,(ly:make-pitch -1 2 NATURAL))
        (eo . ,(ly:make-pitch -1 2 SORI))
        (es . ,(ly:make-pitch -1 2 SHARP))
        (ess . ,(ly:make-pitch -1 2 DOUBLE-SHARP))
        (ex . ,(ly:make-pitch -1 2 DOUBLE-SHARP))

        (fff . ,(ly:make-pitch -1 3 DOUBLE-FLAT))
        (ff . ,(ly:make-pitch -1 3 FLAT))
        (fv . ,(ly:make-pitch -1 3 VLAT))
        (fk . ,(ly:make-pitch -1 3 KORON))
        (f . ,(ly:make-pitch -1 3 NATURAL))
        (fo . ,(ly:make-pitch -1 3 SORI))
        (fs . ,(ly:make-pitch -1 3 SHARP))
        (fss . ,(ly:make-pitch -1 3 DOUBLE-SHARP))
        (fx . ,(ly:make-pitch -1 3 DOUBLE-SHARP))

        (gff . ,(ly:make-pitch -1 4 DOUBLE-FLAT))
        (gf . ,(ly:make-pitch -1 4 FLAT))
        (gv . ,(ly:make-pitch -1 4 VLAT))
        (gk . ,(ly:make-pitch -1 4 KORON))
        (g . ,(ly:make-pitch -1 4 NATURAL))
        (go . ,(ly:make-pitch -1 4 SORI))
        (gs . ,(ly:make-pitch -1 4 SHARP))
        (gss . ,(ly:make-pitch -1 4 DOUBLE-SHARP))
        (gx . ,(ly:make-pitch -1 4 DOUBLE-SHARP))

        (aff . ,(ly:make-pitch -1 5 DOUBLE-FLAT))
        (af . ,(ly:make-pitch -1 5 FLAT))
        (av . ,(ly:make-pitch -1 5 VLAT))
        (ak . ,(ly:make-pitch -1 5 KORON))
        (a . ,(ly:make-pitch -1 5 NATURAL))
        (ao . ,(ly:make-pitch -1 5 SORI))
        (as . ,(ly:make-pitch -1 5 SHARP))
        (ass . ,(ly:make-pitch -1 5 DOUBLE-SHARP))
        (ax . ,(ly:make-pitch -1 5 DOUBLE-SHARP))

        (bff . ,(ly:make-pitch -1 6 DOUBLE-FLAT))
        (bf . ,(ly:make-pitch -1 6 FLAT))
        (bv . ,(ly:make-pitch -1 6 VLAT))
        (bk . ,(ly:make-pitch -1 6 KORON))
        (b . ,(ly:make-pitch -1 6 NATURAL))
        (bo . ,(ly:make-pitch -1 6 SORI))
        (bs . ,(ly:make-pitch -1 6 SHARP))
        (bss . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
        (bx . ,(ly:make-pitch -1 6 DOUBLE-SHARP))
)


% Define accidental symbols. 
% Really need to have accidentals.koron and accidentals.sori

persianGlyphs = #`((-3/10 . "accidentals.mirroredflat")
       (1/5 . "accidentals.sharp.slashslash.stem")
       (0 . "accidentals.natural")
       (1/2 . "accidentals.sharp")
       (-1/2 . "accidentals.flat")
       (-1/10 . "")
       (-3/5 . "")
       (-1 . "accidentals.flatflat")
       ( 1 . "accidentals.doublesharp")
)


\layout {
  \context {
    \Score
    \override KeySignature #'glyph-name-alist = \persianGlyphs
    \override Accidental #'glyph-name-alist = \persianGlyphs
    \override AccidentalCautionary #'glyph-name-alist = \persianGlyphs
    \override TrillPitchAccidental #'glyph-name-alist = \persianGlyphs
    \override AmbitusAccidental #'glyph-name-alist = \persianGlyphs
  }
}

pitchnames = \pitchnamesEnglish

#(ly:parser-set-note-names parser pitchnames)

%{
Define key signatures for Persian modes

Instead of the \key command use e.g. for dastgah shur on D:

 \set Staff.keySignature = \shurD

There are fewer scales than dastgah's in Persian music, and each dastgah
can  have many  scales.  So  I provide  here key  signatures  for scales
(modes) named after representative dastgahs featuring this scale.

Dastgah shur can  have the 5th degree natural or  koron, so two versions
are  provided   (shur,  shurk).   Secondary   dastgahs  dashti,  abuata,
bayat-e-tork  have  the same  signature  as  shur,  and derived  dastgah
afshari has signature  shurk.  Nava on G is like shur  on D (4th apart).
Scale of segah is shurk. Other scales are esfahan (homayoun on C is like
esfahan on G, a 5th apart), chahargah, and mokhalef-segah.  For dastgahs
mahur and rast-panjgah we just use the major scale.

Each  key  signature symbol  is  appended  by  a capitalized  "key"  (or
"finalis").  If  you want to use  the \transpose command  you'll have to
manually adjust the key signature of the scale.

All the various  modulatory gushes in all dastgah's  can be notated with
these  key  signatures with  the  exception  of  delkash in  mahur,  but
traditionally the peculiar accidentals there are notated explicitly.

In  summary  I  provide  key  signatures  for:  (shur,  shurk,  esfahan,
chahargah, mokhalefsegah).

%}

shurC = #`(
    (1 . ,KORON)
    (2 . ,FLAT)
    (5 . ,FLAT)
    (6 . ,FLAT)
  )

shurD = #`(
    (2 . ,KORON)
    (6 . ,FLAT)
  )

shurE = #`(
    (3 . ,SORI)
  )

shurF = #`(
    (1 . ,FLAT)
    (2 . ,FLAT)
    (4 . ,KORON)
    (5 . ,FLAT)
    (6 . ,FLAT)
  )

shurG = #`(
    (2 . ,FLAT)
    (5 . ,KORON)
    (6 . ,FLAT)
  )

shurA = #`(
    (6 . ,KORON)
  )

shurB = #`(
    (0 . ,SORI)
    (3 . ,SHARP)
  )

shurkC = #`(
    (1 . ,KORON)
    (2 . ,FLAT)
    (4 . ,KORON)
    (5 . ,FLAT)
    (6 . ,FLAT)
  )

shurkD = #`(
    (2 . ,KORON)
    (5 . ,KORON)
    (6 . ,FLAT)
  )

shurkE = #`(
    (3 . ,SORI)
    (6 . ,KORON)
  )

shurkF = #`(
    (0 . ,KORON)
    (1 . ,FLAT)
    (2 . ,FLAT)
    (4 . ,KORON)
    (5 . ,FLAT)
    (6 . ,FLAT)
  )

shurkG = #`(
    (1 . ,KORON)
    (2 . ,FLAT)
    (5 . ,KORON)
    (6 . ,FLAT)
  )

shurkA = #`(
    (2 . ,KORON)
    (6 . ,KORON)
  )

shurkB = #`(
    (0 . ,SORI)
    (3 . ,SORI)
  )


esfahanC = #`(
    (2 . ,FLAT)
    (5 . ,KORON)
  )

esfahanD = #`(
    (0 . ,SHARP)
    (6 . ,KORON)
  )

esfahanE = #`(
    (0 . ,SORI)
    (1 . ,SHARP)
    (3 . ,SHARP)
  )

esfahanF = #`(
    (1 . ,KORON)
    (5 . ,FLAT)
    (6 . ,FLAT)
  )

esfahanG = #`(
    (2 . ,KORON)
    (3 . ,SHARP)
    (6 . ,FLAT)
  )

esfahanA = #`(
    (3 . ,SORI)
    (4 . ,SHARP)
  )

esfahanB = #`(
    (0 . ,SHARP)
    (3 . ,SHARP)
    (4 . ,SORI)
    (5 . ,SHARP)
  )


mokhalefsegahC = #`(
    (2 . ,FLAT)
    (5 . ,KORON)
    (6 . ,KORON)
  )

mokhalefsegahD = #`(
    (0 . ,SORI)
    (6 . ,KORON)
  )

mokhalefsegahE = #`(
    (0 . ,SORI)
    (1 . ,SORI)
    (3 . ,SHARP)
  )

mokhalefsegahF = #`(
    (1 . ,KORON)
    (2 . ,KORON)
    (5 . ,FLAT)
    (6 . ,FLAT)
  )

mokhalefsegahG = #`(
    (2 . ,KORON)
    (3 . ,SORI)
    (6 . ,FLAT)
  )

mokhalefsegahA = #`(
    (3 . ,SORI)
    (4 . ,SORI)
  )

mokhalefsegahB = #`(
    (0 . ,SHARP)
    (3 . ,SHARP)
    (4 . ,SORI)
    (5 . ,SORI)
  )


chahargahC = #`(
    (1 . ,KORON)
    (5 . ,KORON)
  )

chahargahD = #`(
    (0 . ,SHARP)
    (2 . ,KORON)
    (3 . ,SHARP)
    (6 . ,KORON)
  )

chahargahE = #`(
    (0 . ,SORI)
    (1 . ,SHARP)
    (3 . ,SORI)
    (4 . ,SHARP)
  )

chahargahF = #`(
    (1 . ,KORON)
    (4 . ,KORON)
    (6 . ,FLAT)
  )

chahargahG = #`(
    (2 . ,KORON)
    (3 . ,SHARP)
    (5 . ,KORON)
  )

chahargahA = #`(
    (0 . ,SHARP)
    (3 . ,SORI)
    (4 . ,SHARP)
    (6 . ,KORON)
  )

chahargahB = #`(
    (0 . ,SORI)
    (1 . ,SHARP)
    (3 . ,SHARP)
    (4 . ,SORI)
    (5 . ,SHARP)
  )





reply via email to

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