UNPKG

@tonaljs/scale-type

Version:

A dictionary of musical scales

1 lines 12.5 kB
{"version":3,"sources":["../index.ts","../data.ts"],"sourcesContent":["import {\n EmptyPcset,\n get as pcset,\n Pcset,\n PcsetChroma,\n PcsetNum,\n} from \"@tonaljs/pcset\";\nimport data from \"./data\";\n\n/**\n * Properties for a scale in the scale dictionary. It's a pitch class set\n * properties with the following additional information:\n * - name: the scale name\n * - aliases: alternative list of names\n * - intervals: an array of interval names\n */\nexport interface ScaleType extends Pcset {\n readonly name: string;\n readonly aliases: string[];\n}\n\nexport const NoScaleType: ScaleType = {\n ...EmptyPcset,\n intervals: [],\n aliases: [],\n};\n\ntype ScaleTypeName = string | PcsetChroma | PcsetNum;\n\nlet dictionary: ScaleType[] = [];\nlet index: Record<ScaleTypeName, ScaleType> = {};\n\nexport function names() {\n return dictionary.map((scale) => scale.name);\n}\n\n/**\n * Given a scale name or chroma, return the scale properties\n *\n * @param {string} type - scale name or pitch class set chroma\n * @example\n * import { get } from 'tonaljs/scale-type'\n * get('major') // => { name: 'major', ... }\n */\nexport function get(type: ScaleTypeName): ScaleType {\n return index[type] || NoScaleType;\n}\n\n/**\n * @deprecated\n * @use ScaleType.get\n */\nexport const scaleType = get;\n\n/**\n * Return a list of all scale types\n */\nexport function all() {\n return dictionary.slice();\n}\n\n/**\n * @deprecated\n * @use ScaleType.all\n */\nexport const entries = all;\n\n/**\n * Keys used to reference scale types\n */\nexport function keys() {\n return Object.keys(index);\n}\n\n/**\n * Clear the dictionary\n */\nexport function removeAll() {\n dictionary = [];\n index = {};\n}\n\n/**\n * Add a scale into dictionary\n * @param intervals\n * @param name\n * @param aliases\n */\nexport function add(\n intervals: string[],\n name: string,\n aliases: string[] = [],\n): ScaleType {\n const scale = { ...pcset(intervals), name, intervals, aliases };\n dictionary.push(scale);\n index[scale.name] = scale;\n index[scale.setNum] = scale;\n index[scale.chroma] = scale;\n scale.aliases.forEach((alias) => addAlias(scale, alias));\n return scale;\n}\n\nexport function addAlias(scale: ScaleType, alias: string) {\n index[alias] = scale;\n}\n\ndata.forEach(([ivls, name, ...aliases]: string[]) =>\n add(ivls.split(\" \"), name, aliases),\n);\n\n/** @deprecated */\nexport default {\n names,\n get,\n all,\n add,\n removeAll,\n keys,\n\n // deprecated\n entries,\n scaleType,\n};\n","// SCALES\n// Format: [\"intervals\", \"name\", \"alias1\", \"alias2\", ...]\nconst SCALES: string[][] = [\n // Basic scales\n [\"1P 2M 3M 5P 6M\", \"major pentatonic\", \"pentatonic\"],\n [\"1P 2M 3M 4P 5P 6M 7M\", \"major\", \"ionian\"],\n [\"1P 2M 3m 4P 5P 6m 7m\", \"minor\", \"aeolian\"],\n\n // Jazz common scales\n [\"1P 2M 3m 3M 5P 6M\", \"major blues\"],\n [\"1P 3m 4P 5d 5P 7m\", \"minor blues\", \"blues\"],\n [\"1P 2M 3m 4P 5P 6M 7M\", \"melodic minor\"],\n [\"1P 2M 3m 4P 5P 6m 7M\", \"harmonic minor\"],\n [\"1P 2M 3M 4P 5P 6M 7m 7M\", \"bebop\"],\n [\"1P 2M 3m 4P 5d 6m 6M 7M\", \"diminished\", \"whole-half diminished\"],\n\n // Modes\n [\"1P 2M 3m 4P 5P 6M 7m\", \"dorian\"],\n [\"1P 2M 3M 4A 5P 6M 7M\", \"lydian\"],\n [\"1P 2M 3M 4P 5P 6M 7m\", \"mixolydian\", \"dominant\"],\n [\"1P 2m 3m 4P 5P 6m 7m\", \"phrygian\"],\n [\"1P 2m 3m 4P 5d 6m 7m\", \"locrian\"],\n\n // 5-note scales\n [\"1P 3M 4P 5P 7M\", \"ionian pentatonic\"],\n [\"1P 3M 4P 5P 7m\", \"mixolydian pentatonic\", \"indian\"],\n [\"1P 2M 4P 5P 6M\", \"ritusen\"],\n [\"1P 2M 4P 5P 7m\", \"egyptian\"],\n [\"1P 3M 4P 5d 7m\", \"neopolitan major pentatonic\"],\n [\"1P 3m 4P 5P 6m\", \"vietnamese 1\"],\n [\"1P 2m 3m 5P 6m\", \"pelog\"],\n [\"1P 2m 4P 5P 6m\", \"kumoijoshi\"],\n [\"1P 2M 3m 5P 6m\", \"hirajoshi\"],\n [\"1P 2m 4P 5d 7m\", \"iwato\"],\n [\"1P 2m 4P 5P 7m\", \"in-sen\"],\n [\"1P 3M 4A 5P 7M\", \"lydian pentatonic\", \"chinese\"],\n [\"1P 3m 4P 6m 7m\", \"malkos raga\"],\n [\"1P 3m 4P 5d 7m\", \"locrian pentatonic\", \"minor seven flat five pentatonic\"],\n [\"1P 3m 4P 5P 7m\", \"minor pentatonic\", \"vietnamese 2\"],\n [\"1P 3m 4P 5P 6M\", \"minor six pentatonic\"],\n [\"1P 2M 3m 5P 6M\", \"flat three pentatonic\", \"kumoi\"],\n [\"1P 2M 3M 5P 6m\", \"flat six pentatonic\"],\n [\"1P 2m 3M 5P 6M\", \"scriabin\"],\n [\"1P 3M 5d 6m 7m\", \"whole tone pentatonic\"],\n [\"1P 3M 4A 5A 7M\", \"lydian #5P pentatonic\"],\n [\"1P 3M 4A 5P 7m\", \"lydian dominant pentatonic\"],\n [\"1P 3m 4P 5P 7M\", \"minor #7M pentatonic\"],\n [\"1P 3m 4d 5d 7m\", \"super locrian pentatonic\"],\n\n // 6-note scales\n [\"1P 2M 3m 4P 5P 7M\", \"minor hexatonic\"],\n [\"1P 2A 3M 5P 5A 7M\", \"augmented\"],\n [\"1P 2M 4P 5P 6M 7m\", \"piongio\"],\n [\"1P 2m 3M 4A 6M 7m\", \"prometheus neopolitan\"],\n [\"1P 2M 3M 4A 6M 7m\", \"prometheus\"],\n [\"1P 2m 3M 5d 6m 7m\", \"mystery #1\"],\n [\"1P 2m 3M 4P 5A 6M\", \"six tone symmetric\"],\n [\"1P 2M 3M 4A 5A 6A\", \"whole tone\", \"messiaen's mode #1\"],\n [\"1P 2m 4P 4A 5P 7M\", \"messiaen's mode #5\"],\n\n // 7-note scales\n [\"1P 2M 3M 4P 5d 6m 7m\", \"locrian major\", \"arabian\"],\n [\"1P 2m 3M 4A 5P 6m 7M\", \"double harmonic lydian\"],\n [\n \"1P 2m 2A 3M 4A 6m 7m\",\n \"altered\",\n \"super locrian\",\n \"diminished whole tone\",\n \"pomeroy\",\n ],\n [\"1P 2M 3m 4P 5d 6m 7m\", \"locrian #2\", \"half-diminished\", \"aeolian b5\"],\n [\n \"1P 2M 3M 4P 5P 6m 7m\",\n \"mixolydian b6\",\n \"melodic minor fifth mode\",\n \"hindu\",\n ],\n [\"1P 2M 3M 4A 5P 6M 7m\", \"lydian dominant\", \"lydian b7\", \"overtone\"],\n [\"1P 2M 3M 4A 5A 6M 7M\", \"lydian augmented\"],\n [\n \"1P 2m 3m 4P 5P 6M 7m\",\n \"dorian b2\",\n \"phrygian #6\",\n \"melodic minor second mode\",\n ],\n [\n \"1P 2m 3m 4d 5d 6m 7d\",\n \"ultralocrian\",\n \"superlocrian bb7\",\n \"superlocrian diminished\",\n ],\n [\"1P 2m 3m 4P 5d 6M 7m\", \"locrian 6\", \"locrian natural 6\", \"locrian sharp 6\"],\n [\"1P 2A 3M 4P 5P 5A 7M\", \"augmented heptatonic\"],\n // Source https://en.wikipedia.org/wiki/Ukrainian_Dorian_scale\n [\n \"1P 2M 3m 4A 5P 6M 7m\",\n \"dorian #4\",\n \"ukrainian dorian\",\n \"romanian minor\",\n \"altered dorian\",\n ],\n [\"1P 2M 3m 4A 5P 6M 7M\", \"lydian diminished\"],\n [\"1P 2M 3M 4A 5A 7m 7M\", \"leading whole tone\"],\n [\"1P 2M 3M 4A 5P 6m 7m\", \"lydian minor\"],\n [\"1P 2m 3M 4P 5P 6m 7m\", \"phrygian dominant\", \"spanish\", \"phrygian major\"],\n [\"1P 2m 3m 4P 5P 6m 7M\", \"balinese\"],\n [\"1P 2m 3m 4P 5P 6M 7M\", \"neopolitan major\"],\n [\"1P 2M 3M 4P 5P 6m 7M\", \"harmonic major\"],\n [\"1P 2m 3M 4P 5P 6m 7M\", \"double harmonic major\", \"gypsy\"],\n [\"1P 2M 3m 4A 5P 6m 7M\", \"hungarian minor\"],\n [\"1P 2A 3M 4A 5P 6M 7m\", \"hungarian major\"],\n [\"1P 2m 3M 4P 5d 6M 7m\", \"oriental\"],\n [\"1P 2m 3m 3M 4A 5P 7m\", \"flamenco\"],\n [\"1P 2m 3m 4A 5P 6m 7M\", \"todi raga\"],\n [\"1P 2m 3M 4P 5d 6m 7M\", \"persian\"],\n [\"1P 2m 3M 5d 6m 7m 7M\", \"enigmatic\"],\n [\n \"1P 2M 3M 4P 5A 6M 7M\",\n \"major augmented\",\n \"major #5\",\n \"ionian augmented\",\n \"ionian #5\",\n ],\n [\"1P 2A 3M 4A 5P 6M 7M\", \"lydian #9\"],\n\n // 8-note scales\n [\"1P 2m 2M 4P 4A 5P 6m 7M\", \"messiaen's mode #4\"],\n [\"1P 2m 3M 4P 4A 5P 6m 7M\", \"purvi raga\"],\n [\"1P 2m 3m 3M 4P 5P 6m 7m\", \"spanish heptatonic\"],\n [\"1P 2M 3m 3M 4P 5P 6M 7m\", \"bebop minor\"],\n [\"1P 2M 3M 4P 5P 5A 6M 7M\", \"bebop major\"],\n [\"1P 2m 3m 4P 5d 5P 6m 7m\", \"bebop locrian\"],\n [\"1P 2M 3m 4P 5P 6m 7m 7M\", \"minor bebop\"],\n [\"1P 2M 3M 4P 5d 5P 6M 7M\", \"ichikosucho\"],\n [\"1P 2M 3m 4P 5P 6m 6M 7M\", \"minor six diminished\"],\n [\n \"1P 2m 3m 3M 4A 5P 6M 7m\",\n \"half-whole diminished\",\n \"dominant diminished\",\n \"messiaen's mode #2\",\n ],\n [\"1P 3m 3M 4P 5P 6M 7m 7M\", \"kafi raga\"],\n [\"1P 2M 3M 4P 4A 5A 6A 7M\", \"messiaen's mode #6\"],\n\n // 9-note scales\n [\"1P 2M 3m 3M 4P 5d 5P 6M 7m\", \"composite blues\"],\n [\"1P 2M 3m 3M 4A 5P 6m 7m 7M\", \"messiaen's mode #3\"],\n\n // 10-note scales\n [\"1P 2m 2M 3m 4P 4A 5P 6m 6M 7M\", \"messiaen's mode #7\"],\n\n // 12-note scales\n [\"1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M\", \"chromatic\"],\n];\n\nexport default SCALES;\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA,OAAO;AAAA,OAIF;;;ACJP,IAAM,SAAqB;AAAA;AAAA,EAEzB,CAAC,kBAAkB,oBAAoB,YAAY;AAAA,EACnD,CAAC,wBAAwB,SAAS,QAAQ;AAAA,EAC1C,CAAC,wBAAwB,SAAS,SAAS;AAAA;AAAA,EAG3C,CAAC,qBAAqB,aAAa;AAAA,EACnC,CAAC,qBAAqB,eAAe,OAAO;AAAA,EAC5C,CAAC,wBAAwB,eAAe;AAAA,EACxC,CAAC,wBAAwB,gBAAgB;AAAA,EACzC,CAAC,2BAA2B,OAAO;AAAA,EACnC,CAAC,2BAA2B,cAAc,uBAAuB;AAAA;AAAA,EAGjE,CAAC,wBAAwB,QAAQ;AAAA,EACjC,CAAC,wBAAwB,QAAQ;AAAA,EACjC,CAAC,wBAAwB,cAAc,UAAU;AAAA,EACjD,CAAC,wBAAwB,UAAU;AAAA,EACnC,CAAC,wBAAwB,SAAS;AAAA;AAAA,EAGlC,CAAC,kBAAkB,mBAAmB;AAAA,EACtC,CAAC,kBAAkB,yBAAyB,QAAQ;AAAA,EACpD,CAAC,kBAAkB,SAAS;AAAA,EAC5B,CAAC,kBAAkB,UAAU;AAAA,EAC7B,CAAC,kBAAkB,6BAA6B;AAAA,EAChD,CAAC,kBAAkB,cAAc;AAAA,EACjC,CAAC,kBAAkB,OAAO;AAAA,EAC1B,CAAC,kBAAkB,YAAY;AAAA,EAC/B,CAAC,kBAAkB,WAAW;AAAA,EAC9B,CAAC,kBAAkB,OAAO;AAAA,EAC1B,CAAC,kBAAkB,QAAQ;AAAA,EAC3B,CAAC,kBAAkB,qBAAqB,SAAS;AAAA,EACjD,CAAC,kBAAkB,aAAa;AAAA,EAChC,CAAC,kBAAkB,sBAAsB,kCAAkC;AAAA,EAC3E,CAAC,kBAAkB,oBAAoB,cAAc;AAAA,EACrD,CAAC,kBAAkB,sBAAsB;AAAA,EACzC,CAAC,kBAAkB,yBAAyB,OAAO;AAAA,EACnD,CAAC,kBAAkB,qBAAqB;AAAA,EACxC,CAAC,kBAAkB,UAAU;AAAA,EAC7B,CAAC,kBAAkB,uBAAuB;AAAA,EAC1C,CAAC,kBAAkB,uBAAuB;AAAA,EAC1C,CAAC,kBAAkB,4BAA4B;AAAA,EAC/C,CAAC,kBAAkB,sBAAsB;AAAA,EACzC,CAAC,kBAAkB,0BAA0B;AAAA;AAAA,EAG7C,CAAC,qBAAqB,iBAAiB;AAAA,EACvC,CAAC,qBAAqB,WAAW;AAAA,EACjC,CAAC,qBAAqB,SAAS;AAAA,EAC/B,CAAC,qBAAqB,uBAAuB;AAAA,EAC7C,CAAC,qBAAqB,YAAY;AAAA,EAClC,CAAC,qBAAqB,YAAY;AAAA,EAClC,CAAC,qBAAqB,oBAAoB;AAAA,EAC1C,CAAC,qBAAqB,cAAc,oBAAoB;AAAA,EACxD,CAAC,qBAAqB,oBAAoB;AAAA;AAAA,EAG1C,CAAC,wBAAwB,iBAAiB,SAAS;AAAA,EACnD,CAAC,wBAAwB,wBAAwB;AAAA,EACjD;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,CAAC,wBAAwB,cAAc,mBAAmB,YAAY;AAAA,EACtE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,CAAC,wBAAwB,mBAAmB,aAAa,UAAU;AAAA,EACnE,CAAC,wBAAwB,kBAAkB;AAAA,EAC3C;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,CAAC,wBAAwB,aAAa,qBAAqB,iBAAiB;AAAA,EAC5E,CAAC,wBAAwB,sBAAsB;AAAA;AAAA,EAE/C;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,CAAC,wBAAwB,mBAAmB;AAAA,EAC5C,CAAC,wBAAwB,oBAAoB;AAAA,EAC7C,CAAC,wBAAwB,cAAc;AAAA,EACvC,CAAC,wBAAwB,qBAAqB,WAAW,gBAAgB;AAAA,EACzE,CAAC,wBAAwB,UAAU;AAAA,EACnC,CAAC,wBAAwB,kBAAkB;AAAA,EAC3C,CAAC,wBAAwB,gBAAgB;AAAA,EACzC,CAAC,wBAAwB,yBAAyB,OAAO;AAAA,EACzD,CAAC,wBAAwB,iBAAiB;AAAA,EAC1C,CAAC,wBAAwB,iBAAiB;AAAA,EAC1C,CAAC,wBAAwB,UAAU;AAAA,EACnC,CAAC,wBAAwB,UAAU;AAAA,EACnC,CAAC,wBAAwB,WAAW;AAAA,EACpC,CAAC,wBAAwB,SAAS;AAAA,EAClC,CAAC,wBAAwB,WAAW;AAAA,EACpC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,CAAC,wBAAwB,WAAW;AAAA;AAAA,EAGpC,CAAC,2BAA2B,oBAAoB;AAAA,EAChD,CAAC,2BAA2B,YAAY;AAAA,EACxC,CAAC,2BAA2B,oBAAoB;AAAA,EAChD,CAAC,2BAA2B,aAAa;AAAA,EACzC,CAAC,2BAA2B,aAAa;AAAA,EACzC,CAAC,2BAA2B,eAAe;AAAA,EAC3C,CAAC,2BAA2B,aAAa;AAAA,EACzC,CAAC,2BAA2B,aAAa;AAAA,EACzC,CAAC,2BAA2B,sBAAsB;AAAA,EAClD;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,CAAC,2BAA2B,WAAW;AAAA,EACvC,CAAC,2BAA2B,oBAAoB;AAAA;AAAA,EAGhD,CAAC,8BAA8B,iBAAiB;AAAA,EAChD,CAAC,8BAA8B,oBAAoB;AAAA;AAAA,EAGnD,CAAC,iCAAiC,oBAAoB;AAAA;AAAA,EAGtD,CAAC,uCAAuC,WAAW;AACrD;AAEA,IAAO,eAAQ;;;ADtIR,IAAM,cAAyB;AAAA,EACpC,GAAG;AAAA,EACH,WAAW,CAAC;AAAA,EACZ,SAAS,CAAC;AACZ;AAIA,IAAI,aAA0B,CAAC;AAC/B,IAAI,QAA0C,CAAC;AAExC,SAAS,QAAQ;AACtB,SAAO,WAAW,IAAI,CAAC,UAAU,MAAM,IAAI;AAC7C;AAUO,SAAS,IAAI,MAAgC;AAClD,SAAO,MAAM,IAAI,KAAK;AACxB;AAMO,IAAM,YAAY;AAKlB,SAAS,MAAM;AACpB,SAAO,WAAW,MAAM;AAC1B;AAMO,IAAM,UAAU;AAKhB,SAAS,OAAO;AACrB,SAAO,OAAO,KAAK,KAAK;AAC1B;AAKO,SAAS,YAAY;AAC1B,eAAa,CAAC;AACd,UAAQ,CAAC;AACX;AAQO,SAAS,IACd,WACA,MACA,UAAoB,CAAC,GACV;AACX,QAAM,QAAQ,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,WAAW,QAAQ;AAC9D,aAAW,KAAK,KAAK;AACrB,QAAM,MAAM,IAAI,IAAI;AACpB,QAAM,MAAM,MAAM,IAAI;AACtB,QAAM,MAAM,MAAM,IAAI;AACtB,QAAM,QAAQ,QAAQ,CAAC,UAAU,SAAS,OAAO,KAAK,CAAC;AACvD,SAAO;AACT;AAEO,SAAS,SAAS,OAAkB,OAAe;AACxD,QAAM,KAAK,IAAI;AACjB;AAEA,aAAK;AAAA,EAAQ,CAAC,CAAC,MAAM,MAAS,UAAO,MACnC,IAAI,KAAK,MAAM,GAAG,GAAG,MAAM,OAAO;AACpC;AAGA,IAAO,qBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AACF;","names":[]}