mtof
Convert between MIDI notes and frequencies.
Description
Convert a MIDI note number to frequency, reported as a float in Hertz (Hz), with support for the Scala file format for musical tunings.
Arguments
scalename [symbol]
Defining a symbol argument for the mtof object will cause mtof to calculate the MIDI to frequency conversion based on a given scale from the scala archive. The scale name should be the filename from the scala archive, but without the file extension. For example, if the scale in the scala archive is listed as
, you can give mtof the argument .Inlets
midivalue [number]
A MIDI note number value (or list of values) from 0 to 127. The corresponding frequency is sent out the outlet. The output is dependent on the base frequency attribute and an optional scale if given. The input can be a float (or list of floats), where the integer part of the decimal number is a MIDI note and the fractional part is a number of cents. For example, '60.25' would be the MIDI note 60 plus 25 cents.
tuning [number]
A float in the right inlet sets the "base frequency" used for the reference note when calculating frequency values (e.g., the reference note A4 = 440 Hz). The default base frequency is 440 Hz.
Fixed Attributes
These attributes must be set in the object box and determine the behavior of the object at runtime.
filter [number] (default: 1)
Filter unmapped values
scalename [symbol]
Defining a symbol argument for the mtof object will cause mtof to calculate the MIDI to frequency conversion based on a given scale from the scala archive. The scale name should be the filename from the scala archive, but without the file extension. For example, if the scale in the scala archive is listed as
, you can give mtof the argument .Dynamic Attributes
These attributes can be modified in the code during execution using the set object
base [number] (default: 440)
Sets the "base frequency" used for the reference note when calculating frequency values (e.g., the reference note A4 = 440 Hz). The default base frequency is 440 Hz.
map [list]
Setting the
attribute with a properly formatted list will set a keyboard mapping for mtof which describes how a scale of arbitrary number of steps maps onto the piano keyboard.RNBO's keyboard mapping format is the exact same as scala's except there are no comments, and the maps are flattened into a list instead of having an entry per line.
We use -1 instead of 'x' to indicate unmapped entries. If the unmapped keys at the end you can also simply leave them off.
Visit the official scala website for more information on the KBM format.
In a KBM format, a mapping is described as follows:
! Template for a keyboard mapping
!
! Size of map. The pattern repeats every so many keys:
12
! First MIDI note number to retune:
0
! Last MIDI note number to retune:
127
! Middle note where the first entry of the mapping is mapped to:
60
! Reference note for which frequency is given:
69
! Frequency to tune the above note to (floating point e.g. 440.0):
440.0
! Scale degree to consider as formal octave (determines difference in pitch
! between adjacent mapping patterns):
12
! Mapping.
! The numbers represent scale degrees mapped to keys. The first entry is for
! the given middle note, the next for subsequent higher keys.
! For an unmapped key, put in an "x". At the end, unmapped keys may be left out.
0
1
2
3
4
5
6
7
8
9
10
11
In RNBO, we'd define this same mapping as:
In the following map for the pelog_me3 scale, the pattern repeats every 12 keys of the piano keyboard. MIDI notes between 0 and 127 will be tuned. The first entry of the mapping will be MIDI note 60, the reference note for the scale's tuning is MIDI note 62, which is tuned to 286 Hz.
The scale's "formal octave" is 7, meaning there are 7 notes described in this scale.
Those 7 notes are mapped onto the "white keys" of the piano keyboard. All other keys are skipped, indicated with the
.
You can send a "0" for map to reset the map back to its default: linear 440.
mid [number] (default: 60)
Sets the "middle note" where the first scale degree is mapped. This means that a keyboard mapping set using the
attribute would start on this note. By default, this is set to MIDI note 60.midivalue [number]
A MIDI note number value (or list of values) from 0 to 127. The corresponding frequency is sent out the outlet. The output is dependent on the base frequency attribute and an optional scale if given. The input can be a float (or list of floats), where the integer part of the decimal number is a MIDI note and the fractional part is a number of cents. For example, '60.25' would be the MIDI note 60 plus 25 cents.
ref [number] (default: 69)
Sets the reference note which is to be tuned to the "base frequency." By default, this is MIDI note 69.
scale [list]
Setting the
attribute with a properly formatted list will cause mtof to calculate the MIDI to frequency conversion based on a scale specified by that list. To convert a scala formatted file into a list for RNBO, we ignore any comment lines (prefixed with !) and we skip the descriptive text line. We include the length value, then, we put a zero after each cents value (values with a period in them) and split any ratios (implicit or explicit) into 2 values, finally we collapse the whole thing into a list.For instance:
The cents value of
would instead be noted as as . The ratio would become . (with no period) is actually an implied ratio of and would thus become .The following scala file for the pelog_me3 scale
! pelog_me3.scl
!
Gamelan Kyahi Pangasih (kraton Solo). 1/1=286 Hz
7
!
128.298
276.357
545.806
669.366
784.692
967.096
2/1
becomes
The leading
indicates that there are 7 notes in the scale, indicates 128.298 cents, and indicates a ratio of 2/1 (octave).tuning [number]
A float in the right inlet sets the "base frequency" used for the reference note when calculating frequency values (e.g., the reference note A4 = 440 Hz). The default base frequency is 440 Hz.
See Also
Name | Description |
---|---|
mtof~ | Convert between MIDI notes and frequencies. |
mtof | |
ftom | Convert between frequencies and MIDI notes. |
ftom~ | Convert between frequencies and MIDI notes. |
scala.list | Store and output scala scale lists. |
scala.scl | Scala SCL parser |
scala.kbm | Scala KBM parser |
expr |