lilypond-devel
[Top][All Lists]
Advanced

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

Request for comments: Redesign of TimeSignature


From: Juergen Reuter
Subject: Request for comments: Redesign of TimeSignature
Date: Mon, 20 May 2002 18:02:01 +0200 (CEST)

Hi, all!

>From a mensural point of view, lily's handling of meter is currently
totally broken (both, program logic and fonts).  Therefore, I am
planning to reimplement the code, trying to keep backwards compatbile
to modern notation.  Since this will affect various parts of lily (at
least the parser, bar checks, gourlay/note spacing, midi performing,
and possibly some more), I would like to discuss this before actually
going ahead.  So, here is my suggestion for the redesign of the user's
interface for meter handling.  Any comments are appreciated.

a) New syntax of the \time command request:
===========================================

time                ::= '\time'
                        beats_per_bar
                        [ '[' modus ']' ]
                        [ '/' beat_unit ]
                        [ '-' transcription_shift ].
beats_per_bar       ::= BARE_UNSIGNED.          %%% Default value: '2'
modus               ::= [ [ [ maximodus ':' ] modus ':' ] tempus ':' ]
                        prolatio.
maximodus           ::= BARE_UNSIGNED.          %%% Default value: '2'
modus               ::= BARE_UNSIGNED.          %%% Default value: '2'
tempus              ::= BARE_UNSIGNED.          %%% Default value: see
below
prolatio            ::= BARE_UNSIGNED.          %%% Default value: see
below
beat_unit           ::= BARE_UNSIGNED.          %%% Default value: '4'
transcription_shift ::= BARE_UNSIGNED.          %%% Default value: '2'

With the given defaults, any meter always expands to the following
form:

n[n:n:n:n]/n-n

(where 'n' designates a bare unsigned intger).

The default values for tempus and prolatio evaluate from the values of
beats_per_bar and beat_unit.  They are computed as follows:

beats_per_bar     [tempus:prolatio]
9                      [3:3]
3                      [3:2]
6                      [2:3]

(Note: this scheme formally resembles the difference in proportions
between 3/4 and 6/8 meter: 3/4 divides into 3 quarternotes, while 6/8
divides into 2 dotted quarter notes.)

In all other cases, [tempus:prolatio] defaults to [2:2].

Examples for the expansion:

4/4   -->  4[2:2:2:2]/4-2
[2:3] -->  4[2:2:2:3]/4-2

b) Semantics:
=============

Beats per bar:
--------------
The current semantics of lilypond regarding beats per bar is (as far
as I can see) maintained.

Beat unit:
----------
The current semantics of lilypond regarding the unit of beats is (as
far as I can see) maintained.


Maximodus:
----------
This number defines into how many longas a maxima devides.  Valid
values are 2 (maximodus imperfectum), which is the current behaviour
of lilypond, and 3 (maximodus perfectum), which has to be implemented.
This affects (at least) bar checks, note spacing, and midi
performance.

Modus:
------
This number defines into how many breves a longa devides.  Valid
values are 2 (modus imperfectum), which is the current behaviour of
lilypond, and 3 (modus perfectum), which has to be implemented.  This
affects (at least) bar checks, note spacing, and midi performance.

Tempus:
-------
This number defines into how many semibreves a brevis devides.  Valid
values are 2 (tempus imperfectum), which is the current behaviour of
lilypond, and 3 (tempus perfectum), which has to be implemented.  This
affects (at least) bar checks, note spacing, and midi performance.

Prolatio:
---------
This number defines into how many minimas a semibrevis devides.
Valid values are 2 (prolatio minor), which is the current behaviour of
lilypond, and 3 (prolatio major), which has to be implemented.  This
affects (at least) bar checks, note spacing, and midi performance.

Transcription shift:
--------------------
This is used for automatic transcription of mensural music as well as
proper selection of mensural time signature symbols through the
evaluation of the mensural beat unit (see below).

Signature symbol selection:
---------------------------
Time signatures can be engraved by graphical mensural meter symbols,
by numbers, or by a mixture of both.  Grob TimeSignature should have a
property called "style" with the following possible values (the
default value is "default"):

value:      meaning:
default     For 2/2 and 4/4, use graphical mensural meter symbols;
            for all other meters, use numbers.
mensural    Use graphical mensural meter symbols only, where possible;
            use numbers only where no graphical symbol is available or
            unique.
numbers     Use numbers only, even for 2/2 and 4/4.

The currently supported value "old" should be obsoleted; "mensural"
should be used instead.

Definition: Mensural beat unit
------------------------------
The mensural beat unit evaluates by reversely applying the
transcription shift to the beat unit.  For example, "4-2" means to
shift from quarter note duration (4) two times (2) to the next longer
duration.  This results in a whole note (1).  Hence, "4-2" results in
"1".  Here is a summary of the most important cases:

4-0 --> 4
4-1 --> 2
4-2 --> 1
2-0 --> 2
2-1 --> 1
2-2 --> \breve

Mensural time signature symbols:
--------------------------------
The following table uniquely maps the tupel [tempus:prolatio] to the
basic forms of mensural meter symbols.  In the table, "C" means a
half-circle, "O" a full-circle.  "." means that a thick dot is added
in the center of the circle or half-circle.  The values of maximodus
and modus are not considered for the symbol.

[tempus:prolatio]     symbol
[3:3]                 O.
[3:2]                 O
[2:3]                 C.
[2:2]                 C

If the mensural beat unit evaluates to \breve, a vertical line ("|")
is to be drawn through the circle or half-circle.  The width of the
vertical line shall be thin enough so that the dot in the center of
the (half-)circle, if any, still can be seen.

Example: "alla breve" meter 2/2 expands to 2[2:2:2:2]/2-2, hence we
get the symbol "C" for tempus=2, prolatio=2.  Since 2-2 evaluates to a
mensural beat unit of \breve, a vertical line has to be added.  Thus,
the resulting symbol for 2/2 ("alla breve") is "C" with a vertical
line.

If the user wants to apply mensural meter symbols, a mensural beat
unit other than 1 or \breve should result in a warning (user's fault),
and a value of 1 for error recovery purposes only should be assumed.

Number-style signatures:
------------------------
If beat_unit is 1, do not print it, unless (transcription_shift != 0)
and we are in transcribing mode.  Otherwise, print
beats_per_bar/beat_unit.  If the modus is [2:2:2:2], do not print it
at all.  If (maximodus=2) and (modus=2), and only if
([tempus:prolatio] != [2:2]), then print [tempus:prolatio], but
neither maximodus, nor modus.  If (maximodus!=2) or (modus!=2), print
the full mode.

Automatic transcription:
------------------------
There are two main tasks of automatic transcription:

(i) preprocess the durations of each note to transform their
representation in a mode other than [2:2:2:2] to the proper
representation in [2:2:2:2] mode;

(ii) according to the transcription shift value, shorten the duration
of all notes consistently by a constant factor.

Example:

Assume time 3[2:2:2:3]/4-2.  Then
\breve 1 1 1
transcribes (according to (i)) from [2:3] to [2:2]:
\breve 2/3*1 2/3*1 2/3*1
which is (according to (ii)) shifted by "-2" to
2 2/3*4 2/3*4 2/3*4
i.e.
2 \times 2/3 { 4 4 4 }

Further notes:
--------------
This design is not yet complete.  It does not regard colored notes
(i.e. tuplets in mensural notation), and special things like proportio
sesquialtera.  It also seems that there were many exceptions from the
basic rules in the history of music notation, so may be a more
flexible scheme is needed (thereby possibly loosing musical meaning).
This probably needs some more investigation.

Greetings,
Juergen




reply via email to

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