0.3.1 • Published 8 months ago

pitch-utils v0.3.1

Weekly downloads
-
License
GPL-3.0-only
Repository
github
Last release
8 months ago

pitch-utils

This (ESM) module provides a collection of functions for converting between pitch and frequency units.

Installation

npm install pitch-utils

Usage

import { hzToSemitones } from "pitch-utils";
hzToSemitones(880, 440); // +12

Conversion Overview

→ hz→ ratio→ semitones→ cents→ midi→ named→ note object
hz N/AhzToRatiohzToSemitoneshzToCentshzToMidihzToNoteNamehzToNoteObject
ratio ratioToHzN/AratioToSemitonesratioToCentsratioToMidiUnimplementedUnimplemented
semitones semitonesToHzsemitonesToRatioN/AsemitonesToCentssemitonesToMidiUnimplementedUnimplemented
cents centsToHzcentsToRatiocentsToSemitonesN/AcentsToMidiUnimplementedUnimplemented
midi midiToHzmidiToRatiomidiToSemitonesmidiToCentsN/AUnimplementedUnimplemented
named namedNoteToHznamedNoteToRationamedNoteToSemitonesnamedNoteToCentsnamedNoteToMidiN/AUnimplemented

Classes

Type Aliases

Cents

Ƭ Cents: number

A granular pitch offset unit, e.g. +100, -200, 0. Supports positive and negative numbers.

Defined in

src/index.ts:54


Hz

Ƭ Hz: number

A frequency unit reflecting the number of cycles per second, e.g. 440, 523.2511, or 1600 (1.6kHz). Supports positive numbers.

Defined in

src/index.ts:60


MIDINoteNumber

Ƭ MIDINoteNumber: number

Integer representation of pitch in 0, 127, e.g. 12 (C0), 69 (A4), 127 (G9).

Defined in

src/index.ts:70


NoteName

Ƭ NoteName: string

A note name with its octave, e.g. C4, A♯3, F♯5. Also accepts lowercase and keyboard-accessible accidentals like bb3 and b#3.

Defined in

src/index.ts:36


NoteObject

Ƭ NoteObject: Object

Object with note properties for flexible formatting.

Type declaration

NameType
detuneCents
hzHz
noteNoteName
octaveOctave

Defined in

src/index.ts:75


Octave

Ƭ Octave: number

Integer pitch grouping, e.g. -1, 4, 10.

Defined in

src/index.ts:65


Ratio

Ƭ Ratio: number

A frequency ratio, e.g. 1.5, 2, 0.5. Supports positive numbers.

Defined in

src/index.ts:42


RoundingMethod

Ƭ RoundingMethod: "nearest" | "up" | "down"

Rounding method for converting between frequency units.

Todo

maybe eventually this can include hz rounding in addition to pitch rounding

Defined in

src/index.ts:86


Semitones

Ƭ Semitones: number

A semitone pitch offset, e.g. +3, -5, 0. Supports positive and negative numbers.

Defined in

src/index.ts:48

Variables

A4

Const A4: 440

A4 frequency in Hz

Defined in

src/index.ts:95


blackNotesOnPiano

Const blackNotesOnPiano: string[]

Defined in

src/index.ts:136


chromaticScale

Const chromaticScale: string[]

Normalized note names in the chromatic scale, using sharps

Defined in

src/index.ts:99


enharmonicChromaticScale

Const enharmonicChromaticScale: string

Note names with alternate enharmonic names

Defined in

src/index.ts:116


whiteNotesOnPiano

Const whiteNotesOnPiano: string[]

Defined in

src/index.ts:133

Functions

centsToHz

centsToHz(cents, baseHz?): Hz

Example

centsToHz(1200) // 880

Parameters

NameTypeDefault value
centsnumberundefined
baseHznumberA4

Returns

Hz

Defined in

src/index.ts:285


centsToMidi

centsToMidi(cents): MIDINoteNumber

Example

centsToMidi(0) // 69
centsToMidi(1200) // 81

Parameters

NameType
centsnumber

Returns

MIDINoteNumber

Defined in

src/index.ts:295


