0.2.0 • Published 1 year ago

pitch-utils v0.2.0

Weekly downloads
-
License
GPL-3.0-only
Repository
github
Last release
1 year 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→ named→ note object
hz N/AhzToRatiohzToSemitoneshzToCentshzToNoteNamehzToNoteObject
ratio ratioToHzN/AratioToSemitonesratioToCentsUnimplementedUnimplemented
semitones semitonesToHzsemitonesToRatioN/AsemitonesToCentsUnimplementedUnimplemented
cents centsToHzcentsToRatiocentsToSemitonesN/AUnimplementedUnimplemented
named namedNoteToHznamedNoteToRationamedNoteToSemitonesnamedNoteToCentsN/AUnimplemented

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:53


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:59


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:35


NoteObject

Ƭ NoteObject: Object

Object with note properties for flexible formatting.

Type declaration

NameType
detuneCents
hzHz
noteNoteName
octaveOctave

Defined in

src/index.ts:69


Octave

Ƭ Octave: number

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

Defined in

src/index.ts:64


Ratio

Ƭ Ratio: number

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

Defined in

src/index.ts:41


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:80


Semitones

Ƭ Semitones: number

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

Defined in

src/index.ts:47

Variables

A4

Const A4: 440

A4 frequency in Hz

Defined in

src/index.ts:89


chromaticScale

Const chromaticScale: string[]

Normalized note names in the chromatic scale, using sharps

Defined in

src/index.ts:93


enharmonicChromaticScale

Const enharmonicChromaticScale: string

Note names with alternate enharmonic names

Defined in

src/index.ts:110

Functions

centsToHz

centsToHz(cents, baseHz?): Hz

Example

centsToHz(1200) // 880

Parameters

NameTypeDefault value
centsnumberundefined
baseHznumberA4

Returns

Hz

Defined in

src/index.ts:260


centsToRatio

centsToRatio(cents): Ratio

Example

centsToRatio(1200) // 2

Parameters

NameType
centsnumber

Returns

Ratio

Defined in

src/index.ts:252


centsToSemitones

centsToSemitones(cents): Semitones

Example

centsToSemitones(100) // +1

Parameters

NameType
centsnumber

Returns

Semitones

Defined in

src/index.ts:244


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:160


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:179


getNoteIndexInOctave

getNoteIndexInOctave(note): number

Parameters

NameType
notestring

Returns

number

Defined in

src/index.ts:143


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:133


hzToCents

hzToCents(targetHz, baseHz?): Cents

Example

hzToCents(880, 440) // -1200

Parameters

NameTypeDefault value
targetHznumberundefined
baseHznumberA4

Returns

Cents

Defined in

src/index.ts:439


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:378


hzToNoteObject

hzToNoteObject(hz): NoteObject

Parameters

NameTypeDescription
hznumberfrequency of note in hertz

Returns

NoteObject

Defined in

src/index.ts:388


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:411


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:425


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:302


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:315


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:291


namedNoteToSemitones

namedNoteToSemitones(note): Semitones

Example

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

Parameters

NameType
notestring

Returns

Semitones

Defined in

src/index.ts:273


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:450


ratioToCents

ratioToCents(ratio): Cents

Example

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

Parameters

NameTypeDescription
rationumberdecimal or fractional ratio

Returns

Cents

Defined in

src/index.ts:360


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:344


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:331


semitonesToCents

semitonesToCents(semitones): Cents

Example

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

Parameters

NameTypeDescription
semitonesnumbersemitone offset

Returns

Cents

Defined in

src/index.ts:217


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:202


semitonesToRatio

semitonesToRatio(semitones): Ratio

Example

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

Parameters

NameTypeDescription
semitonesnumbersemitone offset

Returns

Ratio

Defined in

src/index.ts:229

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:469

Properties

detune

detune: (cents: number) => Pitch

Type declaration

▸ (cents): Pitch

####### Parameters

NameType
centsnumber

####### Returns

Pitch

Defined in

src/index.ts:533


frequency

frequency: number = A4

frequency of note in hertz

Defined in

src/index.ts:471


hz

hz: number

base value for calculations

Defined in

src/index.ts:468


transpose

transpose: (semitones: number) => Pitch

Type declaration

▸ (semitones): Pitch

####### Parameters

NameType
semitonesnumber

####### Returns

Pitch

Defined in

src/index.ts:522

Accessors

cents

get cents(): number

Returns

number

Defined in

src/index.ts:492


closestNoteAbove

get closestNoteAbove(): NoteObject

Returns

NoteObject

Defined in

src/index.ts:507


closestNoteBelow

get closestNoteBelow(): NoteObject

Returns

NoteObject

Defined in

src/index.ts:502


noteObject

get noteObject(): NoteObject

Returns

NoteObject

Defined in

src/index.ts:499


ratio

get ratio(): number

Returns

number

Defined in

src/index.ts:495


semitones

get semitones(): number

Returns

number

Defined in

src/index.ts:489

Methods

addCents

addCents(cents): Pitch

Parameters
NameType
centsnumber
Returns

Pitch

Defined in

src/index.ts:529


addSemitones

addSemitones(semitones): Pitch

Parameters
NameType
semitonesnumber
Returns

Pitch

Defined in

src/index.ts:518


modRatio

modRatio(ratio): Pitch

Parameters
NameType
rationumber
Returns

Pitch

Defined in

src/index.ts:535


quantize

quantize(roundingMethod?): Pitch

Parameters
NameTypeDefault value
roundingMethodRoundingMethod"nearest"
Returns

Pitch

Defined in

src/index.ts:513


shift

shift(hz): Pitch

Parameters
NameType
hznumber
Returns

Pitch

Defined in

src/index.ts:524


fromNamedNote

Static fromNamedNote(note): Pitch

initialize from NamedNote

Example

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

Pitch

Defined in

src/index.ts:481

0.2.0

1 year ago

0.1.3

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago