Tune.js
microtonal tuner built with Web Audio API 🎵
Install / Use
/learn @instrumentbible/Tune.jsREADME
JavaScript library for microtonal tuning systems.
Try the live demo.
Features
- calculate cents based on various temperaments
- calculate n<sup>th</sup> harmonic of a given frequency
- ftom (frequency to MIDI function)
- mtof (MIDI to frequency function)
- get note name for a given MIDI note
supported temperaments
Setup
import tune.js library
<script src="tune.js"></script>
now you can use the library to create a tuner
// create a tuner
myTuner = new Tuner();
// use custom options
var options = {
temperament: 'equal',
fundamental: 440
};
// create a new tuner
var myTuner = new Tuner(options);
Functions
temperament
set the current temperament
myTuner.setTemperament("meantone");
get the current temperament
myTuner.getTemperament();
// meantone
tune
calculate the cents given a specific frequency
myTuner.tune(448);
// -7.887184708183386
Other (static) functions
harmonic series
get n<sup>th</sup> harmonic of a given frequency
harmonic(frequency, partial)
get the 3<sup>rd</sup> harmonic of 440
Tuner.harmonic(440, 3);
// 1320
MIDI to frequency (mtof)
calculate the frequency given a specific MIDI note
Tuner.mtof(60);
// 261.6255653005986
frequency to MIDI (ftom)
calculate the MIDI note given a specific frequency
Tuner.ftom(440);
// 69
MIDI note to note name
get note name from MIDI note number
you can use a negative number to get the flat
Tuner.getNoteName(63);
// D#
// use negative number for flat
Tuner.getNoteName(-63);
// Eb
or use a second argument sharp or flat to get enharmonic note name
Tuner.getNoteName(63, 'sharp');
// D#
Tuner.getNoteName(63, 'flat');
// Eb
tune.js API
attributes
| attribute | type | options | default |
| :- | :-: | :-: | :-: |
| temperament | string | equal, just, pythagorean, meantone, werckmeister| equal |
| fundamental | number | any integer or float | 440 |
Options
temperament
Set the temperament for a given tuner.
Type:
stringDefault:equalAvailable values:equaljustpythagoreanmeantonewerckmeisterIwerckmeisterIIwerckmeisterIII
Examples
// create a new tuner with meantone temperament
var myTuner = new Tuner({
temperament: "meantone"
});
// set temperament to pythagorean
myTuner.setTemperament('pythagorean');
// get current temperament
myTuner.getTemperament();
// pythagorean
fundamental
Set the target frequency for a given tuner.
Type:
number
Default:440Available values:integerorfloat
Examples
// create a new tuner with fundamental 440
var myTuner = new Tuner({
fundamental: 440
});
// update fundamental to 442
myTuner.setFundamental(442);
// get current fundamental
myTuner.getFundamental();
// 442
Functions
tune()
Calculte cents
Examples
// create a new tuner
var myTuner = new Tuner({
temperament: 'meantone',
fundamental: 440
});
// calculate cents
myTuner.tune(439);
// -3.939100787161778
Contributing
Any contributions you make are greatly appreciated. Any bugs and change requests are to be reported on the issues tab. If you don't like coding, you can contribute by becoming a sponsor.
Questions?
Please write to contact@instrument.bible or visit instrument.bible.
