lilypond-user
[Top][All Lists]
Advanced

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

Re: Microtones Approx 1/16


From: Joseph Rushton Wakeling
Subject: Re: Microtones Approx 1/16
Date: Sun, 17 Jun 2012 17:22:20 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120430 Thunderbird/12.0.1

On 16/06/12 03:24, Jonghyun Kim wrote:
How can I use and hear(midi) 1/16 microtones?

I can write and hear {c cih cisih...} But I don't know more...

1/16-tone intervals are supported but not out-of-the-box, you will have to define your own note-names and map those to corresponding accidentals.

Keith O'Hara's suggestion to look at the Makam setup is a good one. If you're using Linux you should be able to find makam.ly in /usr/share/lilypond/[version-number]/ly/ -- I guess there will be a corresponding directory in the Program Files for Windows -- and going through this should give you a good idea of how to create your own custom accidental setup.

You can also look in scm/define-note-names.scm for the more standard pitch definitions used by default in LilyPond with different languages (Dutch, German, English, ...).

Let's go through this step by step:

(1) defining note alteration values
--------------------------------------

In makam.ly the file opens with some definitions of note alteration values:

#(define-public EKSIK-IKI 5/18)
#(define-public EKSIK-UC 6/18)

#(define-public KOMA 1/9)
#(define-public BAKIYE 4/9)
#(define-public KUCUK 5/9)
#(define-public BUYUKMUCENNEB 8/9)

This is just defining a variable with those names (KOMA, BAKIYE, KUCUK, etc.) to be equal to those values. So you'll want to do something like,

#(define-public SIXTEENTH-SHARP 1/16)
#(define-public EIGHTH-SHARP 1/8)

... and so on as required; bear in mind that Lilypond by default has defined SHARP (=1/2), SEMI-SHARP (=1/4), THREE-Q-SHARP (=3/4), and corresponding values for flats (FLAT = -1/2, SEMI-FLAT = -1/4, ...).


(2) defining note names
-------------------------

Once you've got all your alteration values defined, you can define note names. This is a mapping between the name of a pitch that you would write in a LilyPond source file (e.g. c, ces, ceh, ...) and a corresponding note name and alteration.

In makam.ly you see:

makamPitchNames = #`(
  (c . ,(ly:make-pitch -1 0 NATURAL))
  (d . ,(ly:make-pitch -1 1 NATURAL))
  (e . ,(ly:make-pitch -1 2 NATURAL))
  (f . ,(ly:make-pitch -1 3 NATURAL))
  (g . ,(ly:make-pitch -1 4 NATURAL))
  (a . ,(ly:make-pitch -1 5 NATURAL))
  (b . ,(ly:make-pitch -1 6 NATURAL))

  (cc . ,(ly:make-pitch -1 0 KOMA))
  (dc . ,(ly:make-pitch -1 1 KOMA))
  (ec . ,(ly:make-pitch -1 2 KOMA))
  (fc . ,(ly:make-pitch -1 3 KOMA))
  (gc . ,(ly:make-pitch -1 4 KOMA))
  (ac . ,(ly:make-pitch -1 5 KOMA))
  (bc . ,(ly:make-pitch -1 6 KOMA))

  (cb . ,(ly:make-pitch -1 0 BAKIYE))
  (db . ,(ly:make-pitch -1 1 BAKIYE))
  (eb . ,(ly:make-pitch -1 2 BAKIYE))
  (fb . ,(ly:make-pitch -1 3 BAKIYE))
  (gb . ,(ly:make-pitch -1 4 BAKIYE))
  (ab . ,(ly:make-pitch -1 5 BAKIYE))
  (bb . ,(ly:make-pitch -1 6 BAKIYE))

  ... etc. ...

What this is doing is saying that a written c corresponds to a note in octave -1 (i.e. the octave below middle C), with note name 0 (i.e. staff position C) and NATURAL alteration (i.e. no alteration).

And by comparison, a written fc corresponds to a note in octave -1, with note name 3 (i.e. staff position F), and KOMA alteration, i.e. +1/9 of a tone.

So you'd want to define pitches something like

