{"id":18645273,"url":"https://github.com/danigb/music-scale","last_synced_at":"2025-09-19T19:19:20.251Z","repository":{"id":66458330,"uuid":"38108034","full_name":"danigb/music-scale","owner":"danigb","description":"Music scales made easy","archived":false,"fork":false,"pushed_at":"2015-10-19T17:07:00.000Z","size":884,"stargazers_count":69,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-25T13:46:33.181Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danigb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-26T11:41:18.000Z","updated_at":"2025-03-15T03:08:48.000Z","dependencies_parsed_at":"2023-02-20T20:00:26.895Z","dependency_job_id":null,"html_url":"https://github.com/danigb/music-scale","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danigb%2Fmusic-scale","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danigb%2Fmusic-scale/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danigb%2Fmusic-scale/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danigb%2Fmusic-scale/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danigb","download_url":"https://codeload.github.com/danigb/music-scale/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248401955,"owners_count":21097328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T06:15:23.958Z","updated_at":"2025-09-19T19:19:15.227Z","avatar_url":"https://github.com/danigb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# music-scale\n\n[![Build Status](https://travis-ci.org/danigb/music-scale.svg?branch=master)](https://travis-ci.org/danigb/music-scale)\n[![Code Climate](https://codeclimate.com/github/danigb/music-scale/badges/gpa.svg)](https://codeclimate.com/github/danigb/music-scale)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard)\n[![npm version](https://img.shields.io/npm/v/music-scale.svg)](https://www.npmjs.com/package/music-scale)\n[![license](https://img.shields.io/npm/l/music-scale.svg)](https://www.npmjs.com/package/music-scale)\n[![pitch-array](https://img.shields.io/badge/pitch--array-compatible-yellow.svg)](https://github.com/danigb/pitch-array-notation)\n\nMusic scales made easy:\n\n```js\nvar scale = require('music-scale')\nvar major = scale('1 2 3 4 5 6 7')\nmajor('A') // =\u003e ['A', 'B', 'C#', 'D', 'E', 'F#', 'G#']\n```\n\nIt includes a dictionary with more than 100 scales:\n\n```js\nvar lydianAug = scale.fromName('lydian augmented')\nlydianAug('C') // =\u003e ['C', 'D', 'E', 'F#', 'G#', 'A', 'B']\n```\n\n## Install\n\n#### Node\n\nInstall via npm: `npm i --save music-scale` and require it.\n\n#### Browsers\n\nCurrently there's no distribution for browsers, but is planned. You can use browserify, webpack or a similar tool to create one.\n\n_For webpack users: If you use the .json files (or any function that consumes the json file like fromName and names) you will need add a plugin to webpack.config file._\n\n\n## Usage\n\n#### Build scales from intervals\n\nThe simplest use case is build scales from intervals:\n\n```js\nscale('1M 2M 3m 7m', 'F') // =\u003e ['F', 'G', 'Ab', 'Eb']\nscale('1 2 3 4 5', 'A3') // =\u003e ['A3', 'B3', 'C#4', 'D4', 'E4']\n```\n\nTo know the interval string format see [interval-parser](https://github.com/danigb/interval-parser). Notice that if the tonic contains octave, the scale will have octaves in it.\n\nAlso, you can partially apply the `scale` function:\n\n```js\nvar pentatonic = scale('1 2 3 5 6')\npentatonic('E') // =\u003e ['E', 'F#', 'G#', 'B', 'C#']\n```\n\n#### Build scales from notes\n\nYou can also use notes as the source of your scale:\n\n```js\nvar lydian = scale('C D E F# G A B')\nlydian('A') // =\u003e ['A', 'B', 'C#', 'D#', 'E', 'F#', 'G#']\n```\n\n`scale` function assumes that the first note is the tonic.\n\n#### Get scale intervals\n\nYou can get the scale intervals passing `null` as tonic:\n\n```js\nvar dorian = scale('D E F G A B C')\ndorian(null) // =\u003e ['1P', '2M', '3m', '4P', '5P', '6M', '7m']\n```\n\n#### Create a dictionary of scales\n\nYou can create a dictionary of scales with a hash that maps names to intervals (or notes). Optionally, you can pass a dictionary of aliases:\n\n```js\nvar scales = scale.fromName(\n  {'major': 'C D E F G A B', 'minor': 'A B C D E F G'},\n  {'ionian': 'major', 'eolian': 'minor'})\nscales('major', 'F') // =\u003e ['F', 'G', 'A', 'Bb', 'C', 'D', 'E']\nscales('ionian', 'A') // same as scales('major', 'A')\nscales('eolian', 'G') // same as scales('minor', 'G')\nscale('dorian', 'C') // =\u003e null\n```\n\n#### Use the built-in scale dictionary\n\n`music-scale` has a couple of .json data hash with about 100 scales (see [dict](https://github.com/danigb/music-scale/tree/master/dict) directory):\n\n```js\nscale.fromName('bebop locrian', 'C') // =\u003e [ 'C', 'Db', 'Eb', 'F', 'Gb', 'G', 'Ab', 'Bb']\n```\n\nYou can get all scales names with `names` function:\n\n```js\nscale.names() // =\u003e ['major', 'minor', ...]\n```\n\n#### Get degrees of a scale\n\nYou can get specific degrees of a scale:\n\n```js\nscale.degrees('1 3 5', 'C D E F G A B') // =\u003e [ 'C', 'E', 'G' ]\nscale.degrees('1 5 2 6', 'C D E F G A B') // =\u003e [ 'C', 'G', 'D', 'A' ]\n```\n\nNotice that scale notes are the same that the order of the degrees\n(Jerry Bergonzi would be very happy with this...)\n\n#### Scale detection\n\nNot implemented yet: get the name of scale from a collection of notes\n\n#### This library is too big\n\nYou can require the individual functions:\n\n```js\nvar scale = require('music-scale/scale')\nvar fromName = require('music-scale/fromName')\n```\n\n### This library is too small\n\nSugestions welcomed. Pull request are perfect.\n\n## API\n\n\u003c!-- START docme generated API please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN docme TO UPDATE --\u003e\n\n\u003cdiv\u003e\n\u003cdiv class=\"jsdoc-githubify\"\u003e\n\u003csection\u003e\n\u003carticle\u003e\n\u003cdiv class=\"container-overview\"\u003e\n\u003cdl class=\"details\"\u003e\n\u003c/dl\u003e\n\u003c/div\u003e\n\u003cdl\u003e\n\u003cdt\u003e\n\u003ch4 class=\"name\" id=\"degrees\"\u003e\u003cspan class=\"type-signature\"\u003e\u003c/span\u003edegrees\u003cspan class=\"signature\"\u003e(degrees, notes)\u003c/span\u003e\u003cspan class=\"type-signature\"\u003e \u0026rarr; {Array}\u003c/span\u003e\u003c/h4\u003e\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cdiv class=\"description\"\u003e\n\u003cp\u003eGet the degrees of a scale\u003c/p\u003e\n\u003cp\u003eThe resulting array will contain the notes in the same order as degrees.\nIf a given degree is not present in the scale, the result will contain a\nnull in that position.\u003c/p\u003e\n\u003c/div\u003e\n\u003ch5\u003eParameters:\u003c/h5\u003e\n\u003ctable class=\"params\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth class=\"last\"\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003edegrees\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eArray\u003c/span\u003e\n|\n\u003cspan class=\"param-type\"\u003eString\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003ethe degrees numbers\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003enotes\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eArray\u003c/span\u003e\n|\n\u003cspan class=\"param-type\"\u003eString\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003ethe scale notes\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdl class=\"details\"\u003e\n\u003cdt class=\"tag-source\"\u003eSource:\u003c/dt\u003e\n\u003cdd class=\"tag-source\"\u003e\u003cul class=\"dummy\"\u003e\n\u003cli\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/degrees.js\"\u003edegrees.js\u003c/a\u003e\n\u003cspan\u003e, \u003c/span\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/degrees.js#L13\"\u003elineno 13\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eReturns:\u003c/h5\u003e\n\u003cdiv class=\"param-desc\"\u003e\n\u003cp\u003ethe notes of the given degrees (or null if not present)\u003c/p\u003e\n\u003c/div\u003e\n\u003cdl\u003e\n\u003cdt\u003e\nType\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cspan class=\"param-type\"\u003eArray\u003c/span\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eExample\u003c/h5\u003e\n\u003cpre class=\"prettyprint\"\u003e\u003ccode\u003escale.degrees('1 3 5', 'C D E F G A B') // =\u003e [ 'C', 'E', 'G' ]\nscale.degrees('1 5 2 6', 'C D E F G A B') // =\u003e [ 'C', 'G', 'D', 'A' ]\nscale.degrees('1 2 6', 'C D E F G') // =\u003e [ 'C', 'D', null ]\u003c/code\u003e\u003c/pre\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\n\u003ch4 class=\"name\" id=\"dictionary\"\u003e\u003cspan class=\"type-signature\"\u003e\u003c/span\u003edictionary\u003cspan class=\"signature\"\u003e(data, aliases)\u003c/span\u003e\u003cspan class=\"type-signature\"\u003e \u0026rarr; {function}\u003c/span\u003e\u003c/h4\u003e\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cdiv class=\"description\"\u003e\n\u003cp\u003eCreate a scale builder function from a hash of data\u003c/p\u003e\n\u003cp\u003eA scale builder is a function that given a names and a tonic, returns\na scale (array). It can be partially applied.\u003c/p\u003e\n\u003c/div\u003e\n\u003ch5\u003eParameters:\u003c/h5\u003e\n\u003ctable class=\"params\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth class=\"last\"\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003edata\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eHash\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003ethe data (maps names to intervals or notes)\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003ealiases\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eHash\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003e(Optional) maps names to names in the data hash\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdl class=\"details\"\u003e\n\u003cdt class=\"tag-source\"\u003eSource:\u003c/dt\u003e\n\u003cdd class=\"tag-source\"\u003e\u003cul class=\"dummy\"\u003e\n\u003cli\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/dictionary.js\"\u003edictionary.js\u003c/a\u003e\n\u003cspan\u003e, \u003c/span\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/dictionary.js#L14\"\u003elineno 14\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eReturns:\u003c/h5\u003e\n\u003cdiv class=\"param-desc\"\u003e\n\u003cp\u003ea function to create scales\u003c/p\u003e\n\u003c/div\u003e\n\u003cdl\u003e\n\u003cdt\u003e\nType\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cspan class=\"param-type\"\u003efunction\u003c/span\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eExample\u003c/h5\u003e\n\u003cpre class=\"prettyprint\"\u003e\u003ccode\u003evar scales = dictionary({ major: '1 2 3 4 5 6 7', minor: '1 2 3b 4 5 6b 7b' }, {eolian: 'minor'})\nscales('major', 'C') // =\u003e ['C', 'D', 'E', 'F', 'G', 'A', 'B']\nscales('aeolian', 'A') // =\u003e ['A', 'B', 'C', 'D', 'E', 'F', 'G']\nvar minor = scales('minor')\nminor('D') // =\u003e ['D', 'E', 'F', 'G', 'A', 'Bb', 'C']\u003c/code\u003e\u003c/pre\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\n\u003ch4 class=\"name\" id=\"fromName\"\u003e\u003cspan class=\"type-signature\"\u003e\u003c/span\u003efromName\u003cspan class=\"signature\"\u003e(name, tonic)\u003c/span\u003e\u003cspan class=\"type-signature\"\u003e\u003c/span\u003e\u003c/h4\u003e\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cdiv class=\"description\"\u003e\n\u003cp\u003eBuild a scale using a name and a tonic\u003c/p\u003e\n\u003cp\u003eIt uses a dictionary of scales (see dict directory)\u003c/p\u003e\n\u003cp\u003eCan be partially applied (see example)\u003c/p\u003e\n\u003c/div\u003e\n\u003ch5\u003eParameters:\u003c/h5\u003e\n\u003ctable class=\"params\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth class=\"last\"\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eString\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003ethe name of the scale\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003etonic\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eString\u003c/span\u003e\n|\n\u003cspan class=\"param-type\"\u003eArray\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003ethe tonic of the scale\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdl class=\"details\"\u003e\n\u003cdt class=\"tag-source\"\u003eSource:\u003c/dt\u003e\n\u003cdd class=\"tag-source\"\u003e\u003cul class=\"dummy\"\u003e\n\u003cli\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/fromName.js\"\u003efromName.js\u003c/a\u003e\n\u003cspan\u003e, \u003c/span\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/fromName.js#L5\"\u003elineno 5\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eExample\u003c/h5\u003e\n\u003cpre class=\"prettyprint\"\u003e\u003ccode\u003escale.fromName('bebop locrian', 'C') // =\u003e [ 'C', 'Db', 'Eb', 'F', 'Gb', 'G', 'Ab', 'Bb' ]\nvar kumoi = scale.fromName('kumoi')\nkumoi('G') // =\u003e ['G', 'A', 'Bb', 'D', 'E']\u003c/code\u003e\u003c/pre\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\n\u003ch4 class=\"name\" id=\"names\"\u003e\u003cspan class=\"type-signature\"\u003e\u003c/span\u003enames\u003cspan class=\"signature\"\u003e(withAliases)\u003c/span\u003e\u003cspan class=\"type-signature\"\u003e \u0026rarr; {Array.\u0026lt;String\u003e}\u003c/span\u003e\u003c/h4\u003e\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cdiv class=\"description\"\u003e\n\u003cp\u003eGet all scale names available\u003c/p\u003e\n\u003c/div\u003e\n\u003ch5\u003eParameters:\u003c/h5\u003e\n\u003ctable class=\"params\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth class=\"last\"\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003ewithAliases\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eBoolean\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003eset to \u003ccode\u003etrue\u003c/code\u003e to get aliases names\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdl class=\"details\"\u003e\n\u003cdt class=\"tag-source\"\u003eSource:\u003c/dt\u003e\n\u003cdd class=\"tag-source\"\u003e\u003cul class=\"dummy\"\u003e\n\u003cli\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/names.js\"\u003enames.js\u003c/a\u003e\n\u003cspan\u003e, \u003c/span\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/names.js#L6\"\u003elineno 6\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eReturns:\u003c/h5\u003e\n\u003cdiv class=\"param-desc\"\u003e\n\u003cp\u003ethe list of all scale names\u003c/p\u003e\n\u003c/div\u003e\n\u003cdl\u003e\n\u003cdt\u003e\nType\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cspan class=\"param-type\"\u003eArray.\u0026lt;String\u003e\u003c/span\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eExample\u003c/h5\u003e\n\u003cpre class=\"prettyprint\"\u003e\u003ccode\u003escale.names() // =\u003e ['major', 'minor', ...]\u003c/code\u003e\u003c/pre\u003e\n\u003c/dd\u003e\n\u003cdt\u003e\n\u003ch4 class=\"name\" id=\"scale\"\u003e\u003cspan class=\"type-signature\"\u003e\u003c/span\u003escale\u003cspan class=\"signature\"\u003e(source, tonic)\u003c/span\u003e\u003cspan class=\"type-signature\"\u003e \u0026rarr; {Array}\u003c/span\u003e\u003c/h4\u003e\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cdiv class=\"description\"\u003e\n\u003cp\u003eBuild a scale from a source and a tonic. A scale is an array of notes (or\nintervals if tonic is null) ordered by frequency\u003c/p\u003e\n\u003cp\u003eA source can be a list of intervals or notes. The tonic must be\na pitch (with or without octave) or null to get the scale intervals\u003c/p\u003e\n\u003cp\u003eThis function is currified, so you can partially apply the function passing\none parameter instead of two (see example)\u003c/p\u003e\n\u003c/div\u003e\n\u003ch5\u003eParameters:\u003c/h5\u003e\n\u003ctable class=\"params\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth class=\"last\"\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003esource\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eArray\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003ethe list of intervals or notes\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"name\"\u003e\u003ccode\u003etonic\u003c/code\u003e\u003c/td\u003e\n\u003ctd class=\"type\"\u003e\n\u003cspan class=\"param-type\"\u003eString\u003c/span\u003e\n\u003c/td\u003e\n\u003ctd class=\"description last\"\u003e\u003cp\u003ethe tonic of the scale\u003c/p\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdl class=\"details\"\u003e\n\u003cdt class=\"tag-source\"\u003eSource:\u003c/dt\u003e\n\u003cdd class=\"tag-source\"\u003e\u003cul class=\"dummy\"\u003e\n\u003cli\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/scale.js\"\u003escale.js\u003c/a\u003e\n\u003cspan\u003e, \u003c/span\u003e\n\u003ca href=\"https://github.com/danigb/music-scale/blob/master/scale.js#L26\"\u003elineno 26\u003c/a\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eReturns:\u003c/h5\u003e\n\u003cdiv class=\"param-desc\"\u003e\n\u003cp\u003ethe list of notes\u003c/p\u003e\n\u003c/div\u003e\n\u003cdl\u003e\n\u003cdt\u003e\nType\n\u003c/dt\u003e\n\u003cdd\u003e\n\u003cspan class=\"param-type\"\u003eArray\u003c/span\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003ch5\u003eExample\u003c/h5\u003e\n\u003cpre class=\"prettyprint\"\u003e\u003ccode\u003escale('1 2 3 5 6', 'G') // =\u003e ['G', 'A', 'B', 'D', 'E']\nvar dorian = scale('D E F G A B C')\ndorian('C4')\u003c/code\u003e\u003c/pre\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003c/article\u003e\n\u003c/section\u003e\n\u003c/div\u003e\n\n*generated with [docme](https://github.com/thlorenz/docme)*\n\u003c/div\u003e\n\u003c!-- END docme generated API please keep comment here to allow auto update --\u003e\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanigb%2Fmusic-scale","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanigb%2Fmusic-scale","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanigb%2Fmusic-scale/lists"}