centsToRatio

centsToRatio(cents): Ratio

Example

centsToRatio(1200) // 2

Parameters

NameType
centsnumber

Returns

Ratio

Defined in

src/index.ts:277


centsToSemitones

centsToSemitones(cents): Semitones

Example

centsToSemitones(100) // +1

Parameters

NameType
centsnumber

Returns

Semitones

Defined in

src/index.ts:269


cleanNoteName

cleanNoteName(dirtyNote): string

Replaces keyboard-accessible accidentals with their unicode equivalents and makes note name uppercase.

Example

cleanNoteName("C#4") // "C♯4"
cleanNoteName("bb4") // "B♭4"

Parameters

NameTypeDescription
dirtyNotestringdirty note name, with name, optional accidental, and octave

Returns

string

Defined in

src/index.ts:175


formatHz

formatHz(hz, precision?, alwaysIncludeSign?): string

Formats a number in Hz to a string with kilohertz support Assumes tabular numeral usage, and includes trailing zeros for alignment.

Example

formatHz(232.5) // "232.50Hz"
formatHz(2325) // "2.33kHz"
formatHz(2325, 2, true) // "+2.33kHz"

Parameters

NameTypeDefault valueDescription
hznumberundefined-
precisionnumber2-
alwaysIncludeSignbooleanfalsewhether to include (+) signs

Returns

string

Defined in

src/index.ts:194


getNoteIndexInOctave

getNoteIndexInOctave(note): number

Parameters

NameType
notestring

Returns

number

Defined in

src/index.ts:158


getRoundingFunction

getRoundingFunction(roundingMethod): (x: number) => number | (x: number) => number | (x: number) => number

Selects a Math.* rounding function based on RoundingMethod union type

Parameters

NameType
roundingMethodRoundingMethod

Returns

(x: number) => number | (x: number) => number | (x: number) => number

Defined in

src/index.ts:148


hzToCents

hzToCents(targetHz, baseHz?): Cents

Example

hzToCents(880, 440) // -1200

Parameters

NameTypeDefault value
targetHznumberundefined
baseHznumberA4

Returns

Cents

Defined in

src/index.ts:546


hzToMidi

hzToMidi(hz): MIDINoteNumber

Example

hzToMidi(440) // 69
hzToMidi(880) // 81

Parameters

NameType
hznumber

Returns

MIDINoteNumber

Defined in

src/index.ts:556


hzToNoteName

hzToNoteName(hz, roundingMethod?): string

Example

hzToNoteName(260) // C
hzToNoteName(260, Math.floor) // B
hzToNoteName(263) // C
hzToNoteName(263, Math.ceil) // C♯

Parameters

NameTypeDefault valueDescription
hznumberundefinedfrequency of note in hertz
roundingMethodRoundingMethod"nearest"whether to round up, down, or naturally

Returns

string

Defined in

src/index.ts:482


hzToNoteObject

hzToNoteObject(hz): NoteObject

Parameters

NameTypeDescription
hznumberfrequency of note in hertz

Returns

NoteObject

Defined in

src/index.ts:495


hzToRatio

hzToRatio(targetHz, baseHz?): Ratio

Example

hzToRatio(880) // 2
hzToRatio(440, 880) // 0.5

Parameters

NameTypeDefault valueDescription
targetHznumberundefinedtarget frequency in hertz
baseHznumberA4base frequency in hertz

Returns

Ratio

Defined in

src/index.ts:518


hzToSemitones

hzToSemitones(targetHz, baseHz?): Semitones

Example

hzToSemitones(880, 440) // -12

Parameters

NameTypeDefault valueDescription
targetHznumberundefinedtarget frequency in hertz
baseHznumberA4base frequency in hertz

Returns

Semitones

Defined in

src/index.ts:532


isNoteBlackOnPiano

isNoteBlackOnPiano(note): boolean

Example

isNoteBlackOnPiano("Cb4") // false
isNoteBlackOnPiano("A♯3") // true

Parameters

NameType
notestring

Returns

boolean

Defined in

src/index.ts:382


isNoteWhiteOnPiano