sixteenthPitchNames = #`(
  (c . ,(ly:make-pitch -1 0 NATURAL))
  (d . ,(ly:make-pitch -1 1 NATURAL))
  (e . ,(ly:make-pitch -1 2 NATURAL))
  (f . ,(ly:make-pitch -1 3 NATURAL))
  (g . ,(ly:make-pitch -1 4 NATURAL))
  (a . ,(ly:make-pitch -1 5 NATURAL))
  (b . ,(ly:make-pitch -1 6 NATURAL))

  (csixteenthsharp . ,(ly:make-pitch -1 0 SIXTEENTH-SHARP))
  (dsixteenthsharp . ,(ly:make-pitch -1 1 SIXTEENTH-SHARP))
  (esixteenthsharp . ,(ly:make-pitch -1 2 SIXTEENTH-SHARP))
  (fsixteenthsharp . ,(ly:make-pitch -1 3 SIXTEENTH-SHARP))
  (gsixteenthsharp . ,(ly:make-pitch -1 4 SIXTEENTH-SHARP))
  (asixteenthsharp . ,(ly:make-pitch -1 5 SIXTEENTH-SHARP))
  (bsixteenthsharp . ,(ly:make-pitch -1 6 SIXTEENTH-SHARP))

  (ceighthsharp . ,(ly:make-pitch -1 0 EIGHTH-SHARP))
  (deighthsharp . ,(ly:make-pitch -1 1 EIGHTH-SHARP))
  (eeighthsharp . ,(ly:make-pitch -1 2 EIGHTH-SHARP))
  (feighthsharp . ,(ly:make-pitch -1 3 EIGHTH-SHARP))
  (geighthsharp . ,(ly:make-pitch -1 4 EIGHTH-SHARP))
  (aeighthsharp . ,(ly:make-pitch -1 5 EIGHTH-SHARP))
  (beighthsharp . ,(ly:make-pitch -1 6 EIGHTH-SHARP))

... and so on for 3/16, 1/4, and however many other accidental alterations you want both sharp and flat (unfortunately this is a bit of a drawn-out process the larger your spectrum of pitch alterations).


(3) defining accidentals
--------------------------

Finally, you need to map your pitch alterations to accidental symbols. You can see in makam.ly:

makamGlyphs = #`((1 . "accidentals.doublesharp")
       (8/9 . "accidentals.sharp.slashslashslash.stemstem")
       (5/9 . "accidentals.sharp.slashslashslash.stem")
       (4/9 . "accidentals.sharp")
       (1/9 . "accidentals.sharp.slashslash.stem")
       (0 . "accidentals.natural")
       (-1/9 . "accidentals.mirroredflat")
       (-5/18 . ,(if eksikMirroredSlashedFlat
                 "accidentals.mirroredflat.backslash"
                 "accidentals.mirroredflat"))
       (-6/18 . ,(if eksikMirroredSlashedFlat
                 "accidentals.mirroredflat.backslash"
                 "accidentals.mirroredflat"))
       (-4/9 . "accidentals.flat.slash")
       (-5/9 . "accidentals.flat")
       (-8/9 . "accidentals.flat.slashslash")
       (-1 . "accidentals.flatflat"))

So you'd need to do something corresponding for all the alterations you are interested in using (1, 15/16, 7/8, ....):

sixteenthGlyphs = #`((1 . "accidentals.doublesharp")
        (1/2 . "accidentals.sharp")
        ...etc.

The above should give you an idea of _some_ of the accidental symbols defined in LilyPond. I'm not sure where in the documentation (if anywhere) a complete list of the available symbols can be found; you might have to define your own, which is a process I'm not familiar with. :-(

With all of that done you can then apply this to the score you're working on:

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

I'd recommend to put all of this in a separate .ly file which you can include in your working scores:

\include "sixteenthtones.ly"

As you can see it's a bit of a long and laborious process defining each possible alteration, defining all the corresponding note-names and defining all the mappings to accidentals, but it is doable and will produce correct MIDI playback.

A couple of small caveats: (1) you may run into issues with transposition, if you are producing transposed scores; (2) MIDI output assigns one MIDI channel per staff, so if you have a chord <c gsixteenthflat> it will not produce correct output, as the MIDI alteration used to alter the pitch by -1/16 will apply to both notes. However you may be able to work around this somewhat: see http://www.lilypond.org/doc/v2.14/Documentation/notation/creating-midi-files for more details.



reply via email to

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