Negatory. Postpone Mission.

    tonal
    TypeScript icon, indicating that this package has built-in type declarations

    4.14.0 • Public • Published

    tonal

    npm version build status minified size gzipped size

    tonal is a music theory library. Contains functions to manipulate tonal elements of music (note, intervals, chords, scales, modes, keys). It deals with abstractions (not actual music or sound).

    tonal is implemented in Typescript and published as a collection of Javascript npm packages.

    It uses a functional programing style: all functions are pure, there is no data mutation, and entities are represented by data structures instead of objects.

    Example

    import { Interval, Note, Scale } from "tonal";
    
    Note.midi("A4"); // => 60
    Note.freq("a4").freq; // => 440
    Note.accidentals("c#2"); // => '#'
    Note.transpose("C4", "5P"); // => "G4"
    Interval.semitones("5P"); // => 7
    Interval.distance("C4", "G4"); // => "5P"
    Scale.get("C major").notes; // =>["C", "D", "E", "F", "G", "A", "B"];

    Install

    Install all packages at once:

    npm install --save tonal

    Usage

    Tonal is compatible with both ES5 and ES6 modules, and browser.

    ES6 import:

    import { Note, Scale } from "tonal";

    ES5 require:

    const { Note, Scale } = require("tonal");

    Browser

    You can use the browser version from jsdelivr CDN directly in your html:

    <script src="https://cdn.jsdelivr.net/npm/tonal/browser/tonal.min.js"></script>
    <script>
      console.log(Tonal.Key.minorKey("Ab"));
    </script>

    Or if you prefer, grab the minified browser ready version from the repository.

    Bundle size

    tonal includes all published modules.

    Although the final bundle it is small, you can reduce bundle sizes even more by installing the modules individually, and importing only the functions you need.

    Note that individual modules are prefixed with @tonaljs/. For example:

    npm i @tonaljs/note
    import { transpose } from "@tonaljs/note";
    transpose("A4", "P5");

    Documentation

    Generally, you just need to install tonal package (before it was called @tonaljs/tonal).

    The API documentation is inside README.md of each module 👇

    Notes and intervals

    Scales and chords

    Keys, chord progressions

    Time, rhythm

    Utilities

    Contributing

    Read contributing document. To contribute open a PR and ensure:

    • If is a music theory change (like the name of a scale) link to reliable references.
    • If is a new feature, add documentation: changes to README of the affected module(s) are expected.
    • Ad tests: changes to the test.ts file of the affected module(s) are expected.
    • All tests are green

    Inspiration

    This library takes inspiration from other music theory libraries:

    Projects using tonal

    Showcase of projects that are using Tonal:

    Thank you all!

    Add your project here by editing this file

    License

    MIT License

    Install

    npm i tonal

    DownloadsWeekly Downloads

    325

    Version

    4.14.0

    License

    MIT

    Unpacked Size

    227 kB

    Total Files

    11

    Last publish

    Collaborators

    • danigb