Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

A music theory library for Javascript

NotificationsYou must be signed in to change notification settings

tonaljs/tonal

Repository files navigation

npm version

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

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

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

Example

import{Chord,Interval,Note,Scale}from"tonal";Note.midi("C4");// => 60Note.freq("a4");// => 440Note.accidentals("c#2");// => '#'Note.transpose("C4","5P");// => "G4"Interval.semitones("5P");// => 7Interval.distance("C4","G4");// => "5P"// ScalesScale.get("C major").notes;// => ["C", "D", "E", "F", "G", "A", "B"];[1,3,5,7].map(Scale.degrees("C major"));// => ["C", "E", "G", "B"]Chord.get("Cmaj7").name;// => "C major seventh"// Chord inversionsconsttriad=Chord.degrees("Cm");[1,2,3].map(triad);// => ["C", "Eb", "G"];[2,3,1].map(triad);// => ["Eb", "G", "C"];[3,1,2].map(triad);// => ["G", "C", "Eb"];

Install

Install all packages at once:

npm install --save tonal

You can readCHANGELOG here.

Usage

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

ES6import:

import{Note,Scale}from"tonal";

ES5require:

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

Browser

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

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

Or if you prefer, grab theminified browser ready versionfrom the repository.

Bundle size

tonal includes all published modules.

Although the final bundle it is small, you canreduce bundle sizes even more by installing the modules individually, andimporting 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

Visit thedocumentation site or the README.md of each module 👇

Notes and intervals

Scales and chords

Voicings

Keys, chord progressions

Time, rhythm

Utilities

Contributing

Readcontributing 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 byediting this file

License

MIT License


[8]ページ先頭

©2009-2025 Movatter.jp