isNoteWhiteOnPiano(note): boolean

Example

isNoteWhiteOnPiano("C4") // true
isNoteWhiteOnPiano("A♯3") // false

Parameters

NameType
notestring

Returns

boolean

Defined in

src/index.ts:373


midiToCents

midiToCents(midi): Cents

Parameters

NameType
midinumber

Returns

Cents

Defined in

src/index.ts:455


midiToHz

midiToHz(midi): Hz

Parameters

NameType
midinumber

Returns

Hz

Defined in

src/index.ts:452


midiToNoteName

midiToNoteName(midi, roundingMethod?): string

Parameters

NameTypeDefault value
midinumberundefined
roundingMethodRoundingMethod"nearest"

Returns

string

Defined in

src/index.ts:461


midiToNoteObject

midiToNoteObject(midi): NoteObject

Parameters

NameType
midinumber

Returns

NoteObject

Defined in

src/index.ts:467


midiToRatio

midiToRatio(midi): Ratio

Parameters

NameType
midinumber

Returns

Ratio

Defined in

src/index.ts:458


midiToSemitones

midiToSemitones(midi): Semitones

Example

midiToSemitones(69) // 0

Parameters

NameType
midinumber

Returns

Semitones

Defined in

src/index.ts:449


namedNoteToCents

namedNoteToCents(note): Cents

Example

namedNoteToCents("C4") // -900

Parameters

NameTypeDescription
notestringnote name, e.g. C4, A♯3, F♯5

Returns

Cents

Defined in

src/index.ts:337


namedNoteToHz

namedNoteToHz(note): Hz

Example

namedNoteToHz("C4") // 261.6256
namedNoteToHz("A♯3") // 233.0819

Parameters

NameTypeDescription
notestringnote name, e.g. C4, A♯3, F♯5

Returns

Hz

Defined in

src/index.ts:350


namedNoteToMidi

namedNoteToMidi(note): MIDINoteNumber

Example

namedNoteToMidi("A4") // 69
namedNoteToMidi("C4") // 60

Parameters

NameType
notestring

Returns

MIDINoteNumber

Defined in

src/index.ts:363


namedNoteToRatio

namedNoteToRatio(note, baseNote?): Ratio

Example

namedNoteToRatio("A4") // 1
namedNoteToRatio("A♯3") // 0.5

Parameters

NameTypeDefault value
notestringundefined
baseNotestring"A4"

Returns

Ratio

Defined in

src/index.ts:326


namedNoteToSemitones

namedNoteToSemitones(note): Semitones

Example

namedNoteToSemitones("C4") // +3
namedNoteToSemitones("A♯3") // -11

Parameters

NameType
notestring

Returns

Semitones

Defined in

src/index.ts:308


quantizeHz

quantizeHz(hz, roundingMethod?): Hz

Example

quantizeHz(450) // 440
quantizeHz(450, "down") // 440
quantizeHz(450, "up") // ~466.17

Parameters

NameTypeDefault value
hznumberundefined
roundingMethodRoundingMethod"nearest"

Returns

Hz

Defined in

src/index.ts:567


ratioToCents

ratioToCents(ratio): Cents

Example

ratioToCents(2) // 1200
ratioToCents(3) // 1902

Parameters

NameTypeDescription
rationumberdecimal or fractional ratio

Returns

Cents

Defined in

src/index.ts:423


ratioToHz

ratioToHz(ratio, baseHz?): Hz

Example

ratioToHz(2) // 880
ratioToHz(3) // 1320

Parameters

NameTypeDefault valueDescription
rationumberundefineddecimal or fractional ratio
baseHznumberA4optional base note

Returns

Hz

Defined in

src/index.ts:407


ratioToMidi

ratioToMidi(ratio): MIDINoteNumber

Example

ratioToMidi(1) // 69
ratioToMidi(2) // 81

Parameters

NameType
rationumber

Returns

MIDINoteNumber

Defined in

src/index.ts:436


ratioToSemitones

ratioToSemitones(ratio): Semitones

Example

ratioToSemitones(2) // 12
ratioToSemitones(3) // ~19.02

