This page is intended for developers of the Bol Processor BP3 (read installation). It is not a formal description of the algorithms carried by the console's C code, but rather an illustration of their management of musical processes, which may be useful for checking or extending algorithms.
All examples are contained in the file "-da.checkPoly" in the "ctests" folder in the distribution.
Syntax of silences
In the Bol Processor's data/grammar syntax, silences (rests in conventional musical terminology) are represented either by a hyphen '-' for a single unit duration, or by integer ratios to specify a more complex duration:
"4" is a rest of 4 units duration
"5/3" is a rest of (approximately) 1.666-unit duration
"3 1/2" is a rest of 3.5 units duration
For example, "C4 C5 3/2 D5 E5" results in the following piano roll with a rest of 3/2 (1.5) units starting on beat 2 and ending on beat 3.5:
Piano roll of item "C4 C5 3/2 D5 E5"
In this tutorial we will use the default metronome value = 60 beats per minute.
Another simple example is {3 1/2, C3 D3 B2}, which is the sequence of notes "C3 D3 B2" constrained to a total duration of 3 1/2 (3.5) beats. This silence is the first field of the polymetric expression (explained below). This results in the following piano roll:
or equivalently the sound-object graph:
Syntax of tempo
Any sequence of symbols conforming to the syntax of Bol Processor is processed as a polymetric expression. Typical forms are:
field 1, field2 indicates that field1 and field2 should be superimposed and the total duration should be that of field1;
field1.field2 indicates that field1 and field2 should be sequential, with the duration of each field being that of field1;
{expression} is equivalent to expression.
Brackets '{' and '}' are used to create multi-level expressions.
A number of examples of polymetric expressions can be found in the Polymetric structures tutorial.
For example, {{C4 D4, E4 F4 G4}, E5} gives the following structure:
Item {{C4 D4, E4 F4 G4}, E5} on a sound-object graph
In order to interpret this structure, the Bol Processor needs to insert explicit tempo values into the expression. In fact, in this case, the most compact representation would be with explicit tempo values:
*1/1 {{C4 D4,*2/3 E4 F4 G4} ,*2/1 E5}
Expressions such as "*2/3" indicate that the duration of each note (or sound-object) should be multiplied by 2/3, regardless of the preceding statements. This means that the durations of notes "E4", "F4" and "G4" should be 2/3 seconds as shown in the diagram.
Creating the compact representation with its explicit tempo markers may require recursive calls of a sophisticated procedure called PolyExpand() in the "Polymetric.c" file.
At this stage it is important not to confuse the notations:
"2/3" is a silence of duration 2/3 beats;
"_tempo(2/3)" multiplies the current tempo by 2/3. This is a relative tempo marker;
"*2/3" sets the current duration of the units to 2/3 of the metronome period. This is an absolute tempo marker. Similarly, "*4" multiplies durations by 4, and "*1/5" or "/5" divides them by 5 — whereas "1/5" is a 1/5 beat silence.
The third syntax is the one used by the Bol Processor's time-setting algorithms. Despite its syntactic validity, we do not recommend using it in grammars and data, as it can produce conflicting durations in polymetric structures. For example, {*2/1 A4 B4, *3/1 A5 B5} makes no sense because it tries to force the first field to have a duration of 2 x 2 = 4 beats and the second field to have a duration of 3 x 2 = 6 beats. The correct (never contradictory) way to change a tempo in data or grammars is to use the "_tempo(x)" performance tool.
Expanding a polymetric expression
In the previous paragraph we saw that {{C4 D4, E4 F4 G4}, E5} is internally represented as *1/1 {{C4 D4,*2/3 E4 F4 G4} ,*2/1 E5}. This internal representation is the most compact with explicit tempo markings. Therefore, it is the one that is maintained through all the steps of time setting.
Humans may prefer to see a more comprehensive representation called the expanded polymetric expression:
/3 {{C4_ _ D4_ _, E4_ F4_ G4_} , E5_ _ _ _ _}
This is done by clicking the EXPAND button on a data page. Underscores'_' represent extensions of the duration of the previous unit. These should not be confused with '-' (silence). To make things clearer, let us replace a '_' with a '-':
/3 {{C4_ _ D4_ _, E4_ F4 - G4_}, E5_ _ _ _ _}
This results in the following structure, where "F4" is not extended:
The expanded polymetric expression may become too large for a human observer. In this case only the compact version will be returned.
In the code of the Bol processor console, sound objects (of all kinds) are identified by numbers. The variable used to identify them in algorithms is always 'k' or 'kobj'. There is an option (in the code) to display object identifiers on a graph, which is set by the SHOWEVERYTHING constant. If set to true, this would be the previous sound object graph:
Notes "C4", "D4", etc. have identifiers kobj = 2, 3, etc. The identifier "0" is reserved for extensions '_' and "1" for silences "-", none of which are shown in the graph. An exception is object #8, labelled <<->>, which is an out-time (zero duration) "silence" marking the end of the structure to facilitate its synchronisation with the next item.
The phase diagram
Given a compact polymetric structure, time-setting algorithms require a table in which each column is assigned a date (in physical time). The cells of this phase diagram contain the identifiers of the sound-objects, including "0" and "1". It is created by the procedure FillPhaseDiagram() in the file "FillPhaseDiagram.c".
It is easy to imagine that the table would become very large if no compression techniques were used. For example, Liszt's 14th Rhapsody would require no less than 9 x 1021 cells! The reason is that the Bol Processor calculates symbolic durations as integer ratios. A symbolic duration of 5/3 will never be replaced by "1.666" for two reasons: (1) roundings would accumulate as noticeable errors, and (2) we don't know in advance how many decimals we need to keep. The physical duration of 5/3 beats depends on the metronome and the sequence of "_tempo(x)" controls that change the tempo.
Let us first consider an unproblematic case. The polymetric expression /3 {{C4_ _ D4_ _, E4_ F4 - G4_}, E5_ _ _ _ _} creates the following phase diagram:
In this example, if the metronome is set to 60 beats per minute, the physical duration assigned to each column is 1/3 second = 333 ms. As the graph becomes larger, this physical duration may decrease beyond the limit. This is where quantization comes in. It is set to 10 milliseconds by default, which means that two events occurring within 10 ms of each other can be written into the same column. To do this, the compact polymetric structure is rewritten with a compression rate (Kpress) that makes it fit into a phase diagram of suitable size.
If the piece of music lasts 10 minutes, we'll still get 10 x 60000 / 10 = 60000 columns in the table. Filling the phase diagram requires a very high compression rate, for example more than 5 x 1012 for Beethoven's Fugue in B-flat major.
To make matters worse, the algorithm has to deal with sequences of events that fall into the same column. This situation is signalled by the variable toofast, which is obtained by comparing the current tempo with the maximum tempo accepted in the structure. In the case of toofast, each event is written to a new row of the table in such a way as to respect the sequential order of the stream.
So we end up with 12132 lines for the phase table of Beethoven's fugue, in which the longest toofast stream contains 625 events — notes or sound-objects. These 625 events, which occur within a single frame of 10 ms, actually include '_' events which are extensions of notes belonging to the stream.
Dealing with complex ratios
In Bol Processor terminology, an integer ratio p/q is "complex" if either 'p' or 'q' exceeds a limit that depends on the source code. The limit is ULONG_MAX, the maximum value of an unsigned long type, currently 18446744073709551616.
In the code of the Bol Processor console, 'p' and 'q' are actually coded as double floating point numbers whose mantissa can contain as many digits as unsigned long integers. Arithmetic operations are performed on the fractions. Each resulting fraction is checked for complexity by a procedure called Simplify() in the "Arithmetic.c" file:
While 'p' or 'q' is greater than ULONG_MAX, divide 'p' and 'q' by 10;
Divide 'p' and 'q' by their greatest common divisor (GCD).
Part (1) of the Simplify() procedure generates rounding errors, but these represent a few units of very large numbers. In this way, the accuracy of symbolic durations is maintained throughout the computation of complicated polymetric structures.
Complex ratios in silences
Let us check the effect on quantization by playing:
C4 C5 36001/24000 D5 E5
The ratio 36001/24000 cannot be simplified. However, 1/24000 beat would take 0.04 ms which is much less than the 10 ms quantization. So, the ratio can be approximated to 36000/24000 and simplified to 3/2. The final result is therefore "C4 C5 3/2 D5 E5":
Let us now consider "C4 C5 35542/24783 D5 E5" which looks similar, as 35542/24783 (1.43) is close to 1.5. However, the calculation is more complex… Using the 10 ms quantization, the ratio is reduced to 143/100 and the compact polymetric expression is:
The 143/100 silence is now represented as a single '-' (kobj = 1) followed by 142 '_' (kobj = 0). This sequence is toofast because tempomax, the maximum tempo accepted here, would be '50' instead of '100'. The compression rate is Kpress = 2. A full explanation requires the polymetric algorithm explained here.
The process of filling the phase table can be found in "FillPhaseDiagram.c". We call 'ip' the index of the column into which the next event is to be plotted. In the most common situation, e.g. writing "C4 _ _" (object #2), two procedures are called:
Plot() writes '2' (kobj) into column ip
PutZeros() writes two zeros into the columns ip + 1 and ip +2.
So, "C4 _ _" will have a symbolic duration of 3 units, as expected.
The case is different with a silence of 143/100, because the toofast situation requires that less than 142 '_' should be inserted after '-'. To this end, a (floating-point) variable part_of_ip is initialised to 0 and gets incremented by a certain value until it exceeds Kpress. Then Plot() and PutZeros() are called, part_of_ip is reset and a new cycle starts… until all 142 '_' of the compact polymetric expression have been read.
The increment of part_of_ip in each cycle is:
part_of_ip += Kpress * tempomax / tempo;
In this simple example, tempo = 100, tempomax = 50 and Kpress =2. So the increment is 1 and part_of_ip will reach the value of Kpress after 2 cycles. This means that every other '_' will be skipped.
Incrementing ip requires a more complicated process. The algorithm keeps track of the column numbers in the table as it would be created with Kpress = 1. These numbers are usually much larger than those of the actual phase diagram. The large number i is mapped to ip using the Class() function:
unsigned long Class(double i) { unsigned long result; if(Kpress < 2.) return((unsigned long)i); result = 1L + ((unsigned long)(floor(i) / Kpress)); return(result); }
So, each cycle of reading '_' in the toofast situation ends up incrementing i and then updating ip via the Class(i) function. The increment of i is:
prodtempo - 1
in which:
prodtempo = Prod / tempo
The variables Prod and Kpress are calculated after the compact polymetric expression has been created. Prod is the lowest common multiple (LCM) of all tempo values, i.e. '100' in this example.
Let us use the integers Pclock and Qclock to define the metronome value as Qclock * 60 / Pclock. If the metronome is set to its default value of 60 bpm, then Pclock = Qclock = 1.
The following (simplified) code calculates Kpress and updates Prod accordingly:
_tempo(80/39){F1,C2}_tempo(80/39){2,F2}667/480 {53/480,G1,G2}{1/2,Ab1,Ab2}{1/2,B1,B2} Metronome is set to 60 beats per minute.
Let us calculate the duration of the silence between "F2" and "G1" in two ways:
In the source polymetric expression, this silence is notated as 667/480. Since the tempo is 80/39, its duration should be 667/480 * 39/80 = 0.67 beats (confirmed by the graph).
In the compact polymetric expression, we find one '-' object followed by 666 '_' prolongations at a speed of *13/12800. The duration is therefore 667 * 13/12800 = 0.67 beats.
It would be difficult to follow the algorithm step by step because Prod = 2496100 , Kpress = 24961 and tempomax = Prod / Kpress = 100. Within the silence, tempo = 985 and the increment of part_of_ip is 24961 * 100 / 985 = 2 534.11167… The number of cycles before part_of_ip reaches the value of Kpress is ceil(9.85) = 10. This means that 9 out of 10 objects '_' have been skipped.
Conclusion
These examples and explanations provide insight into the code in the "FillPhaseDiagram.c" file of the console code. We hope that it will be useful for future development or migration of algorithms.
This is also a demonstration of the complexity of time calculations when dealing with polymetric structures capable of carrying all the details of real musical works — see Importing MusicXML scores for "real life" examples.
Images of tempered scales created by the Bol Processor
This article demonstrates how the Bol Processor can apply different historical temperaments to well-known Baroque compositions. Showcases offer the opportunity to hear these pieces in each tuning, enabling a comparison of the effect of different tunings on the sound and consonance of the music. The broader aim is to challenge the idea that equal temperament is always the best option and to encourage more research into historical tuning methods.
The following are Bol Processor + Csound interpretations of J.-S. Bach's Prelude 1 in C major (1722) and François Couperin's Les Ombres Errantes (1730) — both near the end of the Baroque period — using temperament scales (Asselin 2000). The names and tuning procedures follow Asselin's instructions (p. 67-126). Images of the scales have been created using the Bol Processor.
The construction of these scales with the Bol Processor is explained in detail on the Microtonality page. The complete set of scale images is available on this page.
➡ We hope to be able to release better sound demos upon receipt of a set of well-designed C-sound instruments. ("orc" files). My apologies to harpsichord players, tuners and designers!
Let us begin by listening to the piece in equal temperament, the popular tuning of instruments in the electronic age. Unlearned musicians believe that "well-tempered" is the equivalent of "equal-tempered."
➡ Don't hesitate to click on the "Image" links to see circular graphical representations of scale intervals highlighting consonance and dissonance.
The following are traditional temperaments, each of which was designed at a particular time to meet the specific requirements of the musical repertoire en vogue (Asselin 2000 p. 139-180).
H.A. Kellner's BACH in 1975 (p. 101) ➡ ImageBarca in 1786 (p. 106) ➡ ImageBethisy in 1764 (p. 121) ➡ ImageChaumont in 1696 (p. 109) ➡ ImageCorrette in 1753 (p. 111) ➡ ImageD'Alambert-Rousseau 1752-1767 (p. 119) ➡ ImageKirnberger II in 1771 (p. 90) ➡ ImageKirnberger III in 1779 (p. 93) ➡ ImageMarpurg in 1756 (p. 117) ➡ ImagePure minor thirds in 16th century (p. 82) ➡ ImageRameau en do in 1726 (p. 113) ➡ ImageRameau en sib in 1726 (p. 115) ➡ ImageSauveur in 1701 (p. 80) ➡ ImageTartini-Vallotti in mid. 18th century (p. 104) ➡ ImageWerckmeister III in 1691 (p. 194) ➡ ImageWerckmeister IV in 1691 (p. 96) ➡ ImageWerckmeister V in 1691 (p. 199) ➡ ImageZarlino in 1558 (p. 85) ➡ Image
The previous example was Zarlino's temperament, not to be confused with the popular "natural scale" of Zarlino, an example of just intonation:
J.S. Bach's disciple Johann Kirnberg (1721-1783) - (source)
J.S. Bach's Well-Tempered Clavier (BWV 846–893) is a collection of two sets of preludes and fugues in all 24 major and minor keys, dated 1722. To judge the validity of a tuning scheme it would be necessary to listen to all the pieces. Readers impatient to know more may be interested in a "computational" approach to the subject, read Bach well-tempered tonal analysis and listen to the results on the page The Well-tempered Clavier.
Fortunately, there are historical clues as to the optimal choice: Friedrich Wilhelm Marpurg received information from Bach's sons and pupils and Johann Kirnberger, one of these pupils, designed tunings that he claimed represented his master's idea of "well-tempered".
On the page Tonal analysis of musical items we show that the analysis of tonal intervals tends to suggest the choice of Kirnberger III rather than Kirnberger II. However, the temperament devised by the French physician Joseph Sauveur in 1701 also seemed to fit better in terms of melodic intervals — and indeed it sounds beautiful… This, in turn, can be challenged by the systematic matching of all the works in books I and II with the tuning schemes implemented on the Bol Processor — see page Bach well-tempered tonal analysis.
François Couperin's Les Ombres Errantes (1730)
Again, my apologies to harpsichord players, tuners and manufacturers!
This piece is from François Couperin's Quatrième livre published in 1730 ➡ read the full score (Creative Commons licence CC0 1.0 Universal). We used it to illustrate the interpretation of mordents when importing MusicXML files.
First, listen to an (excellent) interpretation of this work by the harpsichord player Iddo Bar-Shaï (source: https://youtu.be/DCwkMSTFV_E).
Despite its artistic quality, this performance has some dissonant effects, which are partly masked by the abundance of melodic ornamentation: mordents, trills, etc. Such a departure from the theme of the 'Ombres errantes' cannot be attributed to either the composer or the performer. It is therefore legitimate to question the tuning of the instrument. To do this, we must focus our attention on tonality, even if the sound synthesis seems artificial to listeners whose attention is focused on temporality, ornamentation and sound quality.
As some of the following temperaments were invented (or documented?) after 1730, it is unlikely that the composer used them. Let's try them all anyway, and find the winner!
Equal temperament ➡ ImageH.A. Kellner's BACH (p. 101) ➡ ImageBarca in 1786 (p. 106) ➡ ImageBethisy in 1764 (p. 121) ➡ ImageChaumont in 1696 (p. 109) ➡ ImageCorrette in 1753 (p. 111) ➡ ImageD'Alambert-Rousseau 1752-1767 (p. 119) ➡ ImageKirnberger II in 1771 (p. 90) ➡ ImageKirnberger III in 1779 (p. 93) ➡ ImageMarpurg in 1756 (p. 117) ➡ ImagePure minor thirds in 16th century (p. 82) ➡ ImageRameau en do in 1726 (p. 113) ➡ ImageRameau en sib in 1726 (p. 115) ➡ ImageSauveur in 1701 (p. 80) ➡ ImageTartini-Vallotti in mid. 18th century (p. 104) ➡ ImageWerckmeister III in 1691 (p. 194) ➡ ImageWerckmeister IV in 1691 (p. 96) ➡ ImageWerckmeister V in 1691 (p. 199) ➡ ImageZarlino in 1558 (p. 85) ➡ ImageZarlino's “natural scale” ➡ Image
Matching harmonic intervals of "Le Petit Rien" with “Rameau en do” temperament (see full image)
The best temperament for this piece might be Rameau en sib, which was devised by Couperin's contemporary Jean-Philippe Rameau for musical works with flats in the key signature (Asselin, 2000 p. 149) — such as the present one. See the Tonal analysis of musical items page for a description of a systematic (automated) analysis that confirms this choice.
We might end up with listening to François Couperin's Le Petit Rien (Ordre 14e de clavecin in D major, 1722), which has two sharps in the key signature, suggesting the use of a Rameau en do temperament.
François Couperin's “Le Petit Rien” (1722), mm = 80, with a “Rameau en do” temperament ➡ Image Source: MusicXML score by Yvan43
Bernard Bel — 2022
Work in progress
Chapter VIII of Pierre-Yves Asselin's book (2000 p. 139-180) contains examples of musical works that illustrate the relevance of specific temperaments. As the scores of many baroque and classical masterpieces are available in the digital format MusicXML, we hope to use Bol Processor's Importing MusicXML scores to transcode them and play these fragments with the suggested temperaments.
Despite the limitations of comparing temperaments on only two musical examples, the aim of this page is to illustrate the notion of "perfection" in sets of tonal intervals — and in music in general. Read the discussion: Just intonation: a general framework. If nothing else, we hope to convince the reader that "equal temperament" is not the "perfect" solution!
Musicians interested in continuing this research and related development can use the beta version of the Bol Processor BP3 to process musical works and create new tuning procedures. Follow the instructions on the Bol Processor ‘BP3’ and its PHP interface page to install BP3 and learn its basic operation. Download and install Csound from its distribution page.
References
Asselin, P.-Y. Musique et tempérament. Paris, 1985, republished in 2000: Jobert. Soon available in English.
This article provides an in-depth overview of the Bol Processor, with a particular focus on its ability to import and convert MusicXML scores. It explains how MusicXML, an XML-based format for Western musical notation, is translated into the Bol Processor's unique polymetric structures, which are more compact and computationally flexible. It details the handling of various aspects of this conversion, including handling tempo, dynamics, ornamentation such as mordents, turns, trills, arpeggios, slurs, staccato, and pedals, as well as microtonality. It also discusses the advantages of using the Bol Processor's data format for reworking musical fragments with grammars and emphasises the compactness and temporal accuracy of its symbolic notation compared to other digital music formats.
MusicXML is a very popular XML-based file format for representing western musical notation. It is designed for the exchange of scores between music notation software and other musical devices.
Inside a MusicXML file…
A MusicXML file contains all the information needed to represent a musical score in western music notation. It also contains data that can be processed by a sound device to "play" the score. The basic representation may sound mechanical, lacking control over volume, velocity, tempo, etc., which are not accurately represented on printed scores. As such, it can be used as a tool for checking the representation of a musical work, or as a teaching aid for deciphering scores.
In addition to its use as an exchange format between score editors, many MusicXML files are edited by groups of musicians — such as the MuseScore community — to embed intensity and tempo information. Sound examples are given below.
Importing scores from music archives into the Bol Processor makes it possible to use them (or fragments of them) in grammars that produce variations. Their translation as polymetric structures provides a much broader perspective than the original XML format. A typical example is Mozart's musical dice game. We hope to receive more sophisticated creative work.
Furthermore, these musical works can be played using specific tunings, as detailed on the Microtonality page. This can be achieved by the Bol Processor with either through Csound synthesis or by employing MIDI microtonality. The study of microtonality was an incentive to implement the MusicXML conversion, which makes it possible to enrich Baroque and Classical repertoire works with the variety of meantone temperaments documented by historians.
The MusicXML to Bol Processor converter is fully functional on the PHP interface of BP3. Follow the instructions on the Bol Processor ‘BP3’ and its PHP interface page to install BP3 and learn its basic operation.
Bol Processor's data format
The Bol Processor has its own data format for representing musical items that are intended to produce sound via its MIDI or Csound interface. This format is displayed and stored as plain text.
The syntax of Bol Processor data is based on polymetric structures — read the tutorial on Polymetric structures. A few elementary examples will illustrate this concept:
{A4 B4 C5} is a sequence of three notes "A4", "B4", "C5" played at the metronomic tempo
{A4, C5, E5, A5} is a A minor chord
{la3, do4, mi4, la4} is the same chord in Italian/Spanish/French notation
{dha4, sa5, ga5, dha5} is the same chord in Indian notation
{C4 G4 E4, F3 C4} is a two-level structure calling for the juxtaposition and time alignment of sequences "C4 G4 E4" and "F3 C4", which yields a polyrhythmic structure that may be expanded to {C4_ G4_ E4_, F3__ C4__} in which ‘_’ are prolongations of the preceding notes.
{5, A4 Bb4 C5} is sequence "A4 Bb4 C5", 3 note played over 5 beats. Their durations are therefore multiplied by 5/3.
{7/16, F#3 G3} is sequence "F#3 G3" played over 7/16 beats. The duration of each note is multiplied by (7/16) / 2 = 7/32.
Unlike conventional western musical scores, polymetric structures can be recursively embedded with no limit to their complexity (except the machine). Some complex structures are discussed on the page Harm Visser's examples. All timings calculations are performed on integer ratios to achieve the best accuracy compatible with the system.
Why do we need to import scores?
The Bol Processor's data format is overall compact, computable and humanly comprehensible. However, its compactness makes it difficult to edit complex polymetric structures. In practice, these are created by generative grammars…
A grammar that produces pieces of tonal music may require "building blocks" extracted from existing musical works. So far (in Bol Processor BP1 and BP2) it has been possible to map the computer keyboard to arbitrary characters representing drum strokes (see the initial project), or to capture notes using common music notation — three different conventions: Italian/Spanish/French, English and Indian. Sound-objects can also contain Csound scores and/or sequences of instructions imported from MIDI files.
Things get complex when dealing with polyphonic tonal music. Work is in progress on a method of capturing MIDI events (as polymetric structures) in real time. Since musical material exists on scores in Western notation, and these scores have been digitised in interchange formats such as MusicXML, an import procedure that captures the full complexity of the score is a great asset. Mozart's Musical dice game is a good example of this need.
In practice you can pick up and rework fragments of the very large musical repertoire available in MusicXML format, or create your own building blocks with a score editor such as Werner Schweer's MuseScore — a public domain program that works on Linux, Mac and Windows. MuseScore recognises many input/output formats and it can capture music via MIDI or Open Sound Control.
👉 Exporting music produced by the Bol Processor to MusicXML scores is not yet on our agenda. The reason for this is that the model for timing musical events in the Bol Processor (polymetric structures) is more sophisticated (and compact) than that used by score representations derived from Western frameworks. Charles Ames wrote (Exporting to External Formats, 2013):
Of the two formats, MIDI operates at (or below) the level of performance gestures while MusicXML operates note-by-note. Accelerations and ritards, ramped dynamics, pitch bend, and other continuous controls are musical features that MIDI handles well. MusicXML handles these same features clumsily or not at all. Such limitations make it difficult to consider MusicXML as a viable intermediary for MIDI, at least for the foreseeable future.
Importing and converting a MusicXML score
A few public domain MusicXML scores can be found in the "xmlsamples" of the bp3-ctests-main.zip sample set shared on GitHub. Most of them are fragments used to illustrate the format. We start with a very short fragment of "MozartPianoSonata.musicxml", which also has a graphical score:
Mozart's piano sonata, an excerpt in common western music notation
First create a data file, for example "-da.musicXML". The default settings will suffice for this example, but a "-se.musicXML" file may be declared in the data window and you will be prompted to create it. Leave the default settings as they include the graphic display.
To import the MusicXML file, click the Choose File button at the top of the editing form, select the file and click IMPORT.
The machine displays the list of "parts" contained in the score. Each part can be assigned to an instrument, including human voices. This score contains a unique part to be played on an Acoustic Grand Piano, which would be played on channel 1 of a MIDI device. This MIDI channel information appears in the Bol Processor score and can later be mapped to a Csound instrument.
Clicking on CONVERT THEM (or IT) is all that remains to be done!
This will create the following Bol Processor data:
// MusicXML file ‘MozartPianoSonata.musicxml’ converted // Score part ‘P1’: instrument = Acoustic Grand Piano — MIDI channel 1
Imported scores can be played, expanded, exploded and imploded
This may look uncomfortable to read, but remember that a layman would not even be able to make sense of scores in Western music notation! Fortunately, there is now a PLAY button to listen to the piece. By default, it is also saved as a MIDI file, which can be interpreted by a MIDI soft synthesiser such as PianoTeq:
Excerpt of Mozart's piano sonata played by Bol Processor with PianoTeq
The same process can be invoked in the Csound environment. If Csound is installed and responsive, selecting the Csound output format will produce a Csound score immediately converted to an AIFF sound file displayed on the process window:
Playing the same piece via Csound. Note that the duration is 12 seconds (instead of 10) because a silence of 2 seconds (by default) is appended at the end of the track.
Understanding the conversion process
Let us compare the score in common Western notation with its conversion to Bol Processor data. This may be helpful in understanding the features and limitations of MusicXML files. Remember that this format is a complete description of a graphical representation of the musical work. It is up to the musician to add implicit information necessary for a correct (and artistic) rendering of the piece…
Scores of classical works are divided into bars (measures) marked by vertical lines. This score contains 5 measures of equal duration. The MusicXML file contains data indicating that the duration of each measure is 2 beats, i.e. 2 seconds, if the metronome is beating at 60 beats per minute. However, the _tempo(2) doubles the speed, resulting in measures that last 1 second. The third measure contains a chord {2, F#5, A5, D6} of half notes (minims) lasting 2 beats.
The Bol Processor score also shows the five measures, each of which is interpreted as a polymetric structure. At the beginning of each measure, a MIDI channel instruction has been automatically inserted to indicate which part it belongs to.
Let us read the first measure and compare it with its conversion on the score:
The ‘2’ (green colour) is the total duration of the polymetric expression (i.e. the measure). The first two lines are the upper score (in the G key on the picture) while the third line (in the F key on the picture) is the lower score. At the top of the upper score is a half note C#6 interpreted as {2, C#6}. A comma (in red colour) indicates a new field of the polymetric structure that needs to be superimposed on the first field. It contains a chord {C#5, E5, A5} of quarter notes (crotchets) of 1 beat, followed by a rest of 1 beat notated "-".
➡ In the printed score there is an arpeggio on the chord which is ignored for the moment to make the explanations easier. Arpeggios will be considered below.
To complete the field, we need a rest of 1 beat, which is not indicated in the graphical score, although the gap is mentioned in the MusicXML file. In Bol Processor notation, rests can be written as '-' or as integer numbers/ratios. For example, a rest of 3 beats could be notated “---” or {3, -} or {3}, while a rest of 3/4 beats should be notated {3/4, -} or {3/4}.
The lower score contains a sequence that is difficult for a machine to process: three grace notes "A2 C#3 E3". Grace notes have no explicit duration in MusicXML files, so we follow the practice of giving this sequence a duration half that of the following main note, here the first occurrence of "A3", which is declared as eight notes of 1/2 beat. Consequently, the stream of grace notes has a total duration of 1/4 beat and is notated {1/4, A2 C#3 E3}. This is followed by A3 whose length is reduced by one half, so {1/4, A3}. The following 3 occurrences of A3 have a total duration of 3/2 beats, so {3/2, A3 A3 A3}.
The structure of this first measure is made clear in the graphic display. Note that, unlike the piano roll display, this object display does not position sound-objects vertically according to pitch values:
The first measure of the Mozart sonata's sample
The rest of the score can be deciphered and explained in the same way. Bol Processor notation is based on very simple (and multicultural) principles, but it is difficult to create by hand… So it is best created by grammars or extracted from MusicXML scores.
Note that it is easy to change the tempo of this piece. For example, to slow it down, insert the instruction _tempo(1/2) at the beginning:
Exploding scores
Clicking the EXPLODE button segments the musical work into individual measures, making it easier to analyse the conversion or reuse fragments:
The five measures of Mozart's sonata exploded on the Data window
Each measure can be played (or expanded) separately. Segments are labelled [item 1], [item 2] etc. for easy identification.
The IMPLODE button reconstructs the original work from its fragments.
A more complex example
Let us try DichterLiebe (op. 48) Im wunderschönen Monat Mai by Robert Schumann. The MusicXML score is in the "xmlsamples" folder distributed in the sample set "bp3-ctests-main.zip", which is available on GitHub, together with its graphic score (read the PDF file).
The Bol Processor score is more complex:
"Im wunderschönen Monat Mai" (Robert Schumann)
Im wunderschönen Monat Mai (Robert Schumann) interpreted by the Bol Processor on a PianoTeq vibrophone
The correct rendering of this piece on the Bol Processor is obtained with its (default) quantization set to 10 milliseconds. Quantization is a process of merging the timing of events when they are less than a certain value apart: a human would not notice a 10 millisecond timing error, but merging "time streaks" is an efficient way of saving memory when building a phase diagram of events. In this particular piece, setting the quantization to 30 ms would already produce a noticeable error in synchronisation. This gives an idea of the accuracy expected from human performers, which their trained auditory and motor systems can easily handle.
Note that this MusicXML score has 2 parts, one for voice and the second one for piano. These are sent on MIDI channels 1 and 2 respectively. These channels should in turn activate different Csound instruments. If several instruments are not available, it is possible to listen to their parts separately by importing selected parts of the score.
As the first measure is incomplete (1/4 beat), the piano roll is not aligned with the background streaks (numbered 0, 1, 2…):
This problem can be solved by inserting a silence of 3/4 beats duration before the score:
3/4 {_chan(1){1/4,{{1/4,-}}},_chan(2){1/4,{{1/4,C#5},{1/4,-}}}} … etc.
which yields:
Piano roll aligned to the time streaks
The musical work can be interpreted at different speeds after inserting a "_tempo()" instruction in the beginning. For example, given that the metronome is set to 60 beats per minute, inserting _tempo(3/4) would set the tempo to 60 * 3 / 4 = 45 beats per minute. To produce a sound rendering of this particular piece we inserted a performance control _legato(25), which extends the duration of all notes by 25% without modifying the score. We also added some reverberation on the PianoTeq vibrophone. The resulting piano roll was:
Same piece with _legato(25) extending note durations by 25%
Time-reversed Bach?
The _retro tool also produces bizarre transformations, most of which would sound "unmusical". In fact, some of them are quite interesting. Consider, for example, Bach's Goldberg Variation No. 5 played on Bol Processor + Csound with (Bach's presumably favourite) Kirnberger II temperament — see the page Comparing temperaments:
Bach's Goldberg VariationNr. 5 (Kirnberger II temperament) — MuseScore transcription by crashbangzoom808
Listen to the same piece after applying the _retro tool:
Time-reversed version of Bach's Goldberg Variation Nr. 5— Kirnberger II temperament
In Bol Processor scores created by importing MusicXML files, many (musically meaningful) modifications can be made, such as inserting variables and sending the data to a grammar that will produce completely different pieces. To achieve this, the grammar — for example "-gr.myTransformations" — must be declared above the data window.
The claim for "well-tempered tuning" for the interpretation of Baroque music can be further assessed by comparing the following versions of J.-S. Bach's Brandenburg Concerto Nr 2 in F major (BWV1047) part 3:
J.-S. Bach's Brandenburg Concerto Nr 2 in F major (BWV1047) part 3 — Kirnberger II temperamentJ.-S. Bach's Brandenburg Concerto Nr 2 in F major (BWV1047) part 3 — Equal-tempered tuning
Complex structures
At the time of writing, BP3 was able to import and convert all the MusicXML files in the "xmlsamples" folder. However, it may not be possible to play or expand pieces classified as "too complex" due to overflow. Since it is possible to isolate measures after clicking the EXPLODE button, a PLAY safe button has been created to pick up chunks and play them in a reconstructed sequence. The only drawback is that the graphics are disabled, but this is less important given the complexity of the work.
For example, listen to Lee Actor's Prelude to a Tragedy (2003), a musical work consisting of 22 parts assigned to various instruments via the 16 MIDI channels — read the graphic score.
Lee Actor's "Prelude to a Tragedy" (2003) with incorrect assignment of some instruments, played by the Bol Processor using its Javascript MIDIjs player
Instrument mapping is incorrect, with most channels being played as piano instead of flute, oboe, English horn, trumpet, viola, etc. Parts mapped to channels 10 and 16 are fed with drum sounds. All these instruments were synthesised by the Javascript MIDIjs player installed on the BP3's interface. A better solution would be to feed the "prelude-to-a-tragedy.mid" MIDI file into a synthesiser capable of imitating the full set of instruments, such as MuseScore.
Score part ‘P1’: instrument = Picc. (V2k) — MIDI channel 1 Score part ‘P2’: instrument = Fl. (V2k) — MIDI channel 2 Score part ‘P3’: instrument = Ob. (V2k) — MIDI channel 3 Score part ‘P4’: instrument = E.H. (V2k) — MIDI channel 4 Score part ‘P5’: instrument = Clar. (V2k) — MIDI channel 5 Score part ‘P6’: instrument = B. Cl. (V2k) — MIDI channel 5 Score part ‘P7’: instrument = Bsn. (V2k) — MIDI channel 7 Score part ‘P8’: instrument = Hn. (V2k) — MIDI channel 8 Score part ‘P9’: instrument = Hn. 2 (V2k) — MIDI channel 8 Score part ‘P10’: instrument = Tpt. (V2k) — MIDI channel 9 Score part ‘P11’: instrument = Trb. (V2k) — MIDI channel 11 Score part ‘P12’: instrument = B Trb. (V2k) — MIDI channel 11 Score part ‘P13’: instrument = Tuba (V2k) — MIDI channel 12 Score part ‘P14’: instrument = Timp. (V2k) — MIDI channel 13 Score part ‘P15’: instrument = Splash Cymbal — MIDI channel 10 Score part ‘P16’: instrument = Bass Drum — MIDI channel 10 Score part ‘P17’: instrument = Harp (V2k) — MIDI channel 6 Score part ‘P18’: instrument = Vln. (V2k) — MIDI channel 14 Score part ‘P19’: instrument = Vln. 2 (V2k) — MIDI channel 15 Score part ‘P20’: instrument = Va. (V2k) — MIDI channel 16 Score part ‘P21’: instrument = Vc. (V2k) — MIDI channel 16 Score part ‘P22’: instrument = Cb. (V2k) — MIDI channel 16
Lee Actor's "Prelude to a Tragedy" (2003) interpreted by MuseScore
Remember, however, that these are raw interpretations of musical scores based on a few quantified parameters. For a better representation, you should add performance parameters to the Bol Processor score to control volume, panoramic, etc. on a MIDI device, or an unlimited number of parameters with Csound.
Stylistic limitations are evident in transcriptions of jazz music, as opposed to musical works originally composed in writing. A transcription of improvised material is only a fixed image of one of its myriad variations. As a result, its score may convey a pedagogical rather than an artistic vision of the piece. The following is a transcription of Oscar Peterson's Watch What Happens from a MusicXML score:
Oscar Peterson's "Watch What Happens" interpreted by Bol Processor on PianoTeq, mm = 136 bpm Source: MusicXML score by jonasgssin the MuseScore community
The Bol Processor score of this transcription is as follows. The metronome has been increased to 136 beats per minute — notated _tempo(136/60) — to match an estimated performance speed. This is easy with a machine! Below is an excerpt from the piano roll display and the full Bol Processor score:
Excerpt of piano roll for Oscar Peterson's "Watch What Happens"
In a very different style, Tchaikovsky's famous June Barcarole in G minor (1875):
Tchaikovsky's “June Barcarole” in G minor interpreted by the Bol Processor with the Pianoteq physical-model synthesiser
Another complex example is Beethoven's Fugue in B flat major (opus 133). As we could not obtain the piano four hands transcription, we used the string quartet version.
Again, the Javascript MIDIjs player could not synthesise the two violins, viola and cello tracks (MIDI channels 1 to 4). So the MIDI file was sent to PianoTeq to get a fair piano rendering of the mixed channels.
Beethoven's Fugue in B flat major — a piano version interpreted by the Bol Processor with the Pianoteq physical-model synthesiser
Played as a single chunk (on MacOS), this piece takes no less than 372 seconds to calculate, whereas PLAY safe delivers the same in 33 seconds. In addition, single chunk playback requires 30 ms quantization on a machine with 16 GB of memory.
Another emblematic example of complex structure is La Campanella, originally composed by Paganini for the violin and transcribed for piano by Franz Liszt:
La Campanella — Liszt's piano version interpreted by the Bol Processor with the Pianoteq physical-model synthesiser Source: MusicXML score by Heavilon in the MuseScore community
The Bol Processor score of this piece (a single polymetric expression) consists of only 37268 bytes. Dynamics are interpreted as velocities :
In this Bol Processor score, the pedal start/end commands are translated to _switchon(64,1) and _switchoff(64,1), and a 20 milliseconds randomisation of dates is applied as per the instruction _rndtime(20) — see Pedals and Randomisation below.
According to Wikipedia : "La Campanella" (Italian for "The little bell") is the nickname given to the third of Franz Liszt's six Grandes études de Paganini, S. 141 (1851). Its melody comes from the final movement of Niccolò Paganini's Violin Concerto No. 2 in B minor, where the melody is metaphorically amplified by a 'little handbell'. After listening to Liszt's piano version interpreted by the Bol Processor — and its human performance by Romuald Greiss on the Wikipedia page — I recommend watching the outstanding violin performance of Paganini's original work by maestro Salvatore Accardo in 2008 (video).
Measure #96 of Liszt's “La Campanella”
Measure #96 of Liszt's “La Campanella” Bol Processor score (top left), MuseScore display, piano roll (bottom left) and sound-objects
In measure #96 (image above), the locations of vertical blue lines are irrelevant because of the varying tempi listed below (green arrows). Note that these are the metronome values given for the performance (tags sound tempo), which are slightly different from those given in the printed score (tags per-minute). However, if the MusicXML score is well designed, there is no significant difference between importing only performance metronome values and including printed score values ; this point is discussed below, see Tempo interpretation: prescriptive versus descriptive.
Ahead with grammars
Before we look in more detail at material imported from MusicXML files, let us consider the issue of using fragments of this material to create music in the Bol Processor task environment.
After importing/converting a MusicXML score, clicking EXPLODE will split it into separate items, one per measure, according to the MusicXML structure:
The EXPLODE button on the Data page.
The data has been chunked into units item 1, item 2 etc. Note that it is possible to play each measure separately and display its sound-objects or its piano roll.
The CREATE GRAMMAR button will now start converting this data into a grammar:
The CREATE GRAMMAR button
The new grammar is displayed in a pop-up window and can be copied to a Grammar page:
The new grammar has been created
This is a basic transformation. Playing this grammar would simply reconstruct the musical work as it was imported. However, as each measure is now labelled as a variable M001, M002 etc., these variables can be used as the "building bricks" of a new compositional work.
Performance controls
MusicXML files contain descriptive information for use by mechanical players that is not displayed on the graphic score. For example, where the score says "Allegretto" the file contains a quantitative instruction such as "tempo = 132".
Trills in measure 10 of Beethoven's Fugue in B flat major
Trills as encoded in the MusicXML file
Another notable case is the representation of trills (see image above). In some (but not all) MusicXML scores, they appear explicitly as sequences of fast notes. Consequently, they are rendered correctly by the interpreter of the MusicXML file. In other cases they have to be constructed — see Ornamentation below.
In the same measure #10, a fermata appears on top of the crotchet rest. Its duration is not specified as it is at the discretion of the performer or conductor, but the Bol Processor follows a common practice of making it twice the duration of the marked rest.
MusicXML files contain information about sound dynamics which the Bol Processor can interpret as either _volume(x) or _vel(x) commands. The latter (velocity) is appropriate for instruments such as piano, harpsichord etc.
In the absence of a numerical value, a graphical representation of the dynamics (ffff to pppp) will be used. This value is estimated according to the MakeMusic Finale dynamics convention.
Options for importing a MusicXML file
Some prescriptive information that appears on the graphical score is not (currently) interpreted. The first reason is that it would be difficult to translate performance controls to the Bol Processor - for example, stepwise/continuous volume control, acceleration, etc. The second reason is that the aim of this exercise is not to produce the "best interpretation" of a score. Score editing programs can do that better! Our only intention is to capture musical fragments and rework them with grammars or scripts.
It would be difficult to reuse a musical fragment packed with strings of performance controls relevant to its particular context in the musical work. To this end, the user is offered options to ignore volume, tempo and channel assignments in any imported MusicXML score. These can later be deleted or remapped with a single click (see below).
Remapping channels and instruments
MusicXML digital scores contain specifications for individual parts/instruments. These parts are visible in the Bol Processor score after conversion and can be mapped to the sound output device(s) — read below.
Each part can also be assigned a MIDI channel. These channels can be used to match instruments available on a MIDI synthesiser, and _ins() instructions are needed to call instruments available in the Csound orchestra.
The remapping of MIDI channels is easily done at the bottom of the Data or Grammar pages:
The default note convention when importing MusicXML scores is English ("C", "D", "E"…). This form allows it to be converted with a single click to the Italian/Spanish/French ("do", "re", "mi"…) or Indian ("sa", "re", "ga"…) conventions.
Clicking on the MANAGE _chan() AND _ins() button displays a form listing all occurrences of MIDI channels and Csound instruments found in the score. Here, for example, we want to keep MIDI channels and in the same time insert _ins() commands to call Csound instruments described in a "-cs" Csound resource file:
Error corrections
MuseScore's correction of the defective sequence (top score)
MuseScore reported an error in measure 142 of the MusicXML score for Beethoven's Fugue: the total timing of the notes in part 1 (the uppermost score) is 3754 units, which is 3.66 beats (instead of 4) based on a division of 1024 units per quarter note. MuseScore has corrected this error by stretching this sequence to 4 beats with an erroneous silence marker at the end.
The Bol Processor behaves differently. Its notion of "measure" as a polymetric structure is not based on counting beats. It takes the top line of the structure as the timing reference, so "measures" can be of variable duration. Its interpretation of this measure is as follows: the ratio 3755/1024 denotes exactly the (presumably incorrect) duration of this measure according to the MusicXML score:
The graphic rendering of this measure shows that the four sequences are perfectly synchronised.
To correct the error, simply replace "3755/1024" with "4".
Error notification while converting Beethoven's Fugue
At the time of writing, the Bol Processor has been able to import and play most MusicXML scores correctly. Errors can still occur with very complicated files, particularly due to inconsistencies (or rounding errors) in the MusicXML code. For example, the measure numbering in Liszt's 14th Hungarian Rhapsody looks confusing (due to implicit measures) and some values of are incorrect. These details are detected and the errors are corrected when the file is converted.
Tempo interpretation: prescriptive, descriptive, and beyond
MusicXML scores contain tempo markings of two kinds: (1) metronome prescriptive markings available on conventional printed scores and (2) their descriptive modifications for proper mechanical interpretation.
In the prescriptive setting, tempo controls (sound tempo tags) type within measures are discarded. Only per-minute tags are interpreted. This results in a "robotic" rendering: acceleration/deceleration lacks the passion and subtlety of human interpretation. However, since the transcription reflects the plain printed score, its fragments are more suitable for a reuse. Assuming that this is exactly the version published by the composer (which is indeed debatable) we can take the following interpretation as reflecting the music that Liszt "had in mind" regardless of the performer's interpretation.
Liszt's 14th Hungarian Rhapsody imported by the Bol Processor and played on PianoTeq with only “prescriptive” tempo controls. Source: ManWithNoName in the MuseScore community
In a detailed interpretation, all tempo indications are converted, including the "non-printing" ones (sound tempo tags), which we call descriptive. Global rendering is more pleasant when these tags make musical sense. For example, this is Liszt's 14th Hungarian Rhapsody with all tempo markings. Note that the total duration has increased by 15 seconds:
Liszt's 14th Hungarian Rhapsody with all "descriptive" tempo controls. Source: ManWithNoName in the MuseScore community
The options of relying on exclusively prescriptive, or exclusively descriptive, tempo markings should be considered when there is an inconsistency between the printed score (per-minute tags) and the performance details (sound tempo tags). The former are intended for use by a human performer, whereas the latter are intended for use by machines…
Multiple versions of the same piece of music can be found in shared repositories. Below is a descriptive interpretation of the same 14th Hungarian Rhapsody based on the MusicXML score customised by OguzSirin:
Liszt's 14th Hungarian Rhapsody imported by the Bol Processor and played on PianoTeqwith all "descriptive" tempo controls. Source: OguzSirinin the MuseScore community
Excerpts of piano roll for Liszt's 14th Hungarian Rhapsody transcribed by OguzSirin
The entire work is contained in a single polymetric expression (see code below) which must be "expanded" to fill a "phase diagram" of sound-objects. Its full expansion would produce no less than 7 x 1023 symbols… more than the estimated 400 billion (4 x 1011) stars in the Milky Way! Fortunately, polymetric representations can be compressed into a comprehensive format (see code below) and processed to produce the expected sequence of sound objects. The compression rate for this item is greater than 5 x 1022, so a Bol Processor score can be obtained without any loss of data.
Despite the limitations (and potential errors), the detailed virtuosity engraved in Liszt's score supports Alfred Brendel's idea of interpreting a musical work:
If I belong to a tradition, it is a tradition that makes the masterpiece tell the performer what to do, and not the performer telling the piece what it should be like, or the composer what he ought to have composed.
The main drawback of relying on descriptive timing is that it is a unique preset option in the MusicXML score. Reducing 'expression' to variations in speed and intensity is not satisfactory if the aim is to produce new musical works and variations. A more realistic rendering of imported musical scores could be achieved using sophisticated tools such as expressive performance rendering (EPR) and expressive performance synthesis (EPS) models. For example, take a look at the synthesis through neural codec language modelling (MIDI-VALLEE).
Focus on tempo and fermatas
This section is intended for readers familiar with standard western music notation. We illustrate the interpretation of (non-printed) metronome markings within measures and fermatas (unmeasured prolongations) using a typical example: measure #6 of Liszt's 14th Hungarian Rhapsody. The source material is the MusicXML code of this measure on which tempo annotations are highlighted in red and fermatas in green colour.
This measure is displayed in the printed score as follows. Invisible tempo markings have been added in red at the exact locations specified by the MusicXML score. Three fermatas are printed above/below the note or silence to which they apply.
Measure 6 of Liszt's 14th Hungarian Rhapsody
The symbolic duration of this measure is 6 beats. Due to rounding errors, the Bol Processor displays it as 1441/240 = 6.004 beats. This tiny discrepancy is caused by rounding off the durations of the 14 notes Ab2 C3 F3 Ab3 C4 F4 Ab4 C5 F5 Ab5 C6 F6 Ab6 C7, a sequence that should last exactly 3/8 of a measure. Each beat is divided into 480 parts — the division given at the beginning of the score. So the sequence should last 480 x 3/8 = 180 units, and each note should last 180/14 = 12.85 units. Since durations are represented as integers in a MusicXML score, this value has been rounded to 13. This explains the small difference visible in the Bol Processor score, but unnoticeable to the human ear.
Below is the complete Bol Processor transcription of this measure. First, the graphic representation of sound-objects labeled as simple notes:
Measure 6 of Liszt's 14th Hungarian Rhapsody displayed as sound-objects by the Bol Processor
Note that all sound-objects in the first 2.5 seconds are duplicated. The MusicXML score is redundant, fortunately with no inconsistencies between duplicate occurrences, which explains why they are not visible in the printed score.
The same polymetric expression is available in piano roll format:
Measure 6 of Liszt's 14th Hungarian Rhapsody displayed as piano roll by the Bol Processor
We will further explain how this transcription has been obtained.
On the Data window the 6th measure is displayed as a polymetric structure: {duration, field 1, field2, field 3, field4}. After importing the MusicXML score, click the EXPLODE button on the right side to display measures as separate items. Since measure numbering in this score starts with 0, measure #6 will be displayed as item #7.
To facilitate reading, each field is on a separate line:
Integers and integer ratios represent rests. For example, 667/480 in the third field is a rest of 667/480 = 1.389 beats. Dates and durations are treated by the Bol Processor as integer ratios, thereby allowing perfect time accuracy. The ratio 1/2 in the first field can be interpreted as a 1/2 beat rest or the symbolic duration of the expression {1/2,F7}.
Redundancy in the MusicXML score is visible as expressions such as {Ab2,C3}{2,F3} and {F1,C2}{2,F2} appear in two fields (at the same date and speed).
Tempo markings in red reflect MusicXML score annotations. Each field starts with a metronome of 80 bpm (beats per minute). The _tempo(13/20) instruction before the polymetric structure sets the metronome to 60 x 13/20 = 39 bpm. At the beginning of each field it is multiplied by 80/39, so 60 x 13/20 x 80/39 = 80 bpm, as expected. The following instructions produce 16 bpm and 52 bpm in their respective places.
This interpretation of a MusicXML score as a polymetric structure is not easy to work out with respect to metronome annotations. The main problem is that these annotations only appear on the top line of the graphic score (i.e. the first field of the structure) and should be inserted at the same date in other fields. For example, _tempo(4/3) is on the 4.5th beat, before {1/2,F7} in the first field, and therefore before {1/2,Ab6} in the second field. This is easy to calculate.
The rest 481/240 (about 2 beats), which appears in green on the Bol Processor score, has been added after the second field to calibrate its duration to that of the measure. This calibration is not mandatory on printed scores or in MusicXML files: where no note is shown, musicians understand that there is an implicit rest, which they insert spontaneously to anticipate the synchronisation of upcoming notes in the next measure. However, a machine should be instructed to do so.
However, _tempo(16/39), which precedes the Ab2 C3 F3… sequence in the first field, falls within a 1/2 beat rest in the second field. This pause is actually coded as a forward instruction, as it does not appear on the printed score. To synchronise tempo changes, the_tempo(16/39) instruction must be placed in the first quarter of this rest. The result is:
1/8 _tempo(16/39) 3/8
Similarly, a forward of 2.5 beats in the fourth field must be broken in order to insert the _tempo(8/27) and _tempo(26/27) statements, which would yield the following:
1/8 _tempo(16/39) 91/240 _tempo(4/3) 480/240
However, the calibration of the duration of this fourth field requires an additional pause of 1/2 beat, suggesting that 480/240 be replaced by 600/240. An additional 1/240 gap is required to compensate for rounding errors. This gives:
Another problem with measure 6 of Liszt's 14th Hungarian Rhapsody is the appearance of three fermatas (see printed score). Like metronome markings, fermatas are not repeated on every line of the score, although they apply to all parts (voices) simultaneously. The durations must therefore be adjusted accordingly in order to maintain synchronisation in a machine performance.
The first fermata (coloured green in the MusicXML score) is on note "F3" of the first field. Its duration is therefore 2 beats instead of 1. This extension is propagated to subsequent fields at the same date, namely "F3", "F2", "F2".
The second fermata is placed on an eighth (quaver) rest that appears in the printed score, and its duration is extended by 1/2 beat. This ends by extending by 1/2 beat the rests that occur at the same date in subsequent fields.
To facilitate similar analyses, an option is provided to track transformations when importing/converting MusicXML scores. The part relevant to measure #6 (item #7) reads as follows:
• Measure #6 part [P1] starts with current period = 0.75s, current tempo = 4/3, default tempo = 4/3 (metronome = 80) mm Measure #6 part P1 field #1 metronome set to 80 at date 0 beat(s) f+ Measure #6 part P1 field #1 note ‘F3’ at date 1 increased by 1 beat(s) as per fermata #1 mm Measure #6 part P1 field #1 metronome set to 16 at date 3 beat(s) mm Measure #6 part P1 field #1 metronome set to 16 at date 25/8 beat(s) mm Measure #6 part P1 field #1 metronome set to 52 at date 1513/480 beat(s) mm Measure #6 part P1 field #1 metronome set to 52 at date 841/240 beat(s) f+ Measure #6 part P1 field #1 note ‘-’ at date 961/240 increased by 1/2 beat(s) as per fermata #2 + measure #6 field #1 : physical time = 7.98s • Rounding part P1 measure 6 field #2, neglecting ‘backup’ rest = 1/240 mm Measure #6 part P1 field #2 metronome set to 80 at date 0 beat(s) f+ Measure #6 part P1 field #2 note ‘F3’ at date 1 increased by 1 beat(s) to insert fermata #1 mm Measure #6 part P1 field #2 metronome set to 80 at date 1 beat(s) mm Measure #6 part P1 field #2 metronome set to 16 during rest starting date 3 beat(s) mm Measure #6 part P1 field #2 metronome set to 52 at date 7/2 beat(s) + measure #6 field #2 : physical time = 5.08s ➡ Error in measure 6 part P1 field #3, ‘backup’ rest = -1/2 beat(s) (fixed) mm Measure #6 part P1 field #3 metronome set to 80 at date 0 beat(s) f+ Measure #6 part P1 field #3 note ‘F2’ at date 1 increased by 1 beat(s) to insert fermata #1 mm Measure #6 part P1 field #3 metronome set to 80 at date 1 beat(s) mm Measure #6 part P1 field #3 metronome set to 16 at date 25/8 beat(s) mm Measure #6 part P1 field #3 metronome set to 16 at date 1513/480 beat(s) f+ Measure #6 part P1 field #3 silence at date 961/240 increased by 1/2 to insert fermata #2 mm Measure #6 part P1 field #3 metronome set to 52 during rest starting date 841/240 beat(s) + measure #6 field #3 : physical time = 9.28s • Rounding part P1 measure 6 field #4, neglecting ‘backup’ rest = 1/240 mm Measure #6 part P1 field #4 metronome set to 80 at date 0 beat(s) f+ Measure #6 part P1 field #4 note ‘F2’ at date 1 increased by 1 beat(s) to insert fermata #1 f+ Measure #6 part P1 field #4 silence at date 961/240 increased by 1/2 to insert fermata #2 mm Measure #6 part P1 field #4 metronome set to 16 during rest starting date 3 beat(s) mm Measure #6 part P1 field #4 metronome set to 52 during rest starting date 3 beat(s) +rest Measure #6 part P1 field #2 added rest = 481/240 beat(s) +rest Measure #6 part P1 field #4 added rest = 1/240 beat(s) + measure #6 field #4 : physical time = 7.77s ➡ Measure #6 part [P1] physical time = 9.28s, average metronome = 49, final metronome = 39
Changing tempo
There are several methods for changing the tempo of imported MusicXML scores. After the conversion it is obviously possible to edit the _tempo(x) statements individually. Clicking on the EXPLODE button allows each measure to be modified and checked visually/audibly.
Inserting a _tempo(x) instruction in front of the musical work changes the average metronome value. The effect is identical to changing the metronome in the settings file (which we did for Oscar Peterson's work). For example, the following Bol Processor score would play Liszt's 14th Hungarian Rhapsody at half speed:
// MusicXML file ‘Hungarian_Rhapsody_No._14.musicxml’ converted // Score part ‘P1’: instrument = Piano — MIDI channel 1 -se.Hungarian_Rhapsody
Beginning of Liszt's 14th Hungarian Rhapsody at half speed
Despite the Bol Processor's systematic treatment of symbolic time as integer ratios, a floating-point argument x is acceptable in a _tempo(x) instruction. For example, _tempo(1.68) is automatically converted to _tempo(168/100) and simplified to _tempo(42/25).
Advanced tempo adjustment is possible when importing the MusicXML score.
The current average, minimum and maximum metronome values are displayed. Yellow boxes show the default values, e.g. set average to 60 bpm, minimum to 10 bpm and maximum to 180 bpm.
All metronome values are modified using a quadratic regression of the mapping of values. A linear regression can be used to replace the polynomial form if it is not monotonous. For this example (14th Hungarian Rhapsody) the new average would be 63 bpm instead of the expected 60 bpm. The discrepancy depends on the statistical distribution of the values.
Changing volume or velocity
When converting a MusicXML score, there is an option to interpret sound dynamics as volume or velocity controls. The latter may be preferable for sound synthesis that imitates plucked or struck string instruments.
Whatever you choose, you can later adjust the volume and velocity controls for the entire musical work. For example, click Modify _vel() at the bottom of the Data page.
This will display a form showing the current average, minimum and maximum values of _vel(x) statements in the score. Enter the desired values in the yellow cells and click APPLY.
The mapping uses a quadratic regression (if monotonous), as explained in relation to tempo (see above). For the same reason, the averages obtained are generally not exactly the desired ones.
Ornamentation
Western musical scores can contain many types of ornamentation with names and styles of interpretation depending on the historical period. The MusicXML format includes some of these, which can produce sound effects similar to those produced by human performers.
The following ornaments are transcribed into Bol Processor scores when MusicXML files are imported. The accuracy of these interpretations is not a big deal, since the main object is to import musical fragments that will be transformed and reused in different contexts. Nevertheless, it is fun to design a good interpretation… Before importing a MusicXML file, options are given to discard one of the following types of ornaments. The option is only displayed if at least one occurrence is found in the file.
Mordents
There is a wide variety of mordents with meanings that have changed over the years. The interpretation in Bol Processor is close to the musical practice of the 19th century, yet acceptable for the interpretation of Baroque works.
The MusicXML tags for mordents are mordent and inverted-mordent which correspond to the more comprehensible terms of lower mordent and upper mordent respectively. We will illustrate their use in François Couperin's work Les Ombres Errantes (1730), using a MusicXML file arranged by Vinckenbosch from the MuseScore community. Let us look at and listen to the first three measures:
Beginning of François Couperin's Les Ombres Errantes (MuseScore) ➡ read full score (Creative Commons licence CC0 1.0 Universal)
Beginning of François Couperin's “Les Ombres Errantes” interpreted by the Bol Processor + Csound with a “Rameau en sib” temperament
There are eight mordents in the first three measures of Les Ombres Errantes. Those numbered 1, 2, 3, 7 and 8 are of the upper type. Mordents #4, #5 and #6 are of the lower type. In addition, the marks of all the upper mordents are longer than standard, which makes them long. Their MusicXML tag is therefore <inverted-mordent long="yes"/>.
Each mordent is interpreted as a series of notes on a rhythmic pattern, which may be short or long. For example, note B4 (the first longupper mordent) is interpreted as
{1/4,C5 B4 C5}{3/4,B4}
which indicates that it has been embellished by a short step down from the next higher note C5. The fourth mordent is of the short lower type on note C5, which yields:
{1/8,C5 B4}{7/8,C5}
The full list of mordents in these three measures is:
{1/4,C5 B4 C5}{3/4,B4}
{1/4,Eb5 D5 Eb5}{3/4,D5}
{1/4,C5 B4 C5}{3/4,B4}
{1/8,C5 B4}{7/8,C5}
{1/8,Eb4 D4}{7/8,Eb4}
{1/8,Eb4 D4}{7/8,Eb4}
{1/4,C4 B3 C4}{3/4,B3}
{1/4,C4 B3 C4}{3/4,B3}
While creating rhythmic patterns of mordents is fairly straightforward, a difficulty lies in choosing the note above or below the final note at a tonal distance of 1 or 2 semitones. The default choice is a note that belongs to the diatonic scale, which can be modified by changes earlier in the measure. An option to interpret mordents, turns and trills as"chromatic" is offered, see below.
With two flats in the key signature, i.e. Bb and Eb, the global diatonic scale of this piece reads as B flat major (or G minor) scale = "C D Eb F G D Bb". However, in the second measure, Bb is altered to B by a natural sign. Therefore, in the following mordent #4, the note B4 must be used instead of Bb4 as the lower note leading to C5.
Mordents sound acceptable in this interpretation, as can be heard in the full recording with microtonal adjustments on a Pianoteq synthesiser:
François Couperin's “Les Ombres Errantes” (1730) with “Rameau en sib” temperament (1726) interpreted by the Bol Processor on a Pianoteq synthesiser. ➡ More tunings and Csound version on the page Comparing temperaments
Turns
A turn is similar to a mordent, except that it picks up both the next high and low notes in the scale. If it is linked to a mordent, it can borrow its attributes (see above): upper/lower and long/short. If the turn is not associated with a mordent, it will use the long + upper attributes. This is a design option that can be revised or made optional.
A specific attribute of turns is beats, similar to trill-beats (see below). These are defined (read the source) as "The number of distinct notes during playback, counting the starting note but not the two-note turn. It is 4 if not specified."
Examples of turns can be found in François Couperin's Les Ombres Errantes. They are all four beats long and embedded in long/upper mordents, for example, the note Ab3 in measure #12:
{1, Ab3 {2, A3 Ab3 G3} Ab3}
The complete measure #12 (with the turn highlighted) is:
Note that the result would be unchanged if the turns in this piece were interpreted as "chromatic" in this piece: this option picks up the next higher and lower notes in the chromatic scale underlying the tuning of the piece — see image of the Rameau en sib meantone temperament.
Turns not associated with mordents are found in François Couperin’s Le Petit Rien:
François Couperin's “Le Petit Rien” (1722) with a “Rameau en do” temperament interpreted by the Bol Processor on a Pianoteq synthesiser Source: MusicXML score by Yvan43
Trills
Trills are marked with the trill-mark tag. There is an option to ignore this if the detailed note sequences are already encoded in the MusicXML file. (This is not easy to guess!) Let us see the construction of trills when the option is not checked.
The treatment of trills is similar to that of mordents (see above). There are many ways to interpret a trill, depending on the style and personal preference of the performer. By default, trills in the Bol Processor start with the reference note and end with the altered note, which is one step higher in the scale. However, if the starting note has a tie, the order of the notes is reversed, so that the stream ends with the tied note.
Among the available options of the trill-mark tag, we pick up trill-beats (read the documentation), whose value is "3" by default. Its definition is a little obscure: "The number of distinct notes during playback, counting the starting note but not the two-note turn. It is 3 if not specified." Our provisional interpretation is that the total number of jumps is trill-beats + 1.
Examples of the two types in Liszt's 14th Hungarian Rhapsody:
Arpeggios are also converted into polymetric structures. Below is a chord {F1,C2,F3} of 1/2 beat duration, followed by its interpretation as an arpeggio:
The piano roll of this sequence makes it clear. The chord is divided into two parts. The duration of the first part is determined by a minimum value of the delay between each arpeggio note and the following one, here set to 1/20th of a beat. The total duration must not exceed half of the duration of the chord.
Notes are tied (symbol '&') so that their durations are merged, as expected, between the arpeggio part and the pure chord part: for instance, "F1&" is tied to "&F1" — read page Tied notes for details.
Slurs
Slurs are translated into the Bol Processor score as _legato(x) statements, where "x" is the percentage by which note durations are increased. This option is set by default to x = 20% and can be modified or deselected before importing the MusicXML file.
Slurs on the first notes of François Couperin's “Les Ombres Errantes”
The notes used for stretching are those associated with slurs in the score: C5 , Eb5 and C5. Other notes, even the sequence {1/2,Eb4}{5/2,G4 D4 F4 C4 Eb4},Eb4 D4 C4}}, are not modified because they do not appear at the same level of the polymetric structure.
With staccato or spiccato, the duration is halved. For example, C4 is replaced by {1, C4 -}.
Staccatissimo reduces the duration by three quarters. For example, C4 is replaced by {1, C4 ---}.
Pedals
Pedal commands are captured from the MusicXML file and can be interpreted as MIDI controller commands. (These are ignored when generating a Csound output.)
A controller setting is suggested for each part of the score where a pedal command has been found. By default, controller #64 is used along with the MIDI channel assigned to the part. The performance controls _switchon() and _switchoff() are used according to the Bol Processor syntax.
Below are the settings for pedals, trills, etc., and the extra duration of the last measure for a piece with pedals in a single part. Numbers in yellow cells can be modified:
For example, the first three measures of Liszt's La Campanella are interpreted as follows:
Breath of 1/4 quarter note in measure #3 of “Les Ombres Errantes”
Breath marks are "grace rests" analogous to the commas in written languages. On the Bol Processor, they are optionally interpreted as short silences lasting a fraction of a quarter note.
Look at measure #3 of François Couperin's Les Ombres Errantes (see conventional score above). The image shows the effect of breaths set to a 1/4 quarter note — that is, an eighteenth.
In the Bol Processor score, breaths can be tagged with any sequence of symbols. For example, in measure #3 of Les Ombres Errantes, the breaths are tagged with [🌱] which actually contains a Unicode character 🌱 compatible with BP syntax. Note that the breaths after D4 and B3 are 1/4 beats because these beats are quarter beats, whereas the breath after F4 is 1/2 beats because each beat is an eighth.
When importing this piece, we used 1/6th quarter note silence as it sounded more acceptable. In addition, we randomised the timing by 20 ms (see below).
Previewing ornamentation and setting options
Previewing ornamentation and setting options before importing a MusicXML file
Before importing a MusicXML file, options are displayed for selecting or ignoring any ornaments detected in the file. Here, for example, mordents and turns. Selecting an option implies that the ornament was described only as a graphic mark in the printed score, so we expect the algorithm to construct the note sequences according to the rules shown above. If the ornament has already been embedded in the XML file as a sequence of notes, it is necessary to ignore its statement.
This decision can be difficult to make, as it requires analysis of the MusicXML code. To do this, the buttons open windows showing only the bars in which the selected ornament occurs. The ornament code is displayed in green and highlighted by a red arrow.
Mordents, turns and trills can also be interpreted as chromatic. See their checkboxes on the picture.
Another button (at the top of the window) displays the complete MusicXML code in a pop-up window with coloured lines for measures and notes.
There are several "trace" options available. With a long file, it may not be easy to trace the entire process. There is an option to focus on a number of measures. Other restricted options are the management of tempo and ornamentation.
Measure and part numbers
An option (see image above) allows the measure numbers to be displayed on the imported score, as shown below:
These become more visible after clicking the EXPLODE button, which fragments the score into one item per measure. Measure numbers (which appear on the printed score) do not always correspond to item numbers in the exploded view.
If the score contains several parts, their labels are also optionally displayed as "_part()" commands in the resulting score. This makes it easier to match the BP score with the printed one. For example:
In real-time MIDI, each part can be mapped to a specific MIDI output and fed to a specific digital instrument as indicated on the score — see the method.
Randomisation
Many performance controls can be applied to the imported score to change its global tempo, dynamics etc. These include the "random" operators "_rndvel(x)" and "_rndtime(x)".
The first changes the velocities by a random value between 0 and x, where x < 64. It can be placed at the beginning of a sequence of notes and followed by "_rdnvel(0)" when the randomisation is no longer desired. If it is placed before a polymetric structure it will apply to all notes in the structure.
The performance control "_rndtime(x)" follows the same syntax. Its effect is to randomly shift each note by ± x milliseconds.
Randomisation is not intended to "humanise" digital music, but rather to compensate for unwanted effects when multiple digitally synthesised sounds are superimposed. This is the case, for example, when notes in a synthesiser are attacked to imitate plucked instruments. Attacking several notes (in a chord) at the same time can sound very harsh. In general, placing a "_rndtime(20)" instruction at the beginning of the piece will solve the problem. However, the musical score may consist of several parts with instruments that benefit from different randomisations; therefore, several instructions must be placed in from of each part (one per bar). To avoid this editorial work, an option is given to insert "_rndtime(x)" with the correct values of x on each part/instrument.
Compare the beginning of Les Ombres Errantes without, then with, a time randomisation of 20 milliseconds — i. e. much less than what would be perceived as a "wrong timing". To get the right effect, the time resolution of the Bol Processor must be much lower than 20 ms. Here it is set to 1 ms, which means that the timing offsets can randomly pick up 40 different values within the ± 20 ms interval.
However, be careful not to reduce the time quantization to less than 10 milliseconds, as this could increase memory usage to the point where the MAMP or XAMPP driver hangs without warning. For example, on a Mac with 16 GB memory, Beethoven's Fugue in B flat major will only play in a single chunk at 30 ms quantization.
Non-randomized beginning of “Les Ombres Errantes”20-millisecond randomized beginning of “Les Ombres Errantes”
Let us compare the sizes of the files able to deliver the same interpretation of the 14th Hungarian Rhapsody:
Sound file in AIFF 16-bit 48 Khz produced by PianoTeq = 200 MB
MusicXML file = 3.9 MB
Graphic + audio score produced by MuseScore = 141 KB
Graphic score exported as PDF by MuseScore = 895 KB
Csound score produced by Bol Processor = 582 KB
MIDI file produced by Bol Processor = 75 KB
Bol Processor data = 64 KB
This comparison supports the idea that Bol Processor data is arguably the most compact and altogether comprehensive (text) format for representing digital music. Below is the complete data of this musical work (with measure numbers):
// MusicXML file ‘Hungarian_Rhapsody_No._14.musicxml’ converted // Reading metronome markers // Including slurs = _legato(20) // Including trills // Including fermatas // Including mordents // Including arpeggios
Velocities have been remapped to average 78 and maximum 110.
Take-away
The interpretation of complex musical works packaged in digitised musical scores highlights important features of the Bol Processor model:
Any musical work that can be scored digitally can be encapsulated in a singlepolymetric expression;
The timings of polymetric expressions are symbolic, here meaning human-understandable integers (or integer ratios) that count beats rather than milliseconds;
The simple syntax of polymetric expressions makes them amenable to reuse and transformation by human editors (or formal grammars);
The limitations of this modelling are only "physical": memory size and computation time;
The temporal accuracy (typically 10 ms) is not affected by the size of the data.
Return to humanity
The examples will hopefully convince the reader that the Bol Processor format is capable of emulating scores in common Western notation, and even correcting some irregularities in their timing… Let us admit that it has come a long way from its original dedication to the beautiful poetry created by drummers in India!
These are indeed interpretations of musical scores. To remember the added value of human artists playing real instruments, we might end up listening to the same Beethoven Fugue played by the Alban Berg Quartet:
This page presents a theoretical framework for tuning musical scales, with a focus on just intonation and its application in various musical traditions, notably North Indian raga and Western harmonic music. It critiques traditional, mathematically driven approaches to intonation, advocating a practise-based understanding inspired by ancient Indian theories instead. The text also discusses how computer-controlled instruments can facilitate the implementation of microtonality, enabling the creation of scales that accommodate different concepts of consonance. Ultimately, the text proposes a unified approach to consonance that aims to bridge historical and cultural gaps in musical tuning.
A framework for tuning just-intonation scales via two series of fifths Image created by Bol Processor based on a model by Pierre-Yves Asselin
For more than twenty centuries, musicians, instrument makers and musicologists have devised scale models and tuning procedures to create tonal music that embodies the concept of "consonance".
This does not mean that every style of tonal music aims to achieve consonance. This concept is nonetheless explicit in the design and performance of North Indian raga and Western harmonic music. It is commonly believed that the octave and the major fifth (the interval from 'C' to 'G') form the basis of these models. Additionally, the harmonic major third (the interval from 'C' to 'E') has recently played an important role in European music.
Computer-controlled electronic instruments are opening up new avenues for the implementation of microtonality, including just intonation frameworks that divide the octave into more than 12 degrees - see the Microtonality page. For centuries, Indian art music claimed to adhere to a division of 22 intervals (the ṣruti-swara system) theorised in the Nāṭyaśāstra, a Sanskrit treatise dating from between 400 BCE and 200 CE. Since consonance (saṃvādī) is the basis of both ancient Indian and European tonal systems, we felt the need for a theoretical framework that encompassed both models.
Unfortunately, the subject of "just intonation" is presented in a wholly confusing and reductive manner (read Wikipedia), with musicologists focusing on integer ratios that presumably reflect the distribution of higher partials in periodic sounds. While these speculative models of intonation may support beliefs in the "magical" properties of natural numbers — as claimed by Pythagoreanists — they have rarely been tested against undirected musical practice. Instrument tuners rely on their own auditory perception of intervals rather than on numbers, despite the availability of "electronic tuners"…
Interestingly, the ancient Indian theory of natural scales did not rely on arithmetic. This may be surprising given that in Vedic times mathematicians/philosophers had laid out the foundations of calculus and infinitesimals which were much later exported from Kerala to Europe and borrowed/appropriated by European scholars — read C.K. Raju's Cultural Foundations of Mathematics: the nature of mathematical proof and the transmission of the calculus from India to Europe in the 16th c. CE. This epistemological paradox was an incentive to decipher the model presented by the author(s) of the Nāṭyaśāstra by means of a thought experiment: the two-vina experiment.
Earlier interpretations of this model, mimicking the Western habit of treating intervals as frequency ratios, failed to explain the intervalic structure of ragas in Hindustani classical music. In reality, the implicit model of the Nāṭyaśāstra is a 'flexible' one because the size of the major third (or equivalently the pramāņa ṣruti) is not predetermined. Read the page on Raga intonation and listen to the examples to understand the connection between the theory and practice of intonation in this context.
In Europe, the harmonic major third was finally accepted as a "heavenly interval" after the Council of Trent (1545-1563), ending the ban on polyphonic singing in religious gatherings. Major chords— such as {C, E, G} — are vital elements of Western harmony, and playing a major chord without unwanted beats requires the simplest frequency ratio (5/4) for the harmonic major third {C, E}.
A keyboard with 19 keys per octave (from “A” to “a”) keyboard designed by Gioseffo Zarlino (1517-1590) (source)
With the development of fixed-pitch keyboard instruments, the search for consonant intervals gave way to the elaboration of theoretical models (and tuning procedures) that attempted to perform this interval in "pure intonation". Theoretically, this is not possible on a chromatic scale (12 degrees), but it can be worked out and applied to Western harmony if more degrees (29 to 41) are allowed. Nevertheless, the choice of enharmonic positions suitable for a harmonic context remains an uncertain proposition.
Once again, the Indian model comes to the rescue, because it can be extended to produce a consistent series of twelve "optimally consonant" chromatic scales, corresponding to chord intervals in Western harmony. Each scale contains 12 degrees, which is more than the notes of the chords to which it applies. Sound examples are provided to illustrate this process — see the Just intonation: a general framework page.
The tuning of mechanical keyboard instruments (church organ, harpsichord, pianoforte) to 12-degree scales made it necessary to distribute unwanted dissonances (the syntonic comma) over series of fifths and fourths in an acceptable manner. From the 16th to the 19th centuries, many tempered tuning systems were developed in response to the constraints of particular musical repertoires, with an emphasis on either "perfect fifths" or "pure major thirds".
These techniques have been extensively documented by the organist and instrument builder Pierre-Yves Asselin, along with methods for achieving intonation on a mechanical instrument such as the harpsichord. His book Musique et tempérament (Paris: Jobert, 2000, to be published in English) served as a guide for implementing a similar approach in the Bol Processor — see the pages Microtonality, Creation of just-intonation scales and Comparing temperaments. This framework should make it possible to listen to Baroque and classical works in the tunings intended by their composers, according to historical sources.
➡ Sadly, Pierre-Yves Asselin left this world on 4 December 2023. We hope that the English translation of his groundbreaking work will be completed soon.
This article details the creation of just-intonation scales, focusing specifically on how these scales are derived from the Indian murcchana-s of Ma-grama. It explains the scale model derived from two cycles of perfect fifths, which aligns with Western and Indian musicological concepts of microtonality. The text provides a transposition table for generating various scales and outlines procedures for adjusting and aligning minor and major exported scales to ensure they have accurate just-intonation properties. The aim is to produce musically accurate scales by adhering to specific frequency ratios and theoretical frameworks, drawing on historical and cross-cultural music theories.
The following is the procedure for exporting just-intonation scales from the murcchana-s of Ma-grama stored in "-to.12_scales".
From left to right: 1st-order descending-third series, "Pythagorean" series and 1st-order ascending-third series (Asselin 2000 p. 61)
As indicated on the page Just intonation: a general framework, just-intonation chromatic scales can be derived from a basic framework made of two cycles of perfect fifths (frequency ratio 3/2).
These produce the 22-shruti framework of Indian musicologists (read Raga intonation) or the series called "Pythagorean" and "1st-order ascending-third" ("LA-1", "MI-1" etc.) in the approach of western musicologists (see picture on the side).
We have found that the "1st-order descending-third cycle" ("LAb+1", "MIb+1" etc.), in which all notes are higher by a syntonic comma may not be necessary for the creation of just-intonation chords.
These cycles of fifths are represented graphically (scale "2_cycles_of_fifths" in the tonality resource "-to.tryTunings"):
There are some differences between this 29-degree division of the octave and the Indian framework, notably the creation of "DO-1" and "FA-1", two positions one syntonic comma lower than "DO" ("C" = "Sa" in the Indian convention) and "FA" ("F" = "Ma"). Interestingly, these positions appear in ancient texts under the names "cyuta Sa" and "cyuta Ma". Other additional positions are "REb-1", "MIb-1", "SOLb-1", "LAb-1" and "SIb-1".
The rule we follow when creating chromatic scales from transpositions of Ma-grama is that only the positions shown on this graph are considered valid. When exporting a minor or major chromatic scale from a transposition of Ma-grama, it may happen that a note position is not part of this framework. In all cases of this procedure, the invalid position is one syntonic comma too low. Therefore the exported scale is "aligned" by raising all its positions by one comma.
The term "Pythagorean series" is confusing because any cycle of perfect fifths is Pythagorean by definition. Whether a position in a scale "is" or "is not" Pythagorean depends on the starting note of the series that was announced as "Pythagorean". In Asselin's work the starting point of the series in the middle column is "FA". In the Indian system, the basic frameworks (Ma-grama and Sa-grama) start from "Sa" ("C" or "do") and the Pythagorean/harmonic status of a position is determined by factors of its frequency ratio with respect to "Sa". If a factor "5" is found in the numerator or the denominator, the position is harmonic or, conversely, Pythagorean.
For example, "DO#" in Asselin's "Pythagorean" series (two perfect fifths above "SI") is evaluated as a harmonic position (marked in green) on the Bol Processor graph and its ratio is 16/15. In reality, "DO#" in Asselin's series has a frequency ratio of 243/128 * 9/16 = 2187/1024 = 1.068 which is very close to 16/15 = 1.067. "DO#-1" in Asselin's series is two perfect fifths above "SI-1" which gives a frequency ratio of 15/8 * 9/16 = 135/128 = 1.054 which is close to 256/243 = 1.053 and marked "Pythagorean" on the Indian scheme. Thus, "DO#" and "DO#-1" have exchanged their properties, each being the superposition of two very close positions belonging to different series.
Ignoring schisma differences inn order to take the simplest ratios creates this confusion. For this reason, we still prefer to use comma indications — e.g. "FA" and "FA-1" — to identify positions where the first instance belongs to the series called "Pythagorean" in Asselin's work.
Transposition table
This table summarises a quick procedure for creating all the murcchana-s of the Ma-grama chromatic scale and exporting minor and major chromatic scales from them.
Open the scale "Ma_grama" in the "-to.12_scales" tonality resource, and select the Murcchana procedure. To create "Ma01", move note "F" to note "C" and click on TRANSPOSITION.
F moved to
Murcchana
Minor scale
Raise
Major scale
Identical scale
Adjust
C
Ma01
Amin
D
Cmaj
=
Emin
1/1
F
Ma02
Dmin
G
Fmaj
=
Amin
1/1
Bb
Ma03
Gmin
C
Bbmaj
=
Dmin
1/1
Eb
Ma04
Cmin
F
Ebmaj
=
Gmin
1/1
Ab
Ma05
Fmin
Bb
Abmaj
=
Cmin
1/1
Db
Ma06
Bbmin
Eb
Dbmaj
=
Fmin
1/1
F#
Ma07
Ebmin
Ab
F#maj
=
Bbmin
1/1
B
Ma08
Abmin
Db
Bmaj
=
Ebmin
1/1
E
Ma09
Dbmin
F#
Emaj
=
Abmin
1/1
A
Ma10
F#min
B
Amaj
=
Dbmin
81/80
R3
Ma11
Bmin
E
Dmaj
=
F#min
81/80
G3
Ma12
Emin
A
Gmaj
=
Bmin
81/80
For example, this is the "Ma04" murcchana obtained by placing "F" (M1 on the Indian scale model) of the moving wheel on "Eb" (G1 of the outer crown):
The resulting "Ma04" scale is:
The "Ma04" scale, which is a transposition of the "Ma-grama" chromatic scale
Scale adjustment
In the last column of the table, "Adjust" indicates the fraction by which the note ratios may need to be multiplied so that no position is created outside the Pythagorean and harmonic cycles of fifths according to the Indian system. Practically this is the case when the frequency ratio contains a multiple of 25 in either its numerator or denominator, as this indicates that the position has been constructed by at least two successive major thirds (up or down).
A warning is displayed if this is the case, and a single click on ADJUST SCALE fixes the positions:
In this example, the warning signals an out-of-range position of "B" (50/27) on the "Ma10" scale. Note also that "F#" has a multiple of 25 in its numerator.
After clicking on ADJUST SCALE, the scale "Ma10" is completed with "B" in position 15/8. This has been done by raising all the notes by one syntonic comma (81/80) :
This procedure is known in Indian musicology as sadja-sadharana, which means that all the notes of the scale are raised by a shruti — here, a syntonic comma (Shringy & Sharma 1978). In this model, it is also invoked for the scales "Ma11" and "Ma12". The result is (as expected) a circular model because "Ma13" is identical to "Ma01" as shown by the scale comparator at the bottom of page "-to.12_scales".
This circularity is a property of the set of murcchana-s which has no effect on exported minor and major scales, since their positions are aligned according to the basic rule explained in the first section.
Exporting and aligning minor scales
The "Ma04" murcchana produces "Cmin" by exporting notes facing the marks on the inner wheel.
The "Cmin" chromatic scale exported from the "Ma04" transposition
As explained on page Just intonation: a general framework, the tonic and dominant notes of each minor chord should belong to the "minus-1" position. In this example, "C" and "G" are one comma lower in a "C minor" chord than in a "C major" chord (corresponding to "DO-1" and "SOL-1" on the "2_cycles_of_fifths" scale), a fact predicted and experimentally verified by Pierre-Yves Asselin (2000 p. 137).
All chromatic minor scales exported from the murchana-s of the Ma-grama are correctly positioned with respect to the enharmonic positions of the main notes in just-intonation chords. This can be easily checked by comparing the ratios with those associated with the western series on "2_cycles_of_fifths" (top of this page). This confirms that a tuning system using only two series of perfect fifths is suitable for the construction of a just-intonation framework.
Exporting and aligning major scales
The "Ma04" murcchana produces "Ebmaj" by exporting notes facing the marks on the inner wheel and raising "F":
The "Ebmaj" chromatic scale exported from the "Ma04" transposition
According to a rule explained on the page Just intonation: a general framework, the root of each major chord should be both in the high position and in the Pythagorean series (blue markings). This is true for the chord "Eb major" taken from the chromatic scale "Ebmaj", but not for the scales "F#maj", "Bmaj" and "Emaj" shown in bold on the table.
For example, let us look at "Emaj", which was exported from "Ma09" without any precautions:
Scale "Emaj" exported from "Ma09", before its alignment
The note "E" has a frequency ratio of 5/4, which is labelled "MI-1" on the scale "2_cycles_of_fifths" (top of this page). Since "MI-1" belongs to a harmonic series, it cannot be taken as a the tonic of an "E major chord". The Pythagorean "MI" (ratio 81/64) should be used instead.
After its adjustment — raising all notes by 1 syntonic comma — the final "Emaj" scale is obtained:
Scale "Emaj" exported from "Ma09", after its alignment
This alignment of exported major scales is done automatically by the Bol Processor when exporting a major chromatic scale.
References
Asselin, P.-Y. Musique et tempérament. Paris, 1985, republished in 2000: Jobert. Soon available in English.
Tanpura: the drone of Indian musicians — manufactured in Miraj (read paper)
This article demonstrates the theoretical and practical construction of microtonal scales for the intonation of North Indian ragas, using tools available with the Bol Processor (BP3).
This raga intonation exercise demonstrates BP3's ability to handle sophisticated models of micro-intonation and to support the fruitful creation of music embodying these models.
Theory versus practice
To summarise the background, the framework for constructing 'just intonation' scales is a deciphering of the first six chapters of the Nāṭyaśāstra, a Sanskrit treatise on music, dance and drama dating from a period between 400 BC and 200 AD. For convenience, we call it "Bharata's Model", although there is no historical record of a single author by that name.
Using exclusive information driven from the text and its description of the Two-vina experiment, an infinite number of valid interpretations of the ancient theory are possible, as shown in A Mathematical Discussion of the Ancient Theory of Scales according to Natyashastra (Bel 1988a). Among these, the one advocated by many musicologists — influenced by Western acoustics and scale theories — is that the frequency ratio of the harmonic major third would be 5/4. This is equivalent to setting the frequency ratio of the syntonic comma at 81/80.
Although this interpretation provides a consistent model for just intonation harmony - see Just intonation, a general framework — it would be a stretch to claim that the same applies to raga intonation. Accurate assessment of raga performance using our Melodic Movement Analyser (MMA) in the early 1980s revealed that melodic structures derived from statistics (using selective tonagrams, see below) often differ significantly from the scales predicted by the "just intonation" interpretation of Bharata's model. Part of the explanation could be the strong harmonic attraction of drones (tanpura) played in the background of raga performances.
Speaking of grama-s (scale frameworks) in the ancient Indian theory, E.J. Arnold wrote (1982 p. 40):
Strictly speaking the gramas belong to that aspect of nada (vibration) which is anahata ("unstruck"). That means to say that the "grama" can never be heard as a musical scale [as we did on page Just intonation, a general framework]. What can be heard as a musical scale is not the grama, but any of its murcchanas.
Bel's Shruti Harmonium (1980)
Once electronic devices such as the Shruti Harmonium (1979) and the Melodic Movement Analyser (1981) became available, the challenge for raga intonation research was to reconcile two methodologies: a top-down approach, testing hypothetical models against data, and a data-driven bottom-up approach.
The "microscopic" observation of melodic lines (now easily rendered by software such as Praat) has confirmed the importance of note treatment (ornamentation, alankara) and temporal dimensions of raga that are not taken into account by scale theories. For example, the rendering of the note 'Ga' in raga Darbari Kanada (Bel & Bor 1984; van der Meer 2019) and the typical treatment of notes in other ragas (e.g. Rao & Van der Meer 2009; 2010) have been discussed at length. The visual transcription of a phrase from raga Asha illustrates this:
A brief phrase of raga Asha transcribed by the MMA and in Western conventional notation
Non-selective tonagram of raga Sindhura sung by Ms. Bhupender Seetal
To extract scale information from this melodic continuum, a statistical model was implemented to show the distribution of pitch over an octave. The image shows the tonagram of a 2-minute sketch (chalana) of raga Sindhura taught by Pandit Dilip Chandra Vedi.
The same recording of Sindhura on a selective tonagram
The same melodic data was processed again after filtering through 3 windows that attempted to isolate 'stable' parts of the line. The first window, typically 0.1 seconds, would eliminate irregular segments, the second (0.4 seconds) would discard segments outside a rectangle of 80 cents height, and the third was used for averaging. The result is a "skeleton" of the tonal scale, displayed as a selective tonagram.
These results would often not match the scale metrics predicted by the 'just intonation' interpretation of Bharata's model. Continuing with this data-driven approach, we produced the (non-selective) tonagrams of 30 ragas (again, chalana-s) to compute a classification based on their tonal material. Dissimilarities between pairs of graphs (computed using Kuiper's algorithm) were approximated as distances, from which a 3-dimensional classical scaling was extracted:
A map of 30 North-Indian ragas constructed by comparing tonagrams of 2-minute sketches (chalana-s) of sung performances (Bel 1988b)
This experiment suggests that contemporary North-Indian ragas are amenable to meaningful automatic classification on the basis of their (time-independent) intervalic content alone. This approach is analogous to human face recognition techniques, which are able to identify related images from a limited set of features.
Setup of Bel's Melodic Movement Analyser MMA2 (black front panel) on top of the Fundamental Pitch Extractor at the National Centre for the Performing Arts (Mumbai) in 1983
This impressive classification has been obtained by statistical analysis of static representations of raga performance. This means that the same result would be obtained by playing the sound file in reverse, or even by slicing it into segments reassembled in a random order…
Music is a dynamic phenomenon that cannot be reduced to tonal "intervals". Therefore, subsequent research into the representation of the melodic lines of raga — once it could be efficiently processed by 100% digital computing — led to the concept of Music in Motion, i.e. synchronising graphs with sounds so that the visuals reflect the music as it is being heard, arguably the only appropriate"notation" for raga (Van der Meer & Rao 2010; Van der Meer 2020).
This graph model is probably a great achievement as an educational and documentary tool, indeed the environment I dreamed of when designing the Melodic Movement Analyser. However, to promote it as a theoretical model is the continuation of a Western selective bias. As far as I know, no Indian music master has ever attempted to describe the intricacies of raga using hand-drawn melograms, although they could. The fascination with technology — and Western 'science' in general — is no indication of its relevance to ancient Indian concepts.
Music is judged by ears. Numbers, charts and graphs are merely tools for interpreting and predicting sound phenomena. Therefore, a theory of music should be judged by its ability to produce musical sounds via predictive model(s). This approach is called analysis by synthesis in Daniel Hirst's book on speech prosody. (Hirst, 2024, p. 161):
Analysis by synthesis involves trying to set up an explicit predictive model to account for the data which we wish to describe. A model, in this sense, is a system which can be used for analysis — that is deriving a (simple) abstract underlying representation from the (complicated) raw acoustic data. A model which can do this is explicit but it is not necessarily predictive and empirically testable. To meet these additional criteria, the model must also be reversible, that is it must be possible to use the model to synthesise observable data from the underlying representation.
This is the raison d'être for the following investigation.
Microtonal framework
The "flexible" model derived from the theoretical model of Natya Shastra (see The Two-vina experiment) rejects the claim of a precise frequency ratio for the harmonic major third classified in ancient literature as anuvadi (asonant). This implies that the syntonic comma (pramāṇa-ṣrūti in Sanskrit) could have a value ranging from 0 to 56.8 cents instead of the standard value of 21.5 cents in "just intonation".
Let us look at some graphical representations (from the Bol Processor) to illustrate these points.
The basic framework of musical scales, according to Indian musicology, is a set of 22 tonal positions in the octave called shruti-s in ancient texts. Below is the framework displayed by the Bol Processor (microtonal scale "grama") with a 81/80 syntonic comma (21.5 cents).
The names of the positions "r1_", "r2_", etc. follow the constraints of lower case initials and the addition of an underscore to distinguish octave numbers. Positions "r1" and "r2" are two ways of locating komal Re ("Db" or "re bemol"), while "r3" and "r4" denote shuddha Re ("D" or "re"), etc.
The "grama" scale, which displays 22 shruti-s according to the model of Natya Shastra, with an 81/80 syntonic comma
These 22 shruti-s can be heard on the page Just intonation, a general framework, bearing in mind (see above) that this is a framework and not a scale. No musician would ever attempt to play or sing these positions as "notes".
What happens if the value of the syntonic comma is changed? Below is the same framework with a comma of 0 cents. In this case, any "harmonic position" — that is, one whose fraction contains a multiple of 5 — moves to its nearest Pythagorean neighbour (i.e. only multiples of 3 and 2). The result is a "Pythagorean tuning". At the top of the circle, the remaining gap is a Pythagorean comma. The positions are slightly blurred because of the mismatches associated with a very small interval (the schisma).
The "grama scale" of 22 shruti-s with a syntonic comma of 0 cent.
Below is the framework with a syntonic comma of 56.8 cents (its upper limit):
The "grama scale" of 22 shruti-s with a syntonic comma of 56.8 cents.
In this representation, "harmonic major thirds" of 351 cents would most likely sound "out of tune" because the 5/4 ratio yields 384 cents. In fact, "g2" and "g3" are both distant by a quarter tone between Pythagorean "g1" (32/27) and Pythagorean "g4" (81/64). Nevertheless, the internal consistency of this framework (counting perfect fifths in blue) makes it suitable for constructing musical scales.
Between these limits of 0 and 56.8 cents, the graphic representation of the scales and their internal tonal structure remain unchanged, bearing in mind that the size of the major-third intervals is determined by the syntonic comma, and vice-versa.
Construction of scale types
Manuscript of the description of Zarlino's "natural" scale
The model taken from Bharata's Natya Shastra is not an obvious reference for prescribing raga intonation, as this musical genre came into existence a few centuries later.
Most of the background knowledge required for the following presentation is borrowed from Bose (1960) and my late colleague E. James Arnold who published A Mathematical model of the Shruti-Swara-Grama-Murcchana-Jati System (Journal of the Sangit Natak Akademi, New Delhi 1982). Arnold studied Indian music in Banaras and Delhi in the 1970s and the early 1980s.
Bose was convinced (1960 p. 211) that the scale called Kaishika Madhyama was equivalent to a "just-intonation" seven-degree scale of Western musicology. In other words, he took it for granted that the 5/4 frequency ratio (harmonic major third) should be equivalent to the 7-shruti interval, but this statement had no influence on the rest of his analysis.
Arnold (right) and Bel (left) demonstrating shruti-s at the international East-West music conference, Bombay 1983
Arnold (1982 p. 17) immediately used integer ratios to construct intervals with the fixed syntonic comma (81/80), but, as suggested above, this does not affect his model in terms of its structural description. He insisted on setting up a "geometric model" rather than a speculative description based on numbers, as many authors (e.g. Alain Daniélou) had attempted.
The most innovative aspect of Arnold's study was the use of a circular sliding model to illustrate the matching of intervals in transposition processes (murcchana-s) - see page The Two-vina experiment.
In reality, it would be more convenient to continue to express all intervals in numbers of shruti-s, in accordance with the ancient Indian theory, but a machine needs metric data to draw graphics of scales. For this reason, we show graphs with a syntonic comma of 81/80, keeping in mind the possibility of changing this value at will.
Sa-grama and Ma-grama according to Natya Shastra. Red and green segments indicate perfect-fifth consonance. Underlined note names indicate 'flat' positions.
The 22-shruti framework offers the possibility of constructing 211 = 2048 chromatic scales, of which only 12 are "optimally consonant", i.e. contain only one wolf fifth (smaller by 1 syntonic comma = 22 cents).
The building blocks of the tonal system according to traditional Indian musicology are two seven-degree scales called Ma-grama and Sa-grama. Bose (1960 p. 13) writes: the Shadja Grāma developed from the ancient tetrachord in which the hymns of the Sāma Veda were chanted. Later on another scale, called the Madhyama Grāma, was added to the secular musical system. The two scales (Dorian modes, in Western terminology) differ in the position of Pa ("G" or "sol") which may differ by a syntonic comma (pramāņa ṣruti). In the Sa-grama, the interval Sa-Pa is a perfect fifth (13 shruti-s) whereas in the Ma-grama it is a wolf fifth (12 shruti-s). Conversely, the interval Pa-Re is a perfect fifth in Ma-grama and a wolf fifth in Sa-grama.
Bharata used the Sa-grama to expose his thought experiment (The Two vinas) aimed at determining the sizes of shruti-s. He then introduced two additional notes: kakali Nishada (komal Ni or "Bflat") and antara Gandhara (shuddh Ga or "E") to obtain a nine-degree scale from which "optimally consonant" chromatic scales could be derived from modal transpositions (murcchana). The process of constructing these 12 chromatic scales, which we named "Ma01", "Ma02"… "Sa01", "Sa02", etc., is explained on the page Just intonation, a general framework.
The selection of notes in each chromatic scale produces 5 to 7 note melodic types. In the Natya Shastra these melodic types are called jāti. These can be seen as the ancestors of ragas, although their lineages and structures are only speculative (read on). The term thāṭ (pronounced 'taat') — translated as 'mode' or 'parent scale' — was later adopted, each thāṭ being called by the name of a raga (see Wikipedia). Details of the process, terminology and surveys of subsequent musicological literature can be found in publications by Bose and other scholars.
The construction of the basic scale types is explained by Arnold (1982 p. 37-38). The starting point is the chromatic Ma-grama in its basic position — namely "Sa_murcchana" in the "-to.12_scales" tonality resource file. This scale can be visualised, using Arnold's sliding model, by placing the S note of the inner wheel on the S of the outer crown :
The Ma-grama chromatic scale in its basic position named "Sa_murcchana'
This yields the following intervals:
The Ma-grama chromatic scale in its basic position and with notes labeled in English
"Optimal consonance" is illustrated by two features: (1) there is only one wolf fifth (red line) in the scale — between D and G —, and (2) each note is connected to another note by a perfect fifth (blue line). This consonance is of paramount importance to Indian musicians. Consonant intervals are casually placed in melodic phrases to enhance the "flavour" of their notes, and there should be no wolf fifth in the scale.
Note that the Ma-grama chromatic scale has all its notes in their lower enharmonic positions.
The Ma-grama chromatic scale has been renamed "Sa_murcchana" here, because 'S' of the moving wheel is opposite the 'S' of the fixed crown. The note names have been converted (with a single click) to the Indian convention. Note that the key numbers have also been (automatically) fixed to match only the labelled notes. In this way, the upper "sa" is assigned key 72 instead of 83 in the "Ma01" scale shown on the Just intonation, a general framework page. The tonal content of this "Sa_murchana" is shown in this table:
Selecting only "unaltered" notes in "Sa_murcchana" — sa, re, gak, ma, pa, dha, nik — results in the "kaphi1" scale type named after the raga Kaphi (pronounced 'kafi'). This can be associated with a D-mode (Dorian) in Western musicology.
This scale type is saved under the name "kaphi1" because there will be another version of the Kaphi scale type.
In the "Sa_murcchana" the selection of notes can be done in two different ways:
Select antara Gandhara (namely "ga") in place of the scale's Gandhara (namely "gak"), thereby raising it by 2 shruti-s. This will result in a vikrit (modified) scale type, namely "khamaj1", associated with raga Khamaj.
Select both antara Gandhara and kakali Nishada (namely "ni" in place of "nik" raised by 2 shruti-s) which creates the "bilaval1" scale type associated with raga Bilaval.
A scale type named "bilaval3" matching Zarlino's "natural" scale
This "bilaval1" scale type is one of three versions of the Bilaval created by the murcchana process. Although it corresponds to the scale of the white keys on a keyboard instrument, it is not the usual "just intonation" diatonic scale, because of a wolf fifth between "sa" and "pa".
An alternative Bilaval scale type called "bilaval3" (extracted from the "Ni1_murcchana", see below) corresponds to Giozeffo Zarlino's "natural" scale — see Just intonation: a general framework. This is not to be confused with Zarlino's meantone temperament discussed on the Microtonality page.
An incompletely consonant scale type
A fourth option: raising "nik" to "ni" and keeping "gak", would produce a scale type in which "ni" has no consonant relationship with any other note in the scale. This option is therefore discarded from the model.
Each murcchana of the Ma-grama chromatic scale produces at least three types of scale by selecting unaltered notes, antara Gandhara or both antara Gandhara and kakali Nishada.
For example, to create the "Ni1_murcchana", open the "Sa_murcchana" page and enter "nik" (i.e. N3) as the note to be placed on "sa".
Raga scale types are stored in the "-to.raga" tonality resource file. Images are available with a single click and scale structures are compared on the main page.
The entire process is summarized in the following table (Arnold 1982 p. 38):
Step
Ma-grama chromatic murcchana starting from
Shuddha grama
Vikrit grama (antara)
Vikrit grama (antara + kakali)
1
Sa
kaphi1
khamaj1
bilaval1
2
Ma1
khamaj2
bilaval2
kalyan1
3
Ni1
bilaval3
kalyan2
marva1
4
Ga1
kalyan3
marva2
purvi1
5
Dha1
marva3
purvi2
todi1
6
Re1
purvi3
todi2
7
Ma3
todi3
lalit1 bhairao1
8
Ni3
lalit2 bhairao2 bhairavi1
9
Ga3
todi4 bhairavi2
10
Dha3
bhairavi3
asavari1
11
Re3
bhairavi4
asavari2
kaphi2
12
Pa3
asavari3
kaphi3
khamaj3
Scale types of the extended grama-murcchana series (Arnold 1982)
The use of this table deserves a graphical demonstration. For example, let us create a scale type "kalyan1" based on the "Ma1_murcchana". The table says that both "antara and kakali" should be selected. This means "antara Gandhara" which is "ga" in place of "gak" in the Ma-grama scale, and "kakali Nishada" which is "ni" in place of "nik" in the Ma-grama scale. This process is clear in the moving wheel model:
Selecting notes to create the scale type "kalyan1" from the "Ma1_murcchana" of the chromatic Ma-grama. "M1" is set to "S". Then take the standard intervals from the Ma-grama moving wheel, replacing G1 with G3 and N1 with N3 as shown in the table.
To make this selection and export the "kalyan1" scale type, fill in the form on the "Ma1_murcchana" page as shown in the image.
Below is the resulting scale type.
The "kalyan1" scale type
Remember that note positions expressed as whole-number frequency ratios are only a matter of convenience for readers familiar with Western musicology. It would be more appropriate to follow the Indian convention of counting intervals in numbers of shruti-s. In this example, the interval between 'sa' and 'ma' is increased from 9 shruti-s (perfect fourth) to 11 shruti-s (tritone).
Arnold's model is an extension of the murcchana system described in Natya Shastra because it accepts murcchana-s starting from notes that do not belong to the original (7-degree) Ma-grama, taken from its "chromatic version": Dha1, Re1, Ma3, Ni3, Ga3. This extension is necessary to create scale types for Todi, Lalit and Bhairao that include augmented seconds.
In his 1982 paper (p. 39-41) Arnold linked his classification of scale types to the traditional list of jāti-s, the "ancestors of ragas" described in Sangita Ratnakara of Śārṅgadeva (Shringy & Sharma, 1978). Seven jāti-s are cited (p. 41), each of them being derived from a murcchana of the Ma-grama on one of its shuddha swara-s (basic notes).
Every jāti is associated with a note of relaxation (nyasa swara). In contemporary ragas, the nyasa swara is often found at the end of a phrase or a set of phrases. In Arnold's interpretation, the same should define the murcchana from which the melodic type (jāti) is born. Since the names of the shuddha jatis are in fact tied to their nyasa swaras, this also suggests that they should be tied to the murcchanas belonging to those nyasa swaras (Arnold 1982 p. 40).
Performance times associated with murcchana-s of the Ma-grama, according to Arnold (1985)
In other publications (notably Arnold & Bel 1985), Arnold used the cycle of 12 chromatic scales to suggest that the enharmonic positions of the notes could express states of tension or release linked to the changing ambience of the circadian cycle, thereby providing an explanation for the performance times assigned to traditional ragas. Low enharmonic positions would be associated with darkness and higher ones with daylight. Thus, ragas constructed using the Sa murcchana of the Ma-grama chromatic scale (all low positions, step 1) could be interpreted as being near midnight, while those that mix low and high positions (step 7) would carry the tensions of sunrise and sunset. Their sequence is a cycle because in the table above it is possible to jump from step 12 to step 1 by lowering all note positions by one shruti. This circularity is implied by the process called sadja-sadharana in musicological literature (Shringy & Sharma 1978).
A list of 85 ragas with performance times predicted by the model can be found in Arnold & Bel (1985). This hypothesis is interesting, and it does apply to many well-known ragas. However, we have never found the time to conduct a survey of musicians' statements about performance times, which could have determined whether it is valid.
Practice
Given the scale types stored in the "-to.raga" tonality resource file, the Bol Processor can be used to check their validity by playing melodies of ragas they are supposed to embody. It is also interesting to use these scales in musical genres unrelated with North Indian raga and "distort" them in every conceivable direction…
Choice of a raga
Todi Ragini, Ragamala, Bundi, Rajasthan, 1591 Public domain
We will take up the challenge of matching one of the four "todi" scales with two real performances of raga Todi.
Miyan ki todi is presently the most important raga of the Todi family and therefore often simply referred to as Todi […], or sometimes Shuddh Todi. Like Miyan ki malhar it is supposed to be a creation of Miyan Tansen (d. 1589). This is very unlikely, however, since the scale of Todi at the time of Tansen was that of modern Bhairavi (S RG M P DN), and the name Miyan ki todi first appears in 19th century literature on music.
Joep Bor (1999)
This choice presents a number of challenges. Firstly, the four variants of the "todi" scale are derived from an extension of the grama-murcchana system which is questionable. Secondly, the notes "ni" and "rek", "ma#" and "dhak" are close to the tonic "sa" and the dominant "pa" and could be "attracted" by them, thus disrupting the "geometry" of the theoretical scales in the presence of a drone.
Lastly, and most significantly, the performer's style and personal choices are expected to be at odds with this theoretical model. As suggested by Rao and van der Meer (2010, p. 693):
[…] it has been observed that musicians have their own views on intonation, which are handed down within the tradition. Most of them are not consciously aware of academic traditions and hence are not in a position to express their ideas in terms of theoretical formulations. However, their ideas are implicit in musical practice as musicians visualize tones, perhaps not as fixed points to be rendered accurately every time, but rather as tonal regions or pitch movements defined by the grammar of a specific raga and its melodic context. They also attach paramount importance to certain raga-specific notes within phrases to be intoned in a characteristic way.
We had already taken up the Todi challenge with an analysis of eight occurrences using the Melodic Movement Analyser (Bel 1988b). The analyser had produced streams of accurate pitch measurements which, after being filtered as selective tonagrams, were subjected to statistical analysis (Bel 1984; Bel & Bor 1984). The events included 6 performances of raga Todi and 2 experiments in tuning the Shruti Harmonium.
The four "best" tuning schemes for raga Todi (Bel 1988b p. 16) The second column is the standard deviation on intervals, and the third column is the standard deviation on positions relative to the tonic
The MMA analysis revealed a relatively high consistency of note positions, with standard deviations better than 6 cents for all notes except "ma#", for which the deviation rose to 10 cents, still an excellent stability. Comparison of these results with the 'flexible' grama-murcchana model showed less than 4 cent standard deviation of intervals for 4 different scales in which the syntonic comma (pramāņa ṣruti) would be set at 6, 18, 5 and 5 cents respectively. In discussing tuning schemes, Wim van der Meer even suggested that musicians could "solve the problem" of a "ni-ma#" wolf fifth by tempering fifths over the "ni-ma#-rek-dhak" cycle (Bel 1988b p. 17).
Our conclusion was that no particular "tuning scheme" could be taken for granted on the basis of "raw" data. It would be more realistic to study a particular performance by a particular musician.
Working with the Shruti Harmonium naturally led us to meet Kishori Amonkar (1932-2017) in 1981. She was a leading exponent of Hindustani music, having developed a personal style that claimed to transcend classical schools (gharanas).
Most interestingly, she performed accompanied by a swara mandal (see picture), a zither that she tuned for each raga. Unfortunately we were not equipped to measure these tunings with sufficient accuracy. So we used the Shruti Harmonium to programme the intervals according to her instructions.
This experiment did not go well for two reasons. A technical one: on that day, a frequency divider (LSI circuit) on the harmonium was defective; until it was replaced, some programmed intervals were inaccessible. A musical one: the experiment showed that this precise harmonium was not suitable for tuning experiments with Indian musicians. The frequency ratios had to be entered on a small keyboard, a use too far removed from the practice of string tuning. This was a major incentive to design and build our "microscope for Indian music", the Melodic Movement Analyser (MMA) (Bel & Bor 1984).
In the following years (1981-1984) MMA experiments took up all our time and revealed the variability (but not the randomness) of raga intonation. For this reason we could not return to tuning experiments. Today, a similar approach would be much easier with the help of the Bol Processor… if only the expert musicians of that time were still alive!
Choice of a scale type
We need to decide between the four "todi" scale types produced by the murcchana-s of the Ma-grama chromatic scale. For this we can use the measurements of the Melodic Movement Analyser (Bel 1988b p. 15). Let us take average measurements and those of a performance by Kishori Amonkar. These are note positions (in cents) against the tonic "sa".
Note
Average
Standard deviation
Kishori Amonkar
rek
95
4
96
gak
294
4
288
ma#
606
10
594
pa
702
1
702
dhak
792
3
792
(dhak)
806
3
810
ni
1107
6
1110
The "dhak" between brackets is a measurement in the low octave
For the moment we will ignore "dhak" in the lower octave as it will be dealt with separately. Let us compare Kishori Amonkar's results with the four scale types:
Note
Kishori Amonkar
todi1
todi2
todi3
todi4
rek
96
89
89
89
112
gak
288
294
294
294
294
ma#
594
590
590
610
610
pa
702
702
702
700
702
dhak
792
792
792
792
814
ni
1110
1088
1109
1109
1109
Scale type "todi2", the best match to a performance of Kishori Amonkar
There are several ways of finding the best match for musical scales: either by comparing scale intervals or by comparing note positions in relation to the base note (tonic). Because of the importance of the drone, we will use the second method. The choice is simple here. Version "todi1" can be discarded because of "ni", the same with "todi3" and "todi4" because of "ma#". We are left with "todi2" which has a very good match, even with the measurements of performances by other musicians.
Adjustment of the scale
The largest deviations are on "rek" which was sung 7 cents higher than the predicted value and "gak" which was sung 6 cents lower. Even a 10-cent deviation is practically impossible to measure on a single note sung by a human, including a high-profile singer like Kishori Amonkar; the best resolution used in speech prosody is greater than 12 cents.
Any "measurement" of the MMA is an average of values along the rare stable melodic steps. It may not be representative of the "real" note due to its dependence on note treatment: if the note's approach is in a range on the lower/higher side, the average will be lower/higher than the target pitch.
Therefore, it would be acceptable to declare that the scale type "todi2" corresponds to the performance. However, let us show how the model can be modified to reflect the measurements more accurately.
First we duplicate "todi2" to create "todi-ka" (see picture). Note positions are identical in both versions.
Looking at the picture of the scale (or the numbers on its table), we can see that all the note positions except "ma#" are Pythagorean. The series to which a note belongs is indicated by the colour of its pointer: blue for Pythagorean and green for harmonic.
Modified "todi2" scale matches the measured "ma#"
This means that changing the size of the syntonic comma — in strict accordance with the grama-murcchana model — will only adjust "ma#". To change the position of "ma#" from 590 to 594 cents (admittedly a ridiculously small adjustment) we need to reduce the size of the syntonic comma by the same amount. This can be done at the bottom right of the "todi-ka" page, changing the syntonic comma to 17.5 cents, a change confirmed by the new image.
A table on the "todi-ka" page shows that the "rek-ma#" interval is still considered a "perfect" fifth, even though it is smaller by 6 cents.
It may not be obvious whether the syntonic comma needs to be increased or decreased to fix the position of "ma#", but it is easy to try the other way in case the direction was wrong.
Final version of "todi2" adjusted to Kishori Amonkar's performance in the medium octave (4)
Other adjustments deviate from the "pure" model. These result in changing frequency ratios in the table on the "todi-ka" page. An increase in "rek" from 89 to 96 cents requires an increase of 7 cents, corresponding to a ratio of 2(7/1200) = 1.00405. This changes the position of "rek" from 1.053 to 1.057.
In the same way, a reduction in "gak" from 294 to 288 cents requires a reduction of 6 cents, giving a ratio of 2(-6/1200) = 0.9965. This brings the position of "gak" from 1.185 to 1.181.
Fortunately, these calculations are done by the machine: use the "MODIFY NOTE" button on the scale page.
The picture shows that the information of "rek" and "gak" belonging to Pythagorean series (blue line) is preserved. The reason for this is that whenever a frequency ratio is modified by its floating-point value, the machine checks whether the new value is close to an integer ratio of the same series. For example, changing "rek" back to 1.053 would restore its ratio to 256/243. Accuracy better than 1‰ is required for this adjustment.
A tuning scheme for this scale type is suggested by the machine. The graphical representation shows that "ni" is not consonant with "ma#" as their interval is 684 cents, close to a wolf fifth of 680 cents. Other notes are arranged on two cycles of perfect fifths. Interestingly, raising "rek" by 7 cents brought the "rek-ma#" fifth back to its perfect size (702 cents).
Again, these are meaningless adjustments for a vocal performance. We are just showing what to do when necessary.
The "todi2" scale type with "dhak" adjusted for the low octave (3)
The remaining adjustment will be that of the "dhak" in the lower octave. To do this, we will duplicate the previous scale, renaming it "todi_ka_4" to indicate that it is designed for the 4th octave. In the new scale, called "todi_ka_3", we raise "dhak3" by 810 -792 = 18 cents.
This raises its position from 1.58 to 1.597. Note that this puts it exactly in a position in the harmonic series since the syntonic comma is 17.5 cents.
In addition, "dhak-sa" is now a harmonic major third — with a size of 390 cents to match the 17.5 cents comma. This is certainly significant in the melodic context of this raga, which is one reason why all the musicians made the same size adjustment in their tuning experiments.
This case is a simple illustration of raga intonation as a trade-off between harmonicity with respect to the drone and the need for consonant melodic intervals. It also shows that the Shruti Harmonium could not follow the practice of the musicians because its scale ratios were replicated in all octaves.
Choice of a recording
We don't have the recording on which the MMA analysis was made. One problem with old tape recordings is the unreliability of the speed of tape transport. Also, on a long recording, the frequency of the tonic can change slightly due to variations in room temperature, which affects the instruments — including the dilation of the tape…
In order to try to compare scales a with real performances, and to examine extremely small "deviations" (which have little musical significance, in any case), it is therefore safer to work with digital recordings. This was the case with Kishori Amonkar's Todi, recorded in London in early 2000 for the Passage to India collection, and available free of copyright (link on Youtube). The following is based on this recording.
Setting up the diapason
Let us create the following "-gr.tryRagas" grammar:
-se.tryRagas -to.raga
S --> _scale(todi_ka_4,0) sa4
Adjusting note convention in "-se.tryRagas"
In "-se.tryRagas" the note convention should be set to "Indian" so that "sa4" etc. is accepted even when no scale is specified.
The grammar calls "-to.raga", which contains the definitions of all the scale types created by the procedure described above. Unsurprisingly, it does not play the note "sa" at the frequency of the recording. We therefore need to measure the tonic in order to adjust the frequency of "A4" (diapason) in "-se.tryRagas" accordingly. There are several ways to do this with increasing accuracy.
A semitone approximation can be obtained by comparing the recording with notes played on a piano or any electronic instrument tuned with A4 = 440 Hz. Once we have found the key that is closest to "sa" we calculate its frequency ratio to A4. If the key is F#4, which is 3 semitones lower than A4, the ratio is r = 2(-3/12) = 0.840. To get this frequency on "sa4" we would therefore have to adjust the frequency of the diapason (in "-se.tryRagas") to:
440 x r x 2(9/12) = 440 x 2((9-3)/12) = 311 Hz
A much better approximation is obtained by extracting a short occurrence of "sa4" at the very beginning of the performance:
A short occurrence of "sa4" in the beginning of Kishori Amonkar's raga Todi
Then select a seemingly stable segment and extend the time scale to get a visible signal:
Expansion of a very brief "stable" occurrence of "sa4"
This sample contains 9 cycles for a duration of 38.5 ms. The fundamental frequency is therefore 9 x 1000 / 38.5 = 233.7 Hz. Consequently, adjust the diapason in "-se.tryRagas" to 233.7 x 2(9/12) = 393 Hz.
The last step is a fine tuning by comparing the production of the notes in the grammar by ear with the recording of "sa4" played in a loop. To do this, we produce the following sequence:
These are eight occurrences of "sa4" played at slightly increasing pitches adjusted by the pitchbend. First make sure that the pitchbend is measured in cents: this is specified in the instrument "Vina" called by "-.raga" and the Csound orchestra file "new-vina.orc".
Listening to the sequence may not reveal any pitch differences, but these will be apparent to a trained ear when superimposed on the recording:
Recording on "sa4" overlaid with a sequence of "sa4" at slightly rising pitches. Which is in tune? ➡ This is a stereo recording. Use headphones to hear the song and the sequence of plucked notes on separate channels
One of the four occurrences sounds best in tune. Let us assume that the best match is on _pitchbend(+10). This means that the diapason should be raised by 10 cents. Its new frequency would therefore be 393 x 2(10/1200) = 395.27 Hz.
In fact the best frequency is 393.22 Hz, which means that the second evaluation (which gave 393 Hz) was fair — and the singers' voices very reliable! Now we can check the frequency of "sa4" on the Csound score:
These methods could actually be summarised by the third: use the grammar to produce a sequence of notes in a wide range to determine an approximate pitch of "sa4" until the small range for the pitchbend (± 200 cents) is reached. Then play sequences with pitchbend values in increasing accuracy until no discrimination is possible.
In a real exercise it would be safe to check the measurement of "sa4" against occurrences in several parts of the recording.
This approach is too demanding in terms of accuracy for the analysis of a vocal performance, but it will be noticeable when working with a long-stringed instrument such as the rudra veena. We will demonstrate this with Asad Ali Kan's performance.
Matching phrases of the performance
We are now ready to check whether note sequences produced by the model would match similar sequences in the recording.
👉 The following demo uses the BP3's interface to Csound, which until recently was the only way to create microtonal intervals. The same can now be done using MIDI microtonality, both in real time and with MIDI files. It is possible to capture MIDI messages from a keyboard and send them to a MIDI device with corrections made by a microtonal scale. In this way, there is no need for the creation of grammars for these tests.
First we try a sequence with the emphasis on "rek". The following sequence of notes is produced by the grammar:
Below is the phrase sung by the musicians (position 0'50") then repeated in superposed form with the sequence produced by the grammar:
A phrase with emphasis on "rek" sung by Kishori Amonkar, then reproduced in superposed form with the sequence of notes produced by the grammar using scale "todi_ka_3" ➡ This is a stereo recording. Use headphones to hear the song and sequence of plucked notes on separate channels
In this example, the scale "todi_ka_3" has been used because of the occurrence of short instances of "dhak3". The position of "rek" is identical in the 3d and 4th octaves. The blending of the voice with the plucked instrument is notable in the last held note.
In the next sequence (location 1'36") the position of "gak4" is estimated. The grammar is as follows:
A phrase targeting "gak" repeated in superimposition with the sequence of notes produced by the grammar using the scale "todi_ka_4"
This time, the scale "todi_ka_4" was chosen, even though it had no effect on the intonation since "dhak" is missing.
A word about building the grammar: we looked at the signal of the recorded phrase and measured the (approximate) duration of the notes: 1.37s, 3.1s, 1.8s, 7.5s, 4.4s. We then converted these durations into integer ratios — fractions of the basic tempo whose period is exactly 1 second, as specified in "-se.tryRagas": 137/100, 31/10 etc.
Signal of the previous recorded phrase
Below is a pianoroll of the sequence produced by the grammar:
Pianoroll of the note sequence produced by the grammar
No we try a phrase with a long pause on "dhak3" (location 3'34"), which proves that the scale "todi_ka_3" perfectly matches this occurrence of "dhak":
S --> KishoriAmonkar6 KishoriAmonkar6 --> _scale(todi_ka_4,0) 28/100 {29/100,ma#4}{40/100,dhak4}{63/100,ni4 sa5 ni4}{122/100,dhak4}{64/100,pa4}{83/100,ma#4}{44/100,pa4}{79/100,dhak4}
A light touch of "pa"
Pitch accuracy is no surprise in Kishori Amonkar's performances. With a keen awareness of "shruti-s", she would sit on the stage and pluck her swara mandal, carefully tuned for each raga.
A test with the rudra veena
Asad Ali Khan playing the rudra veena
Asad Ali Khan (1937-2011) was one of the last performers of the rudra veena at the end of the 20th century and a very supportive participant in our scientific research on raga intonation.
➡ An outstanding presentation of Asad Ali Khan and his idea of music is available in a film by Renuka George.
Pitch accuracy on this instrument is such that we have been able to identify tiny variations that are controlled and significant in the context of the raga. Read for example Playing with Intonation (Arnold 1985). To measure vibrations below the audible range, we occasionally placed a magnetic pickup near the last string.
Below are the statistics of the Melodic Movement Analyser measurements of the raga Miyan ki Todi interpreted by Asad Ali Khan in 1981. The second column contains measurements of his tuning of the Shruti Harmonium during an experiment. The columns on the right show the predicted note positions according to the grama-murchana model with a syntonic comma of ratio 81/80. As shown in Kishori Amonkar's performance above, "dhak" can take different values depending on the octave.
Note
Asad Ali Khan performing
Asad Ali Khan tuning
todi1
todi2
todi3
todi4
rek
99
100
89
89
89
112
gak
290
294
294
294
294
294
ma#
593
606
590
590
610
610
pa
702
702
702
702
700
702
dhak3
795
794
792
792
792
814
dhak2
802
ni
1105
1108
1088
1109
1109
1109
Again, the best match would be the "todi2" scale with a syntonic comma of 17.5 cents. We created two scales, "todi_aak_2" and "todi_aak_3" for the 2nd and 3rd octaves.
Adjustments of the "todi2" scale for Asad Ali Kan's performance on the rudra veena. Low octave on the left and middle octave on the right.
The scale constructed during the Shruti Harmonium experiment is less relevant because of the influence of the experimenter playing the scale intervals with a low-attracting drone (produced by the machine). In his attempt to resolve the dissonance in the scale — which always contained a wolf fifth and several Pythagorean major thirds — Khan saheb ended up with a tuning identical to the initial one, but one comma lower. This was not a musically significant situation!
Tuning scheme for "todi_aak_2"
The scale "todi_aak_2" (in the low octave) contains interesting intervals (harmonic major thirds) which allows us to anticipate effective melodic movements. The tuning scheme summarises these relationships.
We now take fragments of Asad Ali Khan's performance of Todi (2005) available on Youtube (follow this link).
The performance begins in the lower octave, so with the scale "todi_aak_2". The frequency of Sa was measured at 564.5 Hz using the method described above.
Let us start with a simple melodic phrase repeated twice, the second time superimposed on the note sequence produced by the grammar.
A phrase from the raga Todi by Asad Ali Khan repeated twice, the second time superimposed on the sequence of notes produced by the grammar. ➡ This is a stereo recording. Use headphones to hear the song and the sequence of plucked notes on separate channels
This grammar contains an unusual character '&', which is used to concatenate sound objects (or notes) across the boundaries of polymetric expressions (between curly brackets). This makes it possible to play the final "rek3" and "sa3" as continuous notes. This continuity can be seen in the graph below:
The end of the phrase, showing "rek3" and "sa3" as continuous notes
It is time to make sure that fine tuning and adjusting scales are more than just an intellectual exercise… After all, the main difference between scales "todi_aak_2" and "todi_aak_3" is that "dhak" is 7 cents higher in "todi_aak_2", which means a third of a comma! To check the effect of the fine-tuning, listen to the overlay twice, once with "todi_aak_3" and the second time with "todi_aak_2":
The same "dhak2" with a note made with "todi_aak_3" and the second time with "todi_aak_2"
To check the difference between these two versions of "dhak2", we can play them one after the other and then superimpose them:
The two versions of "dhak2" in sequence then superimposed
With fundamental frequencies of 132.837 Hz and 133.341 Hz, the beat frequency (of the sine waves) would be 133.341 - 132.837 = 0.5 Hz. The perceived beat frequency is higher because of the interference between the higher partials. This suggests that a difference of 7 cents is not irrelevant in the context of notes played by a long-stringed instrument (Arnold 1985).
As "sa2" is outside the range of the Csound instrument "Vina", it is played here as "rek2" with a pitchbend correction of one semitone.
Low octave phrase repeated with attempted superimposition of a note sequence
The rendering of phrases in the lower octave is very approximate because of the predominance of meend (pulling the string). Some effects can be better imitated using performance controls — see Sarasvati Vina, for example — but this requires a mastery of the real instrument in order to design patterns of musical "gestures" rather than sequences of sound events… Imitating the melodic intricacy of a raga is not the subject of this page; we are merely checking the relevance of scale models to the "tonal skeleton" of ragas.
Accidental notes
Raga scales extracted from murchana-s of the Ma-grama chromatic scale (see above) contain only notes that are presumed to belong to the raga. They cannot accommodate accidental notes or the scales used in the common practice of mixing ragas.
Let us take, for example, a fragment of the previous example, which was poorly represented by the sequence of notes produced by the grammar. (We learn from our mistakes!) We might be tempted to replace the expression {38/10, pa2 gak2 pa2 dhak2 _ pa2 _} with {38/10, pa2 ga2 pa2 dhak2 _ pa2 _}, using "ga2" which does not belong to the scale "todi_aak_2". Unfortunately, this results in an error message:
ERROR Pitch class ‘4’ does not exist in _scale(todi_aak_2). No Csound score produced.
This amounts to saying that scale "todi2" contains no mapping of key #64 to "ga" — nor key # 65 to "ma", see figure.
To solve this problem we can recall that the scale "todi2" was extracted from "Re1_murcchana". The latter contains all the notes of a chromatic scale in addition to those extracted. Therefore it is sufficient to replace "_scale(todi_aak_2,0)" with "_scale(Re1_murcchana,0)" in this section:
The scale editor takes care of assigning a key number to each note based on the chromatic scale if a standard English, Italian/French or Indian note convention is used. In other cases this mapping should be done by hand. Designers of microtonal scales should be aware of key mappings when using custom names for "notes".
Another problem is that in "todi_aak_2" note "dhak" has been raised from 792 to 810 cents, which is not its value in "Re1_murcchana". This can be fixed by creating another variant of the scale with this correction, or simply using the pitchbend to modify "dhak2" — in which case the same pitchbend could have been used to raise "gak2" in the first place.
Finally, the best way to avoid this problem would be to use the source chromatic scale "Re1_murcchana", a murcchana of Ma-grama, to construct raga scales even though some notes will never be used.
To conclude…
This whole discussion has been technical. There is no musical relevance in trying to associate plucked notes with very subtly ornamented melodic movements. The last excerpt (2 repetitions) will prove — if it is needed at all — that the intonation of Indian ragas is much more than a sequence of notes in a scale, whatever its accuracy:
This melodic phrase is repeated 2 times to check its superposition with the sequence of notes produced by the grammar ➡ This is a stereo recording. Use headphones to hear the song and the sequence of plucked notes on separate channels
For a more convincing demo, instead of Csound, I recommend using MIDI microtonality in real time to capture notes played on a keyboard and send them to a MIDI device with corrections made by the microtonal scale.
Attempting to follow the intricacies of alankara (note treatment) with a simplistic notation of melodic phrases demonstrates the disconnection between "model-based" experimental musicology and the reality of musical practice. This explains why we have relied on descriptive models (e.g. automatic notation) captured by the Melodic Movement Analyser or computer tools such as Praat, rather than attempting to reconstruct melodic phrases from theoretical models. Experiments with scales deal with the "skeletal" nature of intonation, which is a necessary but not sufficient parameter for describing melodic types.
Bharata. Natya Shastra. There is no currently available English translation of the first six chapters of Bharata’s Natya Shastra. However, most of the information required for this interpretation has been reproduced and commented by Śārṅgadeva in his Sangita Ratnakara (13th century AD).
Bor, J.; Rao, S.; van der Meer, W.; Harvey, J. The Raga Guide. Nimbus Records & Rotterdam Conservatory of Music, 1999. (Book and CDs)
This project began in 1980 with the founding of the International Society for Traditional Arts Research (ISTAR) in New Delhi, India. We had produced joint articles and proposals which enabled us (Arnold and Bel) to receive a grant from the International Fund for the Promotion of Culture (UNESCO). A booklet of ISTAR projects was then printed in Delhi, and a larger team received support from the Sangeet Research Academy (SRA, Calcutta/Kolkata), the Ford Foundation (USA) and later the National Centre for the Performing Arts (NCPA, Bombay/Mumbai).
The following are extracts from letters of support received during this initial period — after the construction of the Shruti Harmonium and during the design of the Melodic Movement Analyser. (ISTAR booklet, 1981 pages 20-22)
In fact, the full potential of this approach can only be realised now, taking advantage of the (virtually unlimited) digital devices that are replacing the hardware we created for this purpose 40 years ago!
The work of Mr. Arnold and Mr. Bel, as much from the theoretical point of view as from the point of view of the practical realization, appears to be one of the best of these last years, as concerns the musical analysis of the classical music of India… — Dr. Iégor REZNIKOFF, Director, UER of Philosophy, History of Art and Archeology, Mathematics, University of Paris X - Nanterre.
I consider that this work presents the greatest interest and is capable of considerably advancing the understanding of the problem of the use of micro-intervals in the music of India, and more generally, that of the intervals found in different modal musics. — Dr. Gilbert ROUGET, Director of Research at CNRS, in charge of the Department of Ethnomusicology at the Musée de l'Homme, Paris.
The ideas and conceptions of Mr. Arnold and Mr. Bel seem tome to have the utmost interest musically because they rest not just on pure theories; but on a profound understanding of melodic and modal music, etc. The project which Mr. Bel presented to me could bring about a realization much more interesting and effective than that of the various "melographs" which have been proposed… — Dr. Émile LEIPP, Director of Research at the CNRS, Director of Laboratoire d'Acoustique, University of Paris VI.
The project entitled "A Scientific study of the modal music of North India" undertaken by E. James Arnold and Bernard Bel is very interesting and full of rich potentials. This collaboration of mathematics and physical sciences as well as engineering sciences on the one hand, and Indology and Indian languages, musicology, as well as applied music on the other hand can be reasonably expected to yield fascinating results. — Dr. Prem Lata SHARMA, Head of the Department of Musicology and Dean of the Faculty of Performing Arts, Banaras Hindu University.
Mr. Arnold's work on the logic of the grama-murcchana system and its 'applications' to current Indian music is a most stimulating and original piece of investigation. Mr. Arnold's research and he and his partner (Mr. Bel)'s work have immense implications for music theory and great value for theoretical study of Indian music. — Prof. Bonnie C. WADE, Associate Professor of Music, University of California
Looking forward into the future, it (the Shruti harmonium) opens up a new field to composers who wish to escape from the traditional framework in which they are trapped, by virtue of the multiplicity of its possibilities for various scales, giving hence a new material. — Prof. Ginette KELLER, Grand Prize of Rome, Professor of Musical Analysis and Musical Aesthetics, ENMP and CNSM, Paris.
I was astonished to listen to the "shrutis" (microtones) produced by this harmonium which they played according to my suggestion, and I found the 'gandhars', 'dhaivats', 'rikhabs' and 'nikhads' (3rds, 6ths, 2nds and 7ths) of ragas Darbari Kanada, Todi, Ramkali and Shankara to be very correctly produced exactly as they could be produced on my violin. — Prof. V.G. JOG, Violinist, recipient of the Sangeet Natak Akademi Award.
Once again, bravo for your work. When you have a precise idea about the cost of your analyzer, please let me know. I shall be able to propose it to research institutions in Asian countries, and our own research institution, provided that it can afford it, might also acquire such an analyzer for our own work. — Dr. Tran Van KHE, Director of Research, CNRS, Paris.
The equipment which Mr. E.J. Arnold and B. Bel propose to construct in the second stage of the research which they have explained to me seems to be of very great interest for the elucidation of the problems concerning scales, and intonation, as much from the point of view of their artistic and musicological use, as from the theory of acoustics. — Iannis XENAKIS, Composer, Paris.
Le Natyashastra, un traité sanscrit sur la musique, la danse et le théatre, contient une théorie des échelles musicales qui sert de base à la classification de formes mélodiques. De nombreux auteurs indiens et occidentaux ont proposé des interprétations de cette théorie, et plus récemment des travaux ont été menés pour valider ces interprétations à partir de données acoustiques tirées de la pratique musicale en Inde. Cet article énonce les raisons pour lesquelles une telle validation n'est pas possible, et propose une interprétation générale de la théorie s'appuyant sur la résolution de systèmes d'équations linéaires. Les systèmes déduits des prémisses ont un degré d'indétermination. Les ensembles solutions correspondent à diverses hypothèses permettant de lever l'indétermination, tenant compte de considérations acoustiques correspondant à diverses conceptions musicales: tempérament, intonation juste, etc.
Excerpts of an AI review of this paper (Academia, June 2025)
Summary
This paper offers a detailed mathematical exploration of the scale theory described in Bharata’s Natyashastra, focusing particularly on the concept of 22 shrutis (microintervals) that constitute various Indian musical scales. It encompasses historical context, theoretical derivations of interval sizes, and potential tuning configurations. The author combines textual evidence from ancient Sanskrit sources (especially the first six chapters of the Natyashastra) with algebraic methods to propose both tempered and just-intonation systems consistent with Bharata’s framework. Experimental references — such as monochord experiments, work with an electronic Shruti Harmonium, and Melodic Movement Analyser (MMA) analyses — are included to connect theoretical possibilities with practical musical performance.
Organization & Clarity
Historical Introduction and Context
The paper begins by situating Bharata’s Natyashastra within the continuum of Indian music theory, referencing key figures and experiments from both Indian and Western traditions.
This historical background sets the stage for the discussion, although in places it could be streamlined to highlight the central premise of the mathematical framework.
Algebraic Formulation
The author systematically translates Bharata’s textual statements into sets of algebraic equations.
The transition from textual assertions (e.g., “SP2 = 13 shruti-s”) to equations in cents is presented step by step, aiding clarity.
Figures and Tables
The paper frequently references figures (e.g., “fig 1”, “fig 2”, etc.) and tables of coefficients resulting from these equations.
These graphical or tabular representations appear to play a critical role in helping readers visualize relationships but would benefit from clearer references and labeling to make them more accessible.
Overall, the content is laid out in a sequential manner, moving from ancient theory to algebraic method, then to specific tuning systems, and finally to possible applications.
Technical & Theoretical Contributions
Translating Ancient Theories into Modern Frameworks
The paper bridges traditional Indian music theory with modern mathematical notation, a valuable approach that can expand understanding for researchers from varying backgrounds.
The distinction made between “topological” relationships (i.e., how intervals add up) and actual frequency ratios is crucial, and the paper addresses potential pitfalls in presuming a single “correct” interpretation.
Multiple Tuning Scenarios
The author explores a range of tuning procedures (e.g., harmonic major third vs. Pythagorean major third) and compares their outcomes.
The paper shows how variations in the pramana shruti (the “one-shruti” unit) can produce markedly different yet theoretically valid scales.
Focus on Consonance and System Consistency
By imposing constraints of murcchana (shifting tonics), the paper demonstrates how the 22 microtones can remain internally consistent.
The derivation of tempered and just-intonation variants helps illustrate how “ancient” theory can align with current theoretical concepts such as commas, semitones, and limmas.
Methodological Rigor
Logical Steps of Equation Building
The paper methodically shows how each note relationship leads to an equation or inequality. This approach is clear, though some dense sections (especially when listing large sets of equations) may challenge readers less accustomed to mathematical proofs.
Scope and Assumptions
The paper acknowledges an important assumption: that ancient textual descriptions can be faithfully transposed into algebraic relationships. This is necessary but might benefit from more explicit caveats about interpretational breadth in historical musicology (e.g., variations in textual transmission, potential scribal changes, etc.).
Use of Empirical Data
Empirical references to tuning experiments (e.g., on the Shruti Harmonium) complement the theoretical work. Future expansions could include more detail on the data collection and statistical analysis, if applicable.
Strengths
Clearly grounded in both historical textual sources and modern mathematical treatments.
Provides multiple pathways (tempered vs. just) and highlights how each maintains internal consistency per Bharata’s intervals.
Shows versatility in microtonal arithmetic, illustrating that multiple valid interpretations exist instead of a single, fixed approach.
Overall, this paper illuminates the complexity and depth of Bharata’s scale theory by marrying philological analysis with algebraic precision. The discussion of how these ancient concepts can produce wide-ranging, internally consistent tuning systems contributes substantially to ethnomusicology, Indian music scholarship, and broader microtonal research.
The first section of this paper considers the mathematical and musical principles by which the shruti positions (note positions in the system of "just intonation") are determined. A system of shorthand tuning symbols is given by which the tuning procedures for each of the shruti positions is concisely expressed. Using these symbols to summarize the appropriate tuning procedures, the positions of the shrutis are given in tables of families.
Then follows a description of a simple mathematical model of the shruti-swara-grama-murchana system of Bharata, Dattila, and Sharangadeva. A study of the harmonic structure of the gramas (fundamental scales) reveals that the principle scale-types employed in Hindustani classical music form a 'main-sequence' of scales directly relatable to the harmonic structure of the ancient gramas. This is summarized in a table of the 'extended murchana series' of scales derivable from the Ma and Sa gramas.
Excerpts of an AI review of this paper (Academia, June 2025)
This paper presents a rigorous mathematical framework for understanding one of the most complex and foundational concepts in Indian classical music theory: the ancient system of shrutis (microtonal intervals) and their relationship to scales (gramas) and melodic types (jatis). Arnold's work bridges the gap between abstract musicological theory and practical application through innovative mathematical modeling and visual representation.
Theoretical Foundation and Methodology
Arnold begins by addressing a fundamental challenge in Indian music theory: the precise determination of shruti positions within the octave. The traditional system recognizes 22 shrutis as the basic building blocks of melody, but their exact tuning has remained contentious among scholars and practitioners. The author develops an elegant shorthand notation system that concisely expresses tuning procedures for each shruti position, making complex intervallic relationships accessible through symbolic representation.
The paper's mathematical approach is grounded in just intonation principles, using frequency ratios derived from the harmonic series. Arnold systematically works through the mathematical relationships that define each shruti, presenting detailed tables that show the frequency ratios, periods, and harmonic relationships for different families of shruti positions. This methodical approach provides unprecedented clarity to what has historically been a murky area of music theory.
The Physical Model
One of the paper's most innovative contributions is the description of a physical model consisting of two rotating wheels: a fixed outer wheel representing shruti divisions and a movable inner wheel representing grama scales. This tangible device allows musicians and theorists to visualize the complex relationships between different scale types and their harmonic implications. The model serves as both an analytical tool and a practical calculator for determining intervallic relationships between any two shruti positions.
The wheel design reflects deep understanding of the cyclical nature of musical intervals and demonstrates how ancient Indian theorists like Bharata, Dattila, and Sharangadeva conceptualized harmonic relationships. By making these abstract concepts physically manipulable, Arnold provides an invaluable pedagogical tool for understanding classical Indian music theory.
Historical Integration and Validation
Arnold validates his mathematical model against the writings of ancient theorists, particularly focusing on the grama-murchana system described in classical treatises. The paper demonstrates how the principle scale-types used in contemporary Hindustani classical music can be traced back to these ancient harmonic structures, forming what Arnold terms a "main-sequence" of scales directly related to the fundamental gramas.
This historical grounding lends credibility to the mathematical framework while simultaneously providing new insights into the evolution of Indian musical practice. The paper shows how modern ragas maintain harmonic relationships with their ancient predecessors, despite centuries of stylistic development.
Practical Applications and Limitations
The model's practical utility extends beyond theoretical analysis to performance applications. Arnold suggests the system can help determine interval relationships, study melodic movement in ragas, and understand harmonic consonance patterns. However, the paper acknowledges important limitations, particularly noting that actual performance practice in Indian classical music involves constant microtonal adjustments rather than fixed frequency relationships.
This recognition of the difference between theoretical models and living musical practice demonstrates Arnold's nuanced understanding of Indian music. The author appropriately positions the mathematical framework as a tool for understanding structural principles rather than a prescription for performance practice.
Significance and Impact
Arnold's work represents a significant contribution to ethnomusicology and music theory, providing the first comprehensive mathematical model of the ancient Indian tonal system. The paper successfully demonstrates that rigorous analytical methods can illuminate traditional music systems without diminishing their cultural authenticity or practical flexibility.
The integration of historical scholarship, mathematical analysis, and practical application makes this work valuable for multiple audiences: music theorists seeking analytical frameworks, performers wanting deeper understanding of raga structure, and scholars of Indian culture exploring the mathematical sophistication of classical treatises.
While the paper's technical nature may limit its accessibility to general readers, its methodological innovations and theoretical insights establish it as essential reading for anyone seriously engaged with Indian classical music theory or comparative musicology.
On electronic instruments such as the Bol Processor, microtonality is the matter of "microtonal tuning", here meaning the construction of musical scales outside the conventional one(s) …
Symbolic-numerical approaches lead to efficient and elegant solutions of constraint satisfaction problems with respect to symbolic and physical durations, …
The complete set of preludes and fugues by J.S. Bach known as The Well-tempered Clavier, books II and II, interpreted with presumably "optimal" tuning schemes …
Bol Processor grammars are characterisations of sequential events in terms of substring repetitions, homomorphisms, etc. Parsing techniques, stochastic production and recent developments of BP grammars are briefly described …
A linguistic model of tabla improvisation and evaluation derived from pattern languages and formal grammars has been implemented in the Bol Processor, a software system used in interactive fieldwork with expert musicians …
This paper deals with the scheduling of “sound-objects”, hereby meaning predefined sequences of elementary tasks in a sound processor, with each task mapped to a time-point …
Bernard Bel Knowledge acquisition and representation in music Thèse de doctorat en sciences. Université de droit, d'économie et des sciences …