MicroTone

Micro Tone Tuning with MIDI Pitch Bend

Overview:

MicroTone gives you the ability to create arbitrary microtonal tunings that can be used with virtually any synthesizer or sound card. Only minimal support of the MIDI Pitch Bend specification is required of the hardware. If you can set the Pitch Bend range to +/- 1 semitone (just about any synth or card can do this), then you can work with microtonal music.

The program does not generate music, rather it generates a set of tables that will translate MIDI notes of an arbitrary tuning table (such as Just Intonation) into MIDI Notes and Pitch Bend values that will give the correct pitch for each scale step.

It is very easy to create tuning tables by typing in the steps as ratios or cents values; by cutting and pasting the values into the input window, or by compiling a list of scales from the 3000+ set of free Scala tuning tables. Once a MicroTone table is created, it is available as a binary file that can be read by a MIDI composing program; and the fully descriptive tuning table can be saved as a text file.

Although MicroTone produces MIDI data that is not specific to any particular hardware or software, it was created primarily for use by ArtWonk and MusicWonk, with the binary tables it produces in the standard Tuning Table format used by the MidiTone module. This module is similar to the standard MIDI Voice module, with the extra complexity of combining the MIDI Pitch Bend and Note messages automatically handled, so you only need to select the tuning table you want to use, then send the MIDI note values just as you would with MIDI Voice modules.

Creating a Tuning Table:

MicroTone creates tuning tables from three types of input: a single number to produce equal tuning tables of any size, tuning ratios, and cents values. The easiest way to get started is to just type a number into the top, input window and then click on the long button labeled "Create Tuning Table." To illustrate, create a standard 12-tone chromatic scale by typing 12 in the input window. Then click on the Create Tuning Table button. The large output window will show:

12-Tone

Step Cents Note PBend  Ratio
00      0   0   0      1:1      unison
01    100   1   0  1.059:1      equal minor second
02    200   2   0  1.122:1      equal major second
03    300   3   0  1.189:1      equal minor third
04    400   4   0   1.26:1      equal major third
05    500   5   0  1.335:1      equal forth
06    600   6   0  1.414:1      equal tritone
07    700   7   0  1.498:1      equal fifth
08    800   8   0  1.587:1      equal minor sixth
09    900   9   0  1.682:1      equal major sixth
10   1000  10   0  1.782:1      equal minor seventh
11   1100  11   0  1.888:1      equal major seventh

So far, this is exactly what you get with every MIDI keyboard, so there is not much point to it except as a reference. Try creating a Just Intonation scale. Click on the "Clear In" button just under the top input window to clear the input. Then cut & paste the following ratio values to the input window:

1/1 16/15 9/8 6/5 5/4 4/3 45/32 3/2 8/5 5/3 9/5 15/8 

...Now click on the Create Tuning Table button and you get:

12 <unnamed>

Step Cents Note PBend  Ratio
00      0   0   0      1:1      unison
01    113   1   8     16:15     minor diatonic semitone
02    205   2   3      9:8      major whole tone
03    316   3  10      6:5      minor third
04    386   3  55      5:4      major third
05    498   4  63      4:3      perfect fourth
06    591   5  58     45:32     tritone
07    702   7   1      3:2      perfect fifth
08    814   8   9      8:5      minor sixth
09    884   8  54      5:3      major sixth
10   1017  10  11      9:5      just minor seventh
11   1088  10  56     15:8      classic major seventh

What It Means:

The title of the table always starts with a number, which is the number of steps to the scale. Although scales that span more than an octave are possible, the basic assumption is that each table starts on an octave, the 1:1 or unison note. This ultimately can be any value you like, but logically it is always scale step 0, the place to start. Generally, your scales should not end on the octave above the root, 2/1 or 1200 cents, as this will cause the scale steps to be increased by 1.

The Cents column, above, shows the scale values in Cents or 1/100th of a semitone. The next two columns, labeled "Note" and "PBend" are the MIDI Note and Pitch Bend values that will give the proper pitch for the scale step. the Ratio column shows the scale step as a ratio. When the step resolves to a small whole number ratio, it is given as such, and the traditional interval name is listed; when the ratios are fractional they are listed as a ratio to 1, such as 1.059:1. Except for the standard 12 equal tone scale, no interval names are printed with fractional ratios.

What the Buttons Do:

Clear In: Clears the top input window and also the small Name input box.
Clear Out: Clears the output window of all text.
Clear All: Like clicking on both the Clear In and Clear Out.
Show Ratio checkbox: Check (default) to show ratio information of a scale
Root Implied: Creates an implied 0 (root) scale step if none is in the data.
Create Tuning Table: Like it says.
Save Table: Saves the tuning table data to a .pbt file.
Edit Table: Pops up the table editor (see below).
Use Current Slot: Overwrite the current slot when making a tune table.
Get Scale: Gets the scale from the table data and puts it in the windows.
Name input box: Type the name of the table here before creating the scale.
S button: Sets current slot to the name in the Name box.
Current Slot drop down menu: Select the current slot to get/create a table.
E button: Edit the current slot - Like Get Scale, but puts ratios into the input window.
Save Text: Saves the contents of the output window into a .txt file.
Compile Scala: Compiles a list of Scala scale files (see below).

The Clear buttons simply clears the window areas. They do no processing, and they cause no data other than what is being shown in the windows to be erased.

Use the Root Implied checkbox when you are creating a tuning table from data that has no (or an implied) root of 1/1 or 0 cents. Most commonly this applies to Scala scale data.

MIDI and Microtonal Scales:

While the MIDI standard does not recognize microtuning - it assumes only 12-tone equal tuning - there are two work around ways to achieve microtonal tuning on MIDI instruments. One is through use of System Exclusive tuning tables that are internal to the synthesizer, and the other is to send MIDI Pitch Bend information with each note. There are advantages and disadvantages to each method.

The advantage of internal tables is you only have to send the System Exclusive table information, then you send notes normally. The main disadvantage of System Exclusive tuning tables is that each manufacturer uses a different format, and different synths have different tuning table capabilities, and many synths do not support tuning tables at all. This makes things especially difficult if you are using synths from different manufacturers.

The main disadvantage to using Pitch Bend is each simultaneous note, such as notes in a chord, must be assigned its own MIDI channel. Also, as there is more MIDI data being sent out there can be MIDI clogging issues with slower hardware. However almost all synths support Pitch Bend as well as some limited ability to set the Pitch Bend range; and once set all synths respond identically, so there is no problem in using different synths on the same piece.

Using Pitch Bend for Microtonal Scales:

While one MIDI channel will usually support several simultaneous notes, there is only one Pitch Bend parameter per MIDI channel, and almost always only one Pitch Bend Range setting per synthesizer. Thus, the Pitch Bend Range must be set for each synth, and then each channel must be dedicated to a single music line. If you want chords you must set up individual channels for each note of the chord.

If you are using ArtWonk or MusicWonk for your microtonal compositions you only need to use the MidiTone module instead of the MIDI Voice module for your final MIDI Note sends. All the details are handled in the background automatically. For those who are interested, here are the details:

There are two steps to the process. One is setting up the proper Pitch Bend Range, and the other is sending the Pitch Bend data with each MIDI note.

MicroTone uses a Pitch Bend Range of +/- 1 Pitch Bend step per semitone. This range gives 64 steps per semitone, which is 1.5625 cents per PB step. This is a little more than a desirable 1 cent per step; it was chosen as a compromise to accommodate the widest range of synths (and it works well enough - see the Benchmarks for proof). The default Pitch Bend range for most synths is +/- 2 half steps per PB step, which is too course to give accurate results. So the first step is to set the proper Pitch Bend Range. This is done automatically in a standardized way through MIDI Registered Parameter Control messages.

Once the range is properly set up, then the module simply needs to send a Pitch Bend message prior to each Note message - as provided in the Note and PBend columns of the print out, or (in binary form) in the Tables file.

Tables Files:

Although the text output window gives you instant and detailed feedback about the scale you have created, the real value of MicroTone is in the tables files it builds.