Parameters

NameTypeDescription
rationumberdecimal or fractional ratio

Returns

Semitones

Defined in

src/index.ts:394


semitonesToCents

semitonesToCents(semitones): Cents

Example

semitonesToCents(-12) // -1200
semitonesToCents(0.5) // 50

Parameters

NameTypeDescription
semitonesnumbersemitone offset

Returns

Cents

Defined in

src/index.ts:232


semitonesToHz

semitonesToHz(semitones, baseHz?): Hz

Example

semitonesToHz(3) // 523.2511
semitonesToHz(-3, 523.2511) // 440

Parameters

NameTypeDefault valueDescription
semitonesnumberundefinedsemitone offset
baseHznumberA4optional base note

Returns

Hz

Defined in

src/index.ts:217


semitonesToMidi

semitonesToMidi(semitones): MIDINoteNumber

Example

semitonesToMidi(0) // 69
semitonesToMidi(12) // 81

Parameters

NameType
semitonesnumber

Returns

MIDINoteNumber

Defined in

src/index.ts:257


semitonesToRatio

semitonesToRatio(semitones): Ratio

Example

semitonesToRatio(12) // 2
semitonesToRatio(-12) // 0.5

Parameters

NameTypeDescription
semitonesnumbersemitone offset

Returns

Ratio

Defined in

src/index.ts:244

Classes

Pitch

Example

const note = new Pitch(440)
note.noteObject.note // "A4"
note.modRatio(3/1)
note.noteObject.note // "E6"

Constructors

constructor

new Pitch(frequency?)

Parameters
NameTypeDefault valueDescription
frequencynumberA4frequency of note in hertz
Defined in

src/index.ts:589

Properties

detune

detune: (cents: number) => Pitch

Type declaration

▸ (cents): Pitch

Parameters
NameType
centsnumber
Returns

Pitch

Defined in

src/index.ts:654


frequency

frequency: number = A4

frequency of note in hertz

Defined in

src/index.ts:591


hz

hz: number

base value for calculations

Defined in

src/index.ts:588


transpose

transpose: (semitones: number) => Pitch

Type declaration

▸ (semitones): Pitch

Parameters
NameType
semitonesnumber
Returns

Pitch

Defined in

src/index.ts:643

Accessors

cents

get cents(): number

Returns

number

Defined in

src/index.ts:610


closestNoteAbove

get closestNoteAbove(): NoteObject

Returns

NoteObject

Defined in

src/index.ts:628


closestNoteBelow

get closestNoteBelow(): NoteObject

Returns

NoteObject

Defined in

src/index.ts:623


midi

get midi(): number

Returns

number

Defined in

src/index.ts:616


noteObject

get noteObject(): NoteObject

Returns

NoteObject

Defined in

src/index.ts:620


ratio

get ratio(): number

Returns

number

Defined in

src/index.ts:613


semitones

get semitones(): number

Returns

number

Defined in

src/index.ts:607

Methods

addCents

addCents(cents): Pitch

Parameters
NameType
centsnumber
Returns

Pitch

Defined in

src/index.ts:650


addSemitones

addSemitones(semitones): Pitch

Parameters
NameType
semitonesnumber
Returns

Pitch

Defined in

src/index.ts:639


modRatio

modRatio(ratio): Pitch

Parameters
NameType
rationumber
Returns

Pitch

Defined in

src/index.ts:656


quantize

quantize(roundingMethod?): Pitch

Parameters
NameTypeDefault value
roundingMethodRoundingMethod"nearest"
Returns

Pitch

Defined in

src/index.ts:634


shift

shift(hz): Pitch

Parameters
NameType
hznumber
Returns

Pitch

Defined in

src/index.ts:645


fromNamedNote

Static fromNamedNote(note): Pitch

initialize from NamedNote

Example

Pitch.fromNamedNote("A3").hz // 220
Parameters
NameType
notestring
Returns

Pitch

Defined in

src/index.ts:601

0.3.1

8 months ago

0.3.0

9 months ago

0.2.0

2 years ago

0.1.3

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago