# tonaljs/tonal

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/tonaljs-tonal).**

_How this analysis was created: the description and tags below were written by an AI model that read this project's README and public documentation pages; stars, license and language come straight from the GitHub API. The model does not read the source code._

4,193 stars · 247 forks · TypeScript

## Links

- GitHub: https://github.com/tonaljs/tonal
- Homepage: https://tonaljs.github.io/tonal/docs
- awesome-repositories: https://awesome-repositories.com/repository/tonaljs-tonal.md

## Topics

`chord-progression` `chords` `functional` `interval` `javascript` `key-signatures` `music` `music-theory` `scale` `transpose` `typescript`

## Description

Tonal is a JavaScript music theory library designed for the computational analysis of scales, chords, and intervals. It serves as a harmonic analysis tool, a musical notation parser, and a pitch class set analyzer.

The project provides specialized capabilities for rhythmic pattern generation, including the creation of Euclidean rhythms. It also functions as a toolkit for translating between different musical representations, such as scientific pitch notation, MIDI numbers, frequencies, and ABC notation.

The library covers a broad range of music theory domains, including harmony and key management, interval arithmetic, and scale detection. It includes utilities for parsing Roman numeral progressions, managing mode metadata, and identifying compatible chords and scales based on note sets.

The codebase is written in TypeScript.

## Tags

### Graphics & Multimedia

