Skip to content

instrumentbible/tune.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

25 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

tune.js 🎡

JavaScript library for microtonal tuning systems.

Try the live demo.

Features

  • calculate cents based on various temperaments
  • calculate nth 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 nth harmonic of a given frequency

harmonic(frequency, partial)

get the 3rd 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: string Default: equal Available values: equal just pythagorean meantone werckmeisterI werckmeisterII werckmeisterIII

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: 440 Available values: integer or float

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.

GitHub Sponsors Patreon Square Venmo PayPal

Questions?

Please write to [email protected] or visit instrument.bible.

Discord Twitter YouTube Facebook LinkedIn Instagram