Package Exports
- @tonaljs/pitch-distance
- @tonaljs/pitch-distance/dist/index.js
- @tonaljs/pitch-distance/dist/index.mjs
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@tonaljs/pitch-distance) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@tonaljs/pitch-distance

Pitch distance and transposition
Usage
⚠️ It's probably you don't need to use this package directly. Use tonal-note.
import { transpose, distance } from "@tonaljs/pitch-distance";
transpose("C4", "5P"); // => "G4"
distance("C4", "G4"); // => "5P"API
transpose(note: string, interval: string) => string
Transpose a note by an interval. It returns the note name or "" if not valid parameters.
Examples:
transpose("d3", "3M"); // => "F#3"
transpose("D", "3M"); // => "F#"
["C", "D", "E", "F", "G"].map((pc) => transpose(pc, "M3"));
// => ["E", "F#", "G#", "A", "B"]This function always returns a string:
transpose("one", "two"); // => ""distance(from: string, to: string) => string
Find the distance between two notes. It returns the interval name, or "" if not valid parameters.
Examples:
distance("C3", "E4"); // => "10M"If one of the note is a pitch class, the interval will be simple:
distance("C", "E"); // => "3M"
distance("C", "E4"); // => "3M"
distance("C4", "E"); // => "3M"This function always returns a string:
distance("today", "tomorrow"); // => ""Want more?
Take a look to @tonaljs/note or @tonaljs/interval modules.
FAQ
How do I get the note frequency and midi number?
note("C4").octave; // => 4
note("C4").midi; // => 60How do I know if a note name is valid?
note("C4").empty; // => false
note("x").empty; // => true
note("x").name; // => ""
note("x").octave; // => undefined
// remove all invalid note names
[...].map(note).filter(n => !n.empty).map(n => n.name)How do I know if two notes are enharmonics?
You can test the midi numbers:
note("Cb4").midi === note("B3").midi;Or better yet, use the height property that is also present on pitch classes (in notes without octaves midi property is null):
note("Cb").height === note("B").height;How do I change the octave of a note?
note("Cb4").pc + 5; // => "Cb5"