These table files are in the Algorithmic Arts .pbt Pitch Bend Tuning Table format of 128 binary byte sequences, each with a text name label of up to 20 characters. Our software reads the files and processes the data automatically, and you are quite safe ignoring the details. However for those who want to know the details, here they are:

For each of the 128 tables: Steps 0-62 are the MIDI Key value for each of the up to 63 scale steps starting from 0; Step 63 is reserved and should not be changed; Steps 64-126 are the Pitch Bend value for each scale step (but 64 must be added to make the signed 128-bit MIDI Pitch Bend value positive); and Step 127 is the number of the highest scale step used (scale steps -1).

Editing Table Files:

Click on the Edit Table button to pop up the Table Editor. It will show a list of all scale tables that have been created. Clicking once on one of the 128 slots makes it current; double clicking on a slot makes it current and dismisses the Table Editor, putting you back into the main part of the program.

Use the Load and Save buttons to load a .pbt file or save the current table into a named .pbt file. Algorithmic Arts programs all use a defult .pbt file named "default.pbt" in their program directories, which they will load by default; and they will all load a named .pbt file automatically when it is in the same directory and has the same name as the patch file being loaded.

You can edit the table - move items around, or delete them - with the buttons on the bottom left of the Editor. For multiple selections, click and drag or use Click-Shift and Click-Control combinations in the usual Windows manner. Copy, Cut, and Paste works as expected, except that Cut leaves the cut area erased but not closed up. This is to prevent items from moving up in the list and thus changing their index in programs that are indexing into the table.

Open and Close open and close a gap, respectively. Works with single or multiple selection as described above. Any slots that are pushed beyond the end of the table are lost (but you can undo)

Undo is a single step swap with the last action. This means you can undo your last action, and you can undo the undo, but you can not do multiple undos.

Scala Tuning Software and Scale Files:

Scala is a powerful software tool for experimentation with musical tunings, such as just intonation scales, equal and historical temperaments, microtonal and macrotonal scales, and non-Western scales. It supports scale creation, editing, comparison, analysis, storage, tuning of electronic instruments, and MIDI file generation and tuning conversion. Scala is a free program that works on multiple platforms. For more about Scala resources see:

Huygens Fokker - Scala

In addition to providing a very powerful program, the Huygens Scala site also provides a comprehensive collection of over 3000 scales.

Using Scala Scale Files:

You can think of a Scala scale file as two parts - a one line description in the contents.txt file, and the scale file itself, scalename.scl. The one line description looks like this:

OLYMPOS.SCL 5 Scale of ancient Greek flutist Olympos, 6th century BC as reported by Partch

..with the file name first, followed by the number of steps in the scale, and then a brief description of what the scale is.

The scale file itself contains the same information, plus the actual scale values. It looks like this:

! Olympos.scl
!
Scale of ancient Greek flutist Olympos, 6th century BC as reported by Partch
 5
!
 16/15
 4/3
 64/45
 16/9
 2/1

There are two ways you can use Scala scale files with MicroTone. One is to copy and paste the information into the top input window and then click on the Create Tuning Table button. The other is to make a text file that contains lines from the description file, and then click on the Compile Scala button to compile all the files you have description lines on at once.

To create a scale from a single Scala file, you can either copy just the scale values or you can copy the entire file. If you copy the entire file, MicroTone will recognize it as a Scala file (by the ! as the first character of the file.), and it will properly process the file. If you copy just the scale data, you must also set the "Root implied" checkbox (Scala scale files do not include the root), and you must avoid including the last 2/1 or 1200 cents part of the scale. The easiest thing to do, of course, is use Ctrl-A to select the entire text of the file, and just copy the whole thing into the input window, and click on the Create button.

To compile some number of Scala files all at once, first copy the documentation lines from either the files themselves or from the contents.txt file into a new text file. There is no point in trying compile more then 128 files at a time because the MicroTone table can only hold 128 scales. Save the text file you created in the same directory that has the Scala files. This is essential because MicroTone will only look in the same directory as the source text file for the .scl files. Set the current scale number to the slot you want to start with (with the Current Slot drop down menu), and click on the Compile Scala button. You should see a read out of the files it processed, the number of errors, and an error message by each file it failed to process.

The Scala file compiler doesn't really need the entire documentation line to know what file to process - it only needs the filename at the start of the line. So if you prefer, you can just give it a list of .scl files, one per line, and it will process those just as well. Also, if you want to "comment out" some of the files in your list, just put some non filename character, such as "#" at the start of the line. You will get an error message for each file skipped, but it will properly skip the commented files and process the others.

Benchmarks:

The tables below show 4 different scales that were processed with MicroTone, and then played back with the MidiTone module. We used a CreativeLabs SoundBlaster Live! audio card set to "MIDI Synth A" and we measured the resultant frequencies with the highly recommended G-tune high-performance musical instrument tuner and frequency measurement utility. This is a shareware program, with a 30 day free trial period. You can download G-tune, to conduct your own benchmarks, at the JHC website:

http://www.jhc-software.com/

In the tables below, the column labeled Step is the scale step; Key is the actual MIDI key sent. Freq(ency) Cents and Ratio are all calculated values, what the scale is supposed to be.

Note is the MIDI Note message value that actually gets sent to the sound card, and PBend is the Pitch Bend message that gets sent just prior to the Note. The actual Pitch Bend value sent is offset by 64 to make the signed 128-bit MIDI Pitch Bend value positive. The PB c column is the Cents value that is back calculated from the Note and PBend that are sent to the synth. This shows mathematical accuracy of the PitchBend resolution, which is 1.5625 cents per PB step.

Finally, PB Freq shows the actual, measured frequency of each step. Compare this with the calculated frequency to see how accurate the real world output is. Note that in the first table "Equal" there is always 0 Pitch Bend - this table is the normal MIDI 12-tone equal tempered scale, unaffected by Pitch Bend. It is included as a standard to show the normal variance of playback frequency from calculated frequency in the sound card we used for the benchmarks.

Equal

Step Key  Freq    PB Freq   Cents  PB c Note PBend  Ratio     Interval
00  69  440.0 hz  440.2 hz    0.0     0   0   0       1:1     unison
01  70  466.2 hz  466.4 hz  100.0   100   1   0   1.059:1     equal minor second
02  71  493.9 hz  494.1 hz  200.0   200   2   0   1.122:1     equal major second
03  72  523.3 hz  523.6 hz  300.0   300   3   0   1.189:1     equal minor third
04  73  554.4 hz  554.7 hz  400.0   400   4   0    1.26:1     equal major third
05  74  587.3 hz  587.8 hz  500.0   500   5   0   1.335:1     equal forth
06  75  622.3 hz  622.7 hz  600.0   600   6   0   1.414:1     equal tritone
07  76  659.3 hz  659.7 hz  700.0   700   7   0   1.498:1     equal fifth
08  77  698.5 hz  698.9 hz  800.0   800   8   0   1.587:1     equal minor sixth
09  78  740.0 hz  740.5 hz  900.0   900   9   0   1.682:1     equal major sixth
10  79  784.0 hz  784.5 hz 1000.0  1000  10   0   1.782:1     equal minor seventh
11  80  830.6 hz  831.3 hz 1100.0  1100  11   0   1.888:1     equal major seventh


Just

Step Key  Freq    PB Freq   Cents  PB c Note PBend  Ratio     Interval
00  69  440.0 hz  440.2 hz    0.0     0   0   0      1:1      unison
01  70  469.3 hz  469.8 hz  111.7   113   1   8     16:15     minor diatonic semitone
02  71  495.0 hz  495.4 hz  203.9   205   2   3      9:8      major whole tone
03  72  528.0 hz  528.3 hz  315.6   316   3  10      6:5      minor third
04  73  550.0 hz  550.2 hz  386.3   386   3  55      5:4      major third
05  74  586.7 hz  587.0 hz  498.0   498   4  63      4:3      perfect fourth
06  75  618.8 hz  619.2 hz  590.2   591   5  58     45:32     tritone
07  76  660.0 hz  660.2 hz  702.0   702   7   1      3:2      perfect fifth
08  77  704.0 hz  704.6 hz  813.7   814   8   9      8:5      minor sixth
09  78  733.3 hz  733.8 hz  884.4   884   8  54      5:3      major sixth
10  79  792.0 hz  792.2 hz 1018.0  1017  10  11      9:5      just minor seventh
11  80  825.0 hz  825.1 hz 1088.0  1088  10  56     15:8      classic major seventh


Pythagorean
Step Key  Freq    PB Freq   Cents  PB c Note PBend  Ratio     Interval
00  69  440.0 hz  440.2 hz    0.0     0   0   0      1:1      unison
01  70  469.9 hz  470.2 hz  113.7   114   1   9   2187:2048   apotome
02  71  495.0 hz  495.4 hz  203.9   205   2   3      9:8      major whole tone
03  72  528.6 hz  528.8 hz  317.6   317   3  11  19683:16384  Pythagorean augmented second
04  73  556.9 hz  557.1 hz  407.8   408   4   5     81:64     Pythagorean major third
05  74  586.7 hz  587.0 hz  498.0   498   4  63      4:3      perfect fourth
06  75  626.5 hz  627.1 hz  611.7   613   6   8    729:512    Pythagorean tritone
07  76  660.0 hz  660.2 hz  702.0   702   7   1      3:2      perfect fifth
08  77  704.8 hz  705.2 hz  815.6   816   8  10   6561:4096   Pythagorean augmented fifth
09  78  742.5 hz  743.1 hz  905.9   906   9   4     27:16     Pythagorean major sixth
10  79  792.9 hz  793.7 hz 1020.0  1020  10  13  59049:32768  Pythagorean augmented sixth
11  80  835.3 hz  835.6 hz 1110.0  1109  11   6    243:128    Pythagorean major seventh


19-Tone
Step Key  Freq    PB Freq   Cents  PB c Note PBend  Ratio    Ratio    Interval
00  69  440.0 hz  440.2 hz    0.0     0   0   0     1.0:1     1:1     unison
01  70  456.3 hz  456.4 hz   63.2    63   0  40   1.037:1    28:27    1/3-tone
02  71  473.3 hz  473.6 hz  126.3   127   1  17   1.076:1 1.076:1
03  72  490.9 hz  491.0 hz  189.5   189   1  57   1.116:1 1.115:1
04  73  509.1 hz  509.5 hz  252.6   253   2  34   1.157:1    81:70    Al-Hwarizmi's lute middle finger
05  74  528.0 hz  528.3 hz  315.8   316   3  10     1.2:1     6:5     minor third
06  75  547.7 hz  548.1 hz  378.9   380   3  51   1.245:1 1.245:1
07  76  568.0 hz  568.4 hz  442.1   442   4  27   1.291:1 1.291:1
08  77  589.1 hz  589.1 hz  505.3   505   5   3   1.339:1 1.338:1
09  78  611.0 hz  611.5 hz  568.4   569   5  44   1.389:1    25:18    classic augmented fourth
10  79  633.7 hz  633.9 hz  631.6   631   6  20    1.44:1    36:25    classic diminished fifth
11  80  657.3 hz  657.9 hz  694.7   695   6  61   1.494:1 1.494:1
12  81  681.7 hz  682.0 hz  757.9   758   7  37   1.549:1 1.549:1
13  82  707.0 hz  707.2 hz  821.1   820   8  13   1.607:1 1.606:1
14  83  733.3 hz  733.8 hz  884.2   884   8  54   1.667:1     5:3     major sixth
15  84  760.5 hz  760.7 hz  947.4   947   9  30   1.728:1   216:125   acute diminished seventh
16  85  788.8 hz  789.4 hz 1010.0  1011  10   7   1.793:1 1.793:1
17  86  818.1 hz  818.4 hz 1074.0  1073  10  47   1.859:1 1.859:1
18  87  848.5 hz  849.3 hz 1137.0  1138  11  24   1.928:1    27:14    septimal major seventh

Copyright © 2000-2010 by John Dunn and Algorithmic Arts. All Rights Reserved.