- [Computational Music Theory](https://awesome-repositories.com/f/graphics-multimedia/musical-scale-configuration/music-theory-definitions/computational-music-theory.md) — Implements a comprehensive system for the computational analysis and automation of scales, chords, and intervals.
- [Algorithmic Rhythm Generation](https://awesome-repositories.com/f/graphics-multimedia/algorithmic-rhythm-generation.md) — Generates rhythmic sequences using mathematical algorithms such as Euclidean patterns.
- [Chord Symbol Parsing](https://awesome-repositories.com/f/graphics-multimedia/chord-and-arpeggio-generators/chord-symbol-parsing.md) — Parses chord symbols into constituent parts like root, quality, and extensions to determine notes.
- [Note-to-Chord Identification](https://awesome-repositories.com/f/graphics-multimedia/chord-and-arpeggio-generators/note-to-chord-identification.md) — Analyzes a list of notes to determine all matching chord names for that set of pitches. ([source](https://tonaljs.github.io/tonal/docs/groups/chords))
- [Chord Property Resolution](https://awesome-repositories.com/f/graphics-multimedia/chord-property-resolution.md) — Resolves theoretical properties like tonic, bass, and root from a chord symbol or set of tokens. ([source](https://tonaljs.github.io/tonal/docs/groups/chords))
- [Chord Transposition](https://awesome-repositories.com/f/graphics-multimedia/chord-transposition.md) — Shifts a chord symbol to a new pitch by applying a specified musical interval. ([source](https://tonaljs.github.io/tonal/docs/groups/chords))
- [Chord Type Data Retrieval](https://awesome-repositories.com/f/graphics-multimedia/chord-type-data-retrieval.md) — Returns a chord type's quality, interval list, and alternative names based on its name. ([source](https://tonaljs.github.io/tonal/docs/dictionaries/chord-types))
- [Scale and Chord Generation](https://awesome-repositories.com/f/graphics-multimedia/chord-type-data-retrieval/scale-and-chord-generation.md) — Retrieves lists of notes for specific scales and chords using a dictionary of musical types. ([source](https://cdn.jsdelivr.net/gh/tonaljs/tonal@main/README.md))
- [Computational Harmonic Analysis](https://awesome-repositories.com/f/graphics-multimedia/computational-harmonic-analysis.md) — Uses algorithms to identify chords, intervals, and progressions for harmonic analysis.
- [Generative Rhythmic Sequencing](https://awesome-repositories.com/f/graphics-multimedia/generative-rhythmic-sequencing.md) — Generates complex rhythmic patterns using Euclidean algorithms and managing time signature data.
- [Notation Automation](https://awesome-repositories.com/f/graphics-multimedia/music-notation-systems/notation-automation.md) — Automates the translation between roman numerals, scientific pitch notation, and lead sheets.
- [Musical Key Analysis](https://awesome-repositories.com/f/graphics-multimedia/musical-key-analysis.md) — Calculates the theoretical properties of musical keys and resolves associated scales and chords. ([source](https://cdn.jsdelivr.net/gh/tonaljs/tonal@main/README.md))
- [Musical Notation Parsing](https://awesome-repositories.com/f/graphics-multimedia/musical-notation-parsing.md) — Translates between different musical notation formats including scientific pitch notation, MIDI, and ABC notation.
- [Scale Data Retrieval](https://awesome-repositories.com/f/graphics-multimedia/musical-scale-configuration/scale-data-retrieval.md) — Queries a dictionary to retrieve the notes and tonic associated with a specific named musical scale. ([source](https://tonaljs.github.io/tonal/docs/groups/scales))
- [Note Pitch Transposition](https://awesome-repositories.com/f/graphics-multimedia/note-pitch-modulation/note-pitch-transposition.md) — Shifts musical notes by specified intervals or fifths to determine new note names. ([source](https://tonaljs.github.io/tonal/docs/basics/notes))
- [Pitch Class Normalization](https://awesome-repositories.com/f/graphics-multimedia/note-pitch-modulation/note-pitch-transposition/pitch-class-normalization.md) — Processes raw note strings into standardized pitch classes for consistent comparison across octaves.
- [Scale Detection](https://awesome-repositories.com/f/graphics-multimedia/scale-detection.md) — Algorithmically identifies musical scales that fit a provided set of notes using exact or partial matching. ([source](https://tonaljs.github.io/tonal/docs/groups/scales))
- [Algorithmic Composition Tools](https://awesome-repositories.com/f/graphics-multimedia/algorithmic-composition-tools.md) — Provides tools to automate musical notes and rhythms through programmatic algorithmic composition.
- [Modal Chord Generation](https://awesome-repositories.com/f/graphics-multimedia/chord-and-arpeggio-generators/modal-chord-generation.md) — Produces triad and seventh chord lists for specific musical modes starting from a given tonic. ([source](https://tonaljs.github.io/tonal/docs/harmony/modes))
- [Chord Compatibility Analysis](https://awesome-repositories.com/f/graphics-multimedia/chord-compatibility-analysis.md) — Lists all chords that fit within the notes of a given musical scale. ([source](https://tonaljs.github.io/tonal/docs/groups/scales))
- [Chord Dictionary Management](https://awesome-repositories.com/f/graphics-multimedia/chord-dictionary-management.md) — Allows listing available chord types and defining custom chords via specific intervals. ([source](https://tonaljs.github.io/tonal/docs/dictionaries/chord-types))
- [Chord Relationship Analysis](https://awesome-repositories.com/f/graphics-multimedia/chord-relationship-analysis.md) — Identifies if chords are supersets or subsets of other chords by comparing their constituent notes. ([source](https://tonaljs.github.io/tonal/docs/groups/chords))
- [Inversion Handling](https://awesome-repositories.com/f/graphics-multimedia/chord-type-data-retrieval/inversion-handling.md) — Retrieves chord notes based on type and handles inversions by reordering the degrees. ([source](https://tonaljs.github.io/tonal/docs))
- [Key-Based Chord Generation](https://awesome-repositories.com/f/graphics-multimedia/key-based-chord-generation.md) — Generates lists of chords and their functional roles based on a specified musical key. ([source](https://tonaljs.github.io/tonal/docs/harmony/keys))
- [Modal Tonic Identification](https://awesome-repositories.com/f/graphics-multimedia/modal-tonic-identification.md) — Identifies the tonic of a mode that shares the same pitch collection as another mode. ([source](https://tonaljs.github.io/tonal/docs/harmony/modes))
- [Theoretical Scale Metadata](https://awesome-repositories.com/f/graphics-multimedia/music-metadata-retrieval/theoretical-scale-metadata.md) — Provides theoretical metadata for scales, including intervals, qualities, and aliases for harmonic analysis. ([source](https://tonaljs.github.io/tonal/docs/dictionaries/scale-types))
- [Musical Duration Values](https://awesome-repositories.com/f/graphics-multimedia/musical-duration-values.md) — Provides duration objects and shorthand identifiers for standard musical notation time values. ([source](https://tonaljs.github.io/tonal/docs/time/duration))
- [Musical Mode Metadata](https://awesome-repositories.com/f/graphics-multimedia/musical-mode-metadata.md) — Retrieves theoretical metadata for musical modes, including alterations and associated chord types. ([source](https://tonaljs.github.io/tonal/docs/harmony/modes))
- [Mode Note Determination](https://awesome-repositories.com/f/graphics-multimedia/musical-mode-metadata/mode-note-determination.md) — Calculates the exact sequence of notes for a specific mode based on a provided tonic. ([source](https://tonaljs.github.io/tonal/docs/harmony/modes))
- [Notation Simplification](https://awesome-repositories.com/f/graphics-multimedia/musical-note-editing/note-modifiers/notation-simplification.md) — Provides utilities to simplify musical notation by reducing note names to the minimum number of accidentals. ([source](https://tonaljs.github.io/tonal/docs/basics/notes))
- [Musical Rhythm Parsing](https://awesome-repositories.com/f/graphics-multimedia/musical-rhythm-parsing.md) — Parses musical timing symbols, durations, and time signatures into computational data formats. ([source](https://cdn.jsdelivr.net/gh/tonaljs/tonal@main/README.md))
- [Scale Dictionary Management](https://awesome-repositories.com/f/graphics-multimedia/musical-scale-configuration/scale-dictionary-management.md) — Manages a collection of scale definitions, allowing users to list available types or add custom ones. ([source](https://tonaljs.github.io/tonal/docs/dictionaries/scale-types))
- [Scale Relationship Identification](https://awesome-repositories.com/f/graphics-multimedia/musical-scale-configuration/scale-relationship-identification.md) — Determines if musical scales are subsets, supersets, or modes of one another. ([source](https://tonaljs.github.io/tonal/docs/groups/scales))
- [Compatible Scale Identification](https://awesome-repositories.com/f/graphics-multimedia/musical-scale-learning/compatible-scale-identification.md) — Identifies all musical scales that contain the constituent notes of a given chord. ([source](https://tonaljs.github.io/tonal/docs/groups/chords))
- [Musical Time Signatures](https://awesome-repositories.com/f/graphics-multimedia/musical-time-signatures.md) — Retrieves rhythmic structure and beat properties of a time signature from names or numeric pairs. ([source](https://tonaljs.github.io/tonal/docs/time/signatures))
- [Key Signature Definitions](https://awesome-repositories.com/f/graphics-multimedia/musical-time-signatures/key-signature-definitions.md) — Identifies the major tonic associated with specific key signatures. ([source](https://tonaljs.github.io/tonal/docs/harmony/keys))
- [Enharmonic Resolution](https://awesome-repositories.com/f/graphics-multimedia/note-pitch-modulation/enharmonic-resolution.md) — Identifies and converts between notes that represent the same pitch using different names. ([source](https://tonaljs.github.io/tonal/docs/basics/notes))
- [Semitone to Interval Mapping](https://awesome-repositories.com/f/graphics-multimedia/semitone-to-interval-mapping.md) — Translates numeric semitone counts into corresponding music theory interval names. ([source](https://tonaljs.github.io/tonal/docs/basics/intervals))

### Scientific & Mathematical Computing

- [Musical Note Analysis](https://awesome-repositories.com/f/scientific-mathematical-computing/musical-note-analysis.md) — Extracts theoretical properties such as pitch class, chroma, MIDI numbers, and frequencies from note names. ([source](https://tonaljs.github.io/tonal/docs/basics/notes))
- [Harmonic Roman Numeral Analysis](https://awesome-repositories.com/f/scientific-mathematical-computing/harmonic-roman-numeral-analysis.md) — Converts roman numeral symbols into harmonic chord properties within a specific musical key. ([source](https://tonaljs.github.io/tonal/docs/notation/roman-numerals))
- [MIDI Note Conversions](https://awesome-repositories.com/f/scientific-mathematical-computing/midi-note-conversions.md) — Translates musical note names or numbers into standard MIDI note numbers within the 0-127 range. ([source](https://tonaljs.github.io/tonal/docs/basics/midi))
- [Musical Frequency Conversions](https://awesome-repositories.com/f/scientific-mathematical-computing/musical-frequency-conversions.md) — Performs logarithmic calculations to translate between frequencies in Hertz and MIDI note numbers.
- [Musical Interval Analysis](https://awesome-repositories.com/f/scientific-mathematical-computing/musical-interval-analysis.md) — Retrieves semitones, quality, and octave span based on a specific interval name. ([source](https://tonaljs.github.io/tonal/docs/basics/intervals))
- [Musical Interval Arithmetic](https://awesome-repositories.com/f/scientific-mathematical-computing/musical-interval-arithmetic.md) — Calculates harmonic relationships by adding, subtracting, simplifying, or inverting musical intervals.
- [Musical Interval Distance Calculation](https://awesome-repositories.com/f/scientific-mathematical-computing/musical-interval-distance-calculation.md) — Calculates the specific musical interval distance existing between two provided notes. ([source](https://tonaljs.github.io/tonal/docs/basics/intervals))
- [Musical Interval Representations](https://awesome-repositories.com/f/scientific-mathematical-computing/musical-interval-representations.md) — Defines musical chords and scales as lists of semitone offsets from a root tonic.
- [Musical Roman Numeral Translation](https://awesome-repositories.com/f/scientific-mathematical-computing/numerical-mathematical-foundations/arithmetic-number-types/multiplication-algorithms/number-theory-algorithms/numeral-system-conversions/musical-roman-numeral-translation.md) — Translates chord progressions between roman numeral harmonic analysis and lead sheet notation. ([source](https://tonaljs.github.io/tonal/docs/harmony/progressions))
- [Pitch Class Set Analysis](https://awesome-repositories.com/f/scientific-mathematical-computing/pitch-class-set-analysis.md) — Analyzes collections of pitch classes to identify complex musical structures and harmonic relationships.
- [Pitch Class Set Management](https://awesome-repositories.com/f/scientific-mathematical-computing/pitch-class-set-analysis/pitch-class-set-management.md) — Extracts unique sorted collections of notes from MIDI numbers or chroma strings for further analysis. ([source](https://tonaljs.github.io/tonal/docs/basics/midi))
- [Scale Degree Mapping](https://awesome-repositories.com/f/scientific-mathematical-computing/scale-degree-mapping.md) — Maps numerical scale degrees and steps to their corresponding musical note names or pitch classes. ([source](https://tonaljs.github.io/tonal/docs))
- [Note Range Generation](https://awesome-repositories.com/f/scientific-mathematical-computing/musical-note-analysis/note-range-generation.md) — Generates a sequence of notes within a musical scale between two specified boundary notes. ([source](https://tonaljs.github.io/tonal/docs/groups/scales))
- [Note Name Normalization](https://awesome-repositories.com/f/scientific-mathematical-computing/note-name-normalization.md) — Translates MIDI note numbers into note names using flats or sharps. ([source](https://tonaljs.github.io/tonal/docs/basics/midi))
- [Note Constraining](https://awesome-repositories.com/f/scientific-mathematical-computing/pitch-class-set-analysis/note-constraining.md) — Finds the nearest MIDI note within a pitch class set to snap a note to a specific scale. ([source](https://tonaljs.github.io/tonal/docs/basics/midi))
- [Tonic Pitch Mapping](https://awesome-repositories.com/f/scientific-mathematical-computing/tonic-pitch-mapping.md) — Maps pitch class sets over a specific tonic to determine corresponding MIDI note numbers. ([source](https://tonaljs.github.io/tonal/docs/basics/midi))

### Business & Productivity Software

- [Annotation to Note Conversions](https://awesome-repositories.com/f/business-productivity-software/annotation-to-note-conversions.md) — Translates MIDI numbers into musical note names using standard or sharp notation. ([source](https://tonaljs.github.io/tonal/docs/basics/notes))

### Game Development

- [Euclidean Rhythm Generation](https://awesome-repositories.com/f/game-development/game-engines-frameworks/game-engines/rhythm/euclidean-rhythm-generation.md) — Implements algorithms to distribute pulses evenly across a time span for Euclidean rhythm generation.
- [Rhythmic Pattern Manipulation](https://awesome-repositories.com/f/game-development/game-engines-frameworks/game-engines/rhythmic-pattern-manipulation.md) — Transforms rhythmic sequences through operations such as rotation and shifting of pattern steps. ([source](https://tonaljs.github.io/tonal/docs/time/patterns))

### Hardware & IoT

- [MIDI Processing Engines](https://awesome-repositories.com/f/hardware-iot/integration-performance/hardware-interfacing-integration/hardware-interfacing/midi-and-osc-interfaces/midi-processing-engines.md) — Processes and transforms MIDI data, including conversions between MIDI note numbers, frequencies, and musical notation.
