From 2ebe29807206bd8725f38e9a4ebcd292cff45640 Mon Sep 17 00:00:00 2001 From: Wiwi Kuan Date: Thu, 22 Jun 2023 20:30:49 +0800 Subject: [PATCH] Add files via upload update chord definitions. --- tonal.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tonal.min.js b/tonal.min.js index 9446826..a8a3bcd 100644 --- a/tonal.min.js +++ b/tonal.min.js @@ -1,2 +1,2 @@ -"use strict";var Tonal=(()=>{var ft=Object.defineProperty;var Xn=Object.getOwnPropertyDescriptor;var Qn=Object.getOwnPropertyNames;var Jn=Object.prototype.hasOwnProperty;var pt=(t,n)=>{for(var e in n)ft(t,e,{get:n[e],enumerable:!0})},Wn=(t,n,e,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of Qn(n))!Jn.call(t,o)&&o!==e&&ft(t,o,{get:()=>n[o],enumerable:!(r=Xn(n,o))||r.enumerable});return t};var Yn=t=>Wn(ft({},"__esModule",{value:!0}),t);var la={};pt(la,{AbcNotation:()=>nn,Array:()=>bt,Chord:()=>dn,ChordDictionary:()=>ca,ChordType:()=>Nt,Collection:()=>an,Core:()=>tt,DurationValue:()=>fn,Interval:()=>Mn,Key:()=>wn,Midi:()=>bn,Mode:()=>$n,Note:()=>Tn,PcSet:()=>sa,Pcset:()=>It,Progression:()=>kn,Range:()=>Gn,RomanNumeral:()=>En,Scale:()=>Un,ScaleDictionary:()=>ua,ScaleType:()=>jt,TimeSignature:()=>Kn,Tonal:()=>ma,accToAlt:()=>_,altToAcc:()=>E,coordToInterval:()=>G,coordToNote:()=>vt,decode:()=>Z,deprecate:()=>d,distance:()=>b,encode:()=>Y,fillStr:()=>$,interval:()=>l,isNamed:()=>k,isPitch:()=>q,note:()=>s,stepToLetter:()=>ht,tokenizeInterval:()=>yt,tokenizeNote:()=>H,tonicIntervalsTransposer:()=>D,transpose:()=>u});var tt={};pt(tt,{accToAlt:()=>_,altToAcc:()=>E,coordToInterval:()=>G,coordToNote:()=>vt,decode:()=>Z,deprecate:()=>d,distance:()=>b,encode:()=>Y,fillStr:()=>$,interval:()=>l,isNamed:()=>k,isPitch:()=>q,note:()=>s,stepToLetter:()=>ht,tokenizeInterval:()=>yt,tokenizeNote:()=>H,tonicIntervalsTransposer:()=>D,transpose:()=>u});var $=(t,n)=>Array(Math.abs(n)+1).join(t);function d(t,n,e){return function(...r){return console.warn(`${t} is deprecated. Use ${n}.`),e.apply(this,r)}}function k(t){return t!==null&&typeof t=="object"&&typeof t.name=="string"}function q(t){return t!==null&&typeof t=="object"&&typeof t.step=="number"&&typeof t.alt=="number"}var Xt=[0,2,4,-1,1,3,5],Qt=Xt.map(t=>Math.floor(t*7/12));function Y(t){let{step:n,alt:e,oct:r,dir:o=1}=t,a=Xt[n]+7*e;if(r===void 0)return[o*a];let i=r-Qt[n]-4*e;return[o*a,o*i]}var Zn=[3,0,4,1,5,2,6];function Z(t){let[n,e,r]=t,o=Zn[te(n)],a=Math.floor((n+1)/7);if(e===void 0)return{step:o,alt:a,dir:r};let i=e+4*a+Qt[o];return{step:o,alt:a,oct:i,dir:r}}function te(t){let n=(t+1)%7;return n<0?7+n:n}var Jt={empty:!0,name:"",pc:"",acc:""},Ut=new Map,ht=t=>"CDEFGAB".charAt(t),E=t=>t<0?$("b",-t):$("#",t),_=t=>t[0]==="b"?-t.length:t.length;function s(t){let n=JSON.stringify(t),e=Ut.get(n);if(e)return e;let r=typeof t=="string"?re(t):q(t)?s(oe(t)):k(t)?s(t.name):Jt;return Ut.set(n,r),r}var ne=/^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/;function H(t){let n=ne.exec(t);return[n[1].toUpperCase(),n[2].replace(/x/g,"##"),n[3],n[4]]}function vt(t){return s(Z(t))}var ee=(t,n)=>(t%n+n)%n,Pt=[0,2,4,5,7,9,11];function re(t){let n=H(t);if(n[0]===""||n[3]!=="")return Jt;let e=n[0],r=n[1],o=n[2],a=(e.charCodeAt(0)+3)%7,i=_(r),m=o.length?+o:void 0,c=Y({step:a,alt:i,oct:m}),P=e+r+o,h=e+r,j=(Pt[a]+i+120)%12,f=m===void 0?ee(Pt[a]+i,12)-12*99:Pt[a]+i+12*(m+1),x=f>=0&&f<=127?f:null,C=m===void 0?null:Math.pow(2,(f-69)/12)*440;return{empty:!1,acc:r,alt:i,chroma:j,coord:c,freq:C,height:f,letter:e,midi:x,name:P,oct:m,pc:h,step:a}}function oe(t){let{step:n,alt:e,oct:r}=t,o=ht(n);if(!o)return"";let a=o+E(e);return r||r===0?a+r:a}var Mt={empty:!0,name:"",acc:""},ae="([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})",ie="(AA|A|P|M|m|d|dd)([-+]?\\d+)",me=new RegExp("^"+ae+"|"+ie+"$");function yt(t){let n=me.exec(`${t}`);return n===null?["",""]:n[1]?[n[1],n[2]]:[n[4],n[3]]}var Ht={};function l(t){return typeof t=="string"?Ht[t]||(Ht[t]=se(t)):q(t)?l(ue(t)):k(t)?l(t.name):Mt}var Kt=[0,2,4,5,7,9,11],Wt="PMMPPMM";function se(t){let n=yt(t);if(n[0]==="")return Mt;let e=+n[0],r=n[1],o=(Math.abs(e)-1)%7,a=Wt[o];if(a==="M"&&r==="P")return Mt;let i=a==="M"?"majorable":"perfectable",m=""+e+r,c=e<0?-1:1,P=e===8||e===-8?e:c*(o+1),h=ce(i,r),j=Math.floor((Math.abs(e)-1)/7),f=c*(Kt[o]+h+12*j),x=(c*(Kt[o]+h)%12+12)%12,C=Y({step:o,alt:h,oct:j,dir:c});return{empty:!1,name:m,num:e,q:r,step:o,alt:h,dir:c,type:i,simple:P,semitones:f,chroma:x,coord:C,oct:j}}function G(t,n){let[e,r=0]=t,o=e*7+r*12<0,a=n||o?[-e,-r,-1]:[e,r,1];return l(Z(a))}function ce(t,n){return n==="M"&&t==="majorable"||n==="P"&&t==="perfectable"?0:n==="m"&&t==="majorable"?-1:/^A+$/.test(n)?n.length:/^d+$/.test(n)?-1*(t==="perfectable"?n.length:n.length+1):0}function ue(t){let{step:n,alt:e,oct:r=0,dir:o}=t;if(!o)return"";let a=n+1+7*r,i=a===0?n+1:a,m=o<0?"-":"",c=Wt[n]==="M"?"majorable":"perfectable";return m+i+le(c,e)}function le(t,n){return n===0?t==="majorable"?"M":"P":n===-1&&t==="majorable"?"m":n>0?$("A",n):$("d",t==="perfectable"?n:n+1)}function u(t,n){let e=s(t),r=Array.isArray(n)?n:l(n).coord;if(e.empty||!r||r.length<2)return"";let o=e.coord,a=o.length===1?[o[0]+r[0]]:[o[0]+r[0],o[1]+r[1]];return vt(a).name}function D(t,n){let e=t.length;return r=>{if(!n)return"";let o=r<0?(e- -r%e)%e:r%e,a=Math.floor(r/e),i=u(n,[0,a]);return u(i,t[o])}}function b(t,n){let e=s(t),r=s(n);if(e.empty||r.empty)return"";let o=e.coord,a=r.coord,i=a[0]-o[0],m=o.length===2&&a.length===2?a[1]-o[1]:-Math.floor(i*7/12),c=r.height===e.height&&r.midi!==null&&e.midi!==null&&e.step>r.step;return G([i,m],c).name}var Yt=(t,n)=>Array(n+1).join(t),de=/^(_{1,}|=|\^{1,}|)([abcdefgABCDEFG])([,']*)$/;function Zt(t){let n=de.exec(t);return n?[n[1],n[2],n[3]]:["","",""]}function nt(t){let[n,e,r]=Zt(t);if(e==="")return"";let o=4;for(let i=0;i96?e.toUpperCase()+a+(o+1):e+a+o}function tn(t){let n=s(t);if(n.empty||!n.oct&&n.oct!==0)return"";let{letter:e,acc:r,oct:o}=n,a=r[0]==="b"?r.replace(/b/g,"_"):r.replace(/#/g,"^"),i=o>4?e.toLowerCase():e,m=o===5?"":o>4?Yt("'",o-5):Yt(",",4-o);return a+i+m}function fe(t,n){return tn(u(nt(t),n))}function pe(t,n){return b(nt(t),nt(n))}var nn={abcToScientificNotation:nt,scientificToAbcNotation:tn,tokenize:Zt,transpose:fe,distance:pe};var bt={};pt(bt,{compact:()=>ye,permutations:()=>rn,range:()=>he,rotate:()=>ve,shuffle:()=>Ae,sortedNoteNames:()=>en,sortedUniqNoteNames:()=>be});var Ma=Array.isArray;function Pe(t,n){let e=[];for(;n--;e[n]=n+t);return e}function Me(t,n){let e=[];for(;n--;e[n]=t-n);return e}function he(t,n){return tn===0||n)}function en(t){return t.map(e=>s(e)).filter(e=>!e.empty).sort((e,r)=>e.height-r.height).map(e=>e.name)}function be(t){return en(t).filter((n,e,r)=>e===0||n!==r[e-1])}function Ae(t,n=Math.random){let e,r,o=t.length;for(;o;)e=Math.floor(n()*o--),r=t[o],t[o]=t[e],t[e]=r;return t}function rn(t){return t.length===0?[[]]:rn(t.slice(1)).reduce((n,e)=>n.concat(t.map((r,o)=>{let a=e.slice();return a.splice(o,0,t[0]),a})),[])}function ge(t,n){let e=[];for(;n--;e[n]=n+t);return e}function Ie(t,n){let e=[];for(;n--;e[n]=t-n);return e}function w(t,n){return tn===0||n)}function Ne(t,n=Math.random){let e,r,o=t.length;for(;o;)e=Math.floor(n()*o--),r=t[o],t[o]=t[e],t[e]=r;return t}function on(t){return t.length===0?[[]]:on(t.slice(1)).reduce((n,e)=>n.concat(t.map((r,o)=>{let a=e.slice();return a.splice(o,0,t[0]),a})),[])}var an={compact:K,permutations:on,range:w,rotate:N,shuffle:Ne};var A={empty:!0,name:"",setNum:0,chroma:"000000000000",normalized:"000000000000",intervals:[]},At=t=>Number(t).toString(2).padStart(12,"0"),mn=t=>parseInt(t,2),Se=/^[01]{12}$/;function et(t){return Se.test(t)}var Te=t=>typeof t=="number"&&t>=0&&t<=4095,je=t=>t&&et(t.chroma),sn={[A.chroma]:A};function p(t){let n=et(t)?t:Te(t)?At(t):Array.isArray(t)?$e(t):je(t)?t.chroma:A.chroma;return sn[n]=sn[n]||Re(n)}var xe=d("Pcset.pcset","Pcset.get",p),gt=t=>p(t).chroma,Ce=t=>p(t).intervals,Ee=t=>p(t).setNum,De=["1P","2m","2M","3m","3M","4P","5d","5P","6m","6M","7m","7M"];function _e(t){let n=[];for(let e=0;e<12;e++)t.charAt(e)==="1"&&n.push(De[e]);return n}function we(){return w(2048,4095).map(At)}function X(t,n=!0){let r=p(t).chroma.split("");return K(r.map((o,a)=>{let i=N(a,r);return n&&i[0]==="0"?null:i.join("")}))}function Fe(t,n){return p(t).setNum===p(n).setNum}function L(t){let n=p(t).setNum;return e=>{let r=p(e).setNum;return n&&n!==r&&(r&n)===r}}function B(t){let n=p(t).setNum;return e=>{let r=p(e).setNum;return n&&n!==r&&(r|n)===r}}function cn(t){let n=p(t);return e=>{let r=s(e);return n&&!r.empty&&n.chroma.charAt(r.chroma)==="1"}}function Ve(t){let n=cn(t);return e=>e.filter(n)}var It={get:p,chroma:gt,num:Ee,intervals:Ce,chromas:we,isSupersetOf:B,isSubsetOf:L,isNoteIncludedIn:cn,isEqual:Fe,filter:Ve,modes:X,pcset:xe};function Oe(t){let n=t.split("");return n.map((e,r)=>N(r,n).join(""))}function Re(t){let n=mn(t),e=Oe(t).map(mn).filter(a=>a>=2048).sort()[0],r=At(e),o=_e(t);return{empty:!1,name:"",setNum:n,chroma:t,normalized:r,intervals:o}}function $e(t){if(t.length===0)return A.chroma;let n,e=[0,0,0,0,0,0,0,0,0,0,0,0];for(let r=0;rt.name).filter(t=>t)}function ze(){return z.map(t=>t.aliases[0]).filter(t=>t)}function Ue(){return Object.keys(F)}function S(){return z.slice()}var He=d("ChordType.entries","ChordType.all",S);function Ke(){z=[],F={}}function un(t,n,e){let r=Qe(t),o={...p(t),name:e||"",quality:r,intervals:t,aliases:n};z.push(o),o.name&&(F[o.name]=o),F[o.setNum]=o,F[o.chroma]=o,o.aliases.forEach(a=>Xe(o,a))}function Xe(t,n){F[n]=t}function Qe(t){let n=e=>t.indexOf(e)!==-1;return n("5A")?"Augmented":n("3M")?"Major":n("5d")?"Diminished":n("3m")?"Minor":"Unknown"}qe.forEach(([t,n,e])=>un(t.split(" "),e.split(" "),n));z.sort((t,n)=>t.setNum-n.setNum);var Nt={names:Be,symbols:ze,get:rt,all:S,add:un,removeAll:Ke,keys:Ue,entries:He,chordType:Le};var Je=t=>{let n=t.reduce((e,r)=>{let o=s(r).chroma;return o!==void 0&&(e[o]=e[o]||s(r).name),e},{});return e=>n[e]};function St(t,n={}){let e=t.map(o=>s(o).pc).filter(o=>o);return s.length===0?[]:rr(e,1,n).filter(o=>o.weight).sort((o,a)=>a.weight-o.weight).map(o=>o.name)}var ot={anyThirds:384,perfectFifth:16,nonPerfectFifths:40,anySeventh:3},at=t=>n=>!!(n&t),We=at(ot.anyThirds),Ye=at(ot.perfectFifth),Ze=at(ot.anySeventh),tr=at(ot.nonPerfectFifths);function nr(t){let n=parseInt(t.chroma,2);return We(n)&&Ye(n)&&Ze(n)}function er(t){let n=parseInt(t,2);return tr(n)?t:(n|16).toString(2)}function rr(t,n,e){let r=t[0],o=s(r).chroma,a=Je(t),i=X(t,!1),m=[];return i.forEach((c,P)=>{let h=e.assumePerfectFifth&&er(c);S().filter(f=>e.assumePerfectFifth&&nr(f)?f.chroma===h:f.chroma===c).forEach(f=>{let x=f.aliases[0],C=a(P);P!==o?m.push({weight:.5*n,name:`${C}${x}/${r}`}):m.push({weight:1*n,name:`${C}${x}`})})}),m}var or=[["1P 2M 3M 5P 6M","major pentatonic","pentatonic"],["1P 2M 3M 4P 5P 6M 7M","major","ionian"],["1P 2M 3m 4P 5P 6m 7m","minor","aeolian"],["1P 2M 3m 3M 5P 6M","major blues"],["1P 3m 4P 5d 5P 7m","minor blues","blues"],["1P 2M 3m 4P 5P 6M 7M","melodic minor"],["1P 2M 3m 4P 5P 6m 7M","harmonic minor"],["1P 2M 3M 4P 5P 6M 7m 7M","bebop"],["1P 2M 3m 4P 5d 6m 6M 7M","diminished","whole-half diminished"],["1P 2M 3m 4P 5P 6M 7m","dorian"],["1P 2M 3M 4A 5P 6M 7M","lydian"],["1P 2M 3M 4P 5P 6M 7m","mixolydian","dominant"],["1P 2m 3m 4P 5P 6m 7m","phrygian"],["1P 2m 3m 4P 5d 6m 7m","locrian"],["1P 3M 4P 5P 7M","ionian pentatonic"],["1P 3M 4P 5P 7m","mixolydian pentatonic","indian"],["1P 2M 4P 5P 6M","ritusen"],["1P 2M 4P 5P 7m","egyptian"],["1P 3M 4P 5d 7m","neopolitan major pentatonic"],["1P 3m 4P 5P 6m","vietnamese 1"],["1P 2m 3m 5P 6m","pelog"],["1P 2m 4P 5P 6m","kumoijoshi"],["1P 2M 3m 5P 6m","hirajoshi"],["1P 2m 4P 5d 7m","iwato"],["1P 2m 4P 5P 7m","in-sen"],["1P 3M 4A 5P 7M","lydian pentatonic","chinese"],["1P 3m 4P 6m 7m","malkos raga"],["1P 3m 4P 5d 7m","locrian pentatonic","minor seven flat five pentatonic"],["1P 3m 4P 5P 7m","minor pentatonic","vietnamese 2"],["1P 3m 4P 5P 6M","minor six pentatonic"],["1P 2M 3m 5P 6M","flat three pentatonic","kumoi"],["1P 2M 3M 5P 6m","flat six pentatonic"],["1P 2m 3M 5P 6M","scriabin"],["1P 3M 5d 6m 7m","whole tone pentatonic"],["1P 3M 4A 5A 7M","lydian #5P pentatonic"],["1P 3M 4A 5P 7m","lydian dominant pentatonic"],["1P 3m 4P 5P 7M","minor #7M pentatonic"],["1P 3m 4d 5d 7m","super locrian pentatonic"],["1P 2M 3m 4P 5P 7M","minor hexatonic"],["1P 2A 3M 5P 5A 7M","augmented"],["1P 2M 4P 5P 6M 7m","piongio"],["1P 2m 3M 4A 6M 7m","prometheus neopolitan"],["1P 2M 3M 4A 6M 7m","prometheus"],["1P 2m 3M 5d 6m 7m","mystery #1"],["1P 2m 3M 4P 5A 6M","six tone symmetric"],["1P 2M 3M 4A 5A 6A","whole tone","messiaen's mode #1"],["1P 2m 4P 4A 5P 7M","messiaen's mode #5"],["1P 2M 3M 4P 5d 6m 7m","locrian major","arabian"],["1P 2m 3M 4A 5P 6m 7M","double harmonic lydian"],["1P 2m 2A 3M 4A 6m 7m","altered","super locrian","diminished whole tone","pomeroy"],["1P 2M 3m 4P 5d 6m 7m","locrian #2","half-diminished","aeolian b5"],["1P 2M 3M 4P 5P 6m 7m","mixolydian b6","melodic minor fifth mode","hindu"],["1P 2M 3M 4A 5P 6M 7m","lydian dominant","lydian b7","overtone"],["1P 2M 3M 4A 5A 6M 7M","lydian augmented"],["1P 2m 3m 4P 5P 6M 7m","dorian b2","phrygian #6","melodic minor second mode"],["1P 2m 3m 4d 5d 6m 7d","ultralocrian","superlocrian bb7","superlocrian diminished"],["1P 2m 3m 4P 5d 6M 7m","locrian 6","locrian natural 6","locrian sharp 6"],["1P 2A 3M 4P 5P 5A 7M","augmented heptatonic"],["1P 2M 3m 4A 5P 6M 7m","dorian #4","ukrainian dorian","romanian minor","altered dorian"],["1P 2M 3m 4A 5P 6M 7M","lydian diminished"],["1P 2M 3M 4A 5A 7m 7M","leading whole tone"],["1P 2M 3M 4A 5P 6m 7m","lydian minor"],["1P 2m 3M 4P 5P 6m 7m","phrygian dominant","spanish","phrygian major"],["1P 2m 3m 4P 5P 6m 7M","balinese"],["1P 2m 3m 4P 5P 6M 7M","neopolitan major"],["1P 2M 3M 4P 5P 6m 7M","harmonic major"],["1P 2m 3M 4P 5P 6m 7M","double harmonic major","gypsy"],["1P 2M 3m 4A 5P 6m 7M","hungarian minor"],["1P 2A 3M 4A 5P 6M 7m","hungarian major"],["1P 2m 3M 4P 5d 6M 7m","oriental"],["1P 2m 3m 3M 4A 5P 7m","flamenco"],["1P 2m 3m 4A 5P 6m 7M","todi raga"],["1P 2m 3M 4P 5d 6m 7M","persian"],["1P 2m 3M 5d 6m 7m 7M","enigmatic"],["1P 2M 3M 4P 5A 6M 7M","major augmented","major #5","ionian augmented","ionian #5"],["1P 2A 3M 4A 5P 6M 7M","lydian #9"],["1P 2m 2M 4P 4A 5P 6m 7M","messiaen's mode #4"],["1P 2m 3M 4P 4A 5P 6m 7M","purvi raga"],["1P 2m 3m 3M 4P 5P 6m 7m","spanish heptatonic"],["1P 2M 3m 3M 4P 5P 6M 7m","bebop minor"],["1P 2M 3M 4P 5P 5A 6M 7M","bebop major"],["1P 2m 3m 4P 5d 5P 6m 7m","bebop locrian"],["1P 2M 3m 4P 5P 6m 7m 7M","minor bebop"],["1P 2M 3M 4P 5d 5P 6M 7M","ichikosucho"],["1P 2M 3m 4P 5P 6m 6M 7M","minor six diminished"],["1P 2m 3m 3M 4A 5P 6M 7m","half-whole diminished","dominant diminished","messiaen's mode #2"],["1P 3m 3M 4P 5P 6M 7m 7M","kafi raga"],["1P 2M 3M 4P 4A 5A 6A 7M","messiaen's mode #6"],["1P 2M 3m 3M 4P 5d 5P 6M 7m","composite blues"],["1P 2M 3m 3M 4A 5P 6m 7m 7M","messiaen's mode #3"],["1P 2m 2M 3m 4P 4A 5P 6m 6M 7M","messiaen's mode #7"],["1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M","chromatic"]],ar=or,ir={...A,intervals:[],aliases:[]},it=[],V={};function Tt(){return it.map(t=>t.name)}function U(t){return V[t]||ir}var mr=d("ScaleDictionary.scaleType","ScaleType.get",U);function T(){return it.slice()}var sr=d("ScaleDictionary.entries","ScaleType.all",T);function cr(){return Object.keys(V)}function ur(){it=[],V={}}function ln(t,n,e=[]){let r={...p(t),name:n,intervals:t,aliases:e};return it.push(r),V[r.name]=r,V[r.setNum]=r,V[r.chroma]=r,r.aliases.forEach(o=>lr(r,o)),r}function lr(t,n){V[n]=t}ar.forEach(([t,n,...e])=>ln(t.split(" "),n,e));var jt={names:Tt,get:U,all:T,add:ln,removeAll:ur,keys:cr,entries:sr,scaleType:mr};var xt={empty:!0,name:"",symbol:"",root:"",rootDegree:0,type:"",tonic:null,setNum:NaN,quality:"Unknown",chroma:"",normalized:"",aliases:[],notes:[],intervals:[]};function Q(t){let[n,e,r,o]=H(t);return n===""?["",t]:n==="A"&&o==="ug"?["","aug"]:[n+e,r+o]}function O(t){if(t==="")return xt;if(Array.isArray(t)&&t.length===2)return mt(t[1],t[0]);{let[n,e]=Q(t),r=mt(e,n);return r.empty?mt(t):r}}function mt(t,n,e){let r=rt(t),o=s(n||""),a=s(e||"");if(r.empty||n&&o.empty||e&&a.empty)return xt;let i=b(o.pc,a.pc),m=r.intervals.indexOf(i)+1;if(!a.empty&&!m)return xt;let c=Array.from(r.intervals);for(let f=1;fu(o,f));t=r.aliases.indexOf(t)!==-1?t:r.aliases[0];let h=`${o.empty?"":o.pc}${t}${a.empty||m<=1?"":"/"+a.pc}`,j=`${n?o.pc+" ":""}${r.name}${m>1&&e?" over "+a.pc:""}`;return{...r,name:j,symbol:h,type:r.name,root:a.name,intervals:c,rootDegree:m,tonic:o.name,notes:P}}var dr=d("Chord.chord","Chord.get",O);function fr(t,n){let[e,r]=Q(t);return e?u(e,n)+r:t}function pr(t){let n=O(t),e=B(n.chroma);return T().filter(r=>e(r.chroma)).map(r=>r.name)}function Pr(t){let n=O(t),e=B(n.chroma);return S().filter(r=>e(r.chroma)).map(r=>n.tonic+r.aliases[0])}function Mr(t){let n=O(t),e=L(n.chroma);return S().filter(r=>e(r.chroma)).map(r=>n.tonic+r.aliases[0])}function hr(t){let{intervals:n,tonic:e}=O(t),r=D(n,e);return o=>o?r(o>0?o-1:o):""}function vr(t){let{intervals:n,tonic:e}=O(t);return D(n,e)}var dn={getChord:mt,get:O,detect:St,chordScales:pr,extended:Pr,reduced:Mr,tokenize:Q,transpose:fr,degrees:hr,steps:vr,chord:dr};var yr=[[.125,"dl",["large","duplex longa","maxima","octuple","octuple whole"]],[.25,"l",["long","longa"]],[.5,"d",["double whole","double","breve"]],[1,"w",["whole","semibreve"]],[2,"h",["half","minim"]],[4,"q",["quarter","crotchet"]],[8,"e",["eighth","quaver"]],[16,"s",["sixteenth","semiquaver"]],[32,"t",["thirty-second","demisemiquaver"]],[64,"sf",["sixty-fourth","hemidemisemiquaver"]],[128,"h",["hundred twenty-eighth"]],[256,"th",["two hundred fifty-sixth"]]],br=yr,st=[];br.forEach(([t,n,e])=>jr(t,n,e));var Ar={empty:!0,name:"",value:0,fraction:[0,0],shorthand:"",dots:"",names:[]};function gr(){return st.reduce((t,n)=>(n.names.forEach(e=>t.push(e)),t),[])}function Ir(){return st.map(t=>t.shorthand)}var Nr=/^([^.]+)(\.*)$/;function Ct(t){let[n,e,r]=Nr.exec(t)||[],o=st.find(m=>m.shorthand===e||m.names.includes(e));if(!o)return Ar;let a=xr(o.fraction,r.length),i=a[0]/a[1];return{...o,name:t,dots:r,value:i,fraction:a}}var Sr=t=>Ct(t).value,Tr=t=>Ct(t).fraction,fn={names:gr,shorthands:Ir,get:Ct,value:Sr,fraction:Tr};function jr(t,n,e){st.push({empty:!1,dots:"",name:"",value:1/t,fraction:t<1?[1/t,1]:[1,t],shorthand:n,names:e})}function xr(t,n){let e=Math.pow(2,n),r=t[0]*e,o=t[1]*e,a=r;for(let i=0;il(t).name,Dr=t=>l(t).semitones,_r=t=>l(t).q,wr=t=>l(t).num;function Et(t){let n=l(t);return n.empty?"":n.simple+n.q}function Fr(t){let n=l(t);if(n.empty)return"";let e=(7-n.step)%7,r=n.type==="perfectable"?-n.alt:-(n.alt+1);return l({step:e,alt:r,oct:n.oct,dir:n.dir}).name}var Vr=[1,2,2,3,3,4,5,5,6,6,7,7],Or="P m M m M P d P m M m M".split(" ");function Rr(t){let n=t<0?-1:1,e=Math.abs(t),r=e%12,o=Math.floor(e/12);return n*(Vr[r]+7*o)+Or[r]}var $r=b,Pn=hn((t,n)=>[t[0]+n[0],t[1]+n[1]]),kr=t=>n=>Pn(t,n),qr=hn((t,n)=>[t[0]-n[0],t[1]-n[1]]);function Dt(t,n){let e=pn(t);if(e.empty)return"";let[r,o,a]=e.coord;return G([r+n,o,a]).name}var Mn={names:Cr,get:pn,name:Er,num:wr,semitones:Dr,quality:_r,fromSemitones:Rr,distance:$r,invert:Fr,simplify:Et,add:Pn,addTo:kr,substract:qr,transposeFifths:Dt};function hn(t){return(n,e)=>{let r=l(n).coord,o=l(e).coord;if(r&&o){let a=t(r,o);return G(a).name}}}function vn(t){return+t>=0&&+t<=127}function _t(t){if(vn(t))return+t;let n=s(t);return n.empty?null:n.midi}function Gr(t,n=440){return Math.pow(2,(t-69)/12)*n}var Lr=Math.log(2),Br=Math.log(440);function ct(t){let n=12*(Math.log(t)-Br)/Lr+69;return Math.round(n*100)/100}var zr="C C# D D# E F F# G G# A A# B".split(" "),Ur="C Db D Eb E F Gb G Ab A Bb B".split(" ");function g(t,n={}){if(isNaN(t)||t===-1/0||t===1/0)return"";t=Math.round(t);let r=(n.sharps===!0?zr:Ur)[t%12];if(n.pitchClass)return r;let o=Math.floor(t/12)-1;return r+o}function wt(t){return t%12}function Hr(t){return t.split("").reduce((n,e,r)=>(r<12&&e==="1"&&n.push(r),n),[])}function Kr(t){return t.map(wt).sort((n,e)=>n-e).filter((n,e,r)=>e===0||n!==r[e-1])}function Ft(t){return Array.isArray(t)?Kr(t):Hr(t)}function Xr(t){let n=Ft(t);return e=>{let r=wt(e);for(let o=0;o<12;o++){if(n.includes(r+o))return e+o;if(n.includes(r-o))return e-o}}}function yn(t,n){let e=Ft(t),r=e.length;return o=>{let a=o<0?(r- -o%r)%r:o%r,i=Math.floor(o/r);return e[a]+i*12+n}}function Qr(t,n){let e=yn(t,n);return r=>{if(r!==0)return e(r>0?r-1:r)}}var bn={chroma:wt,freqToMidi:ct,isMidi:vn,midiToFreq:Gr,midiToNoteName:g,pcsetNearest:Xr,pcset:Ft,pcsetDegrees:Qr,pcsetSteps:yn,toMidi:_t};var Jr=["C","D","E","F","G","A","B"],An=t=>t.name,gn=t=>t.map(s).filter(n=>!n.empty);function Wr(t){return t===void 0?Jr.slice():Array.isArray(t)?gn(t).map(An):[]}var v=s,Yr=t=>v(t).name,Zr=t=>v(t).pc,to=t=>v(t).acc,no=t=>v(t).oct,eo=t=>v(t).midi,ro=t=>v(t).freq,oo=t=>v(t).chroma;function Vt(t){return g(t)}function ao(t){return g(ct(t))}function io(t){return g(ct(t),{sharps:!0})}function mo(t){return g(t,{sharps:!0})}var J=u,so=u,In=t=>n=>J(n,t),co=In,Nn=t=>n=>J(t,n),uo=Nn;function W(t,n){return J(t,[n,0])}var lo=W;function fo(t,n){return J(t,[0,n])}var Ot=(t,n)=>t.height-n.height,po=(t,n)=>n.height-t.height;function Sn(t,n){return n=n||Ot,gn(t).sort(n).map(An)}function Rt(t){return Sn(t,Ot).filter((n,e,r)=>e===0||n!==r[e-1])}var Po=t=>{let n=v(t);return n.empty?"":g(n.midi||n.chroma,{sharps:n.alt>0,pitchClass:n.midi===null})};function $t(t,n){let e=v(t);if(e.empty)return"";let r=v(n||g(e.midi||e.chroma,{sharps:e.alt<0,pitchClass:!0}));if(r.empty||r.chroma!==e.chroma)return"";if(e.oct===void 0)return r.pc;let o=e.chroma-e.alt,a=r.chroma-r.alt,i=o>11||a<0?-1:o<0||a>11?1:0,m=e.oct+i;return r.pc+m}var Tn={names:Wr,get:v,name:Yr,pitchClass:Zr,accidentals:to,octave:no,midi:eo,ascending:Ot,descending:po,sortedNames:Sn,sortedUniqNames:Rt,fromMidi:Vt,fromMidiSharps:mo,freq:ro,fromFreq:ao,fromFreqSharps:io,chroma:oo,transpose:J,tr:so,transposeBy:In,trBy:co,transposeFrom:Nn,trFrom:uo,transposeFifths:W,transposeOctaves:fo,trFifths:lo,simplify:Po,enharmonic:$t};var xn={empty:!0,name:"",chordType:""},jn={};function y(t){return typeof t=="string"?jn[t]||(jn[t]=go(t)):typeof t=="number"?y(ut[t]||""):q(t)?vo(t):k(t)?y(t.name):xn}var Mo=d("RomanNumeral.romanNumeral","RomanNumeral.get",y);function ho(t=!0){return(t?ut:Ao).slice()}function vo(t){return y(E(t.alt)+ut[t.step])}var yo=/^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/;function bo(t){return yo.exec(t)||["","","",""]}var Cn="I II III IV V VI VII",ut=Cn.split(" "),Ao=Cn.toLowerCase().split(" ");function go(t){let[n,e,r,o]=bo(t);if(!r)return xn;let a=r.toUpperCase(),i=ut.indexOf(a),m=_(e),c=1;return{empty:!1,name:n,roman:r,interval:l({step:i,alt:m,dir:c}).name,acc:e,chordType:o,alt:m,step:i,major:r===a,oct:0,dir:c}}var En={names:ho,get:y,romanNumeral:Mo};var M=Object.freeze([]),Dn={type:"major",tonic:"",alteration:0,keySignature:""},lt={tonic:"",grades:M,intervals:M,scale:M,triads:M,chords:M,chordsHarmonicFunction:M,chordScales:M},Io={...Dn,...lt,type:"major",minorRelative:"",scale:M,secondaryDominants:M,secondaryDominantsMinorRelative:M,substituteDominants:M,substituteDominantsMinorRelative:M},No={...Dn,type:"minor",relativeMajor:"",natural:lt,harmonic:lt,melodic:lt},kt=(t,n,e="")=>n.map((r,o)=>`${t[o]}${e}${r}`);function dt(t,n,e,r,o){return a=>{let i=t.map(c=>y(c).interval||""),m=i.map(c=>u(a,c));return{tonic:a,grades:t,intervals:i,scale:m,triads:kt(m,n),chords:kt(m,e),chordsHarmonicFunction:r.slice(),chordScales:kt(m,o," ")}}}var _n=(t,n)=>{let e=s(t),r=s(n);return e.empty||r.empty?0:r.coord[0]-e.coord[0]},So=dt("I II III IV V VI VII".split(" ")," m m m dim".split(" "),"maj7 m7 m7 maj7 7 m7 m7b5".split(" "),"T SD T SD D T D".split(" "),"major,dorian,phrygian,lydian,mixolydian,minor,locrian".split(",")),To=dt("I II bIII IV V bVI bVII".split(" "),"m dim m m ".split(" "),"m7 m7b5 maj7 m7 m7 maj7 7".split(" "),"T SD T SD D SD SD".split(" "),"minor,locrian,major,dorian,phrygian,lydian,mixolydian".split(",")),jo=dt("I II bIII IV V bVI VII".split(" "),"m dim aug m dim".split(" "),"mMaj7 m7b5 +maj7 m7 7 maj7 o7".split(" "),"T SD T SD D SD D".split(" "),"harmonic minor,locrian 6,major augmented,lydian diminished,phrygian dominant,lydian #9,ultralocrian".split(",")),xo=dt("I II bIII IV V VI VII".split(" "),"m m aug dim dim".split(" "),"m6 m7 +maj7 7 7 m7b5 m7b5".split(" "),"T SD T SD D ".split(" "),"melodic minor,dorian b2,lydian augmented,lydian dominant,mixolydian b6,locrian #2,altered".split(","));function Co(t){let n=s(t).pc;if(!n)return Io;let e=So(n),r=_n("C",n),o=a=>{let i=y(a);return i.empty?"":u(t,i.interval)+i.chordType};return{...e,type:"major",minorRelative:u(n,"-3m"),alteration:r,keySignature:E(r),secondaryDominants:"- VI7 VII7 I7 II7 III7 -".split(" ").map(o),secondaryDominantsMinorRelative:"- IIIm7b5 IV#m7 Vm7 VIm7 VIIm7b5 -".split(" ").map(o),substituteDominants:"- bIII7 IV7 bV7 bVI7 bVII7 -".split(" ").map(o),substituteDominantsMinorRelative:"- IIIm7 Im7 IIbm7 VIm7 IVm7 -".split(" ").map(o)}}function Eo(t){let n=s(t).pc;if(!n)return No;let e=_n("C",n)-3;return{type:"minor",tonic:n,relativeMajor:u(n,"3m"),alteration:e,keySignature:E(e),natural:To(n),harmonic:jo(n),melodic:xo(n)}}function Do(t){return typeof t=="number"?W("C",t):typeof t=="string"&&/^b+|#+$/.test(t)?W("C",_(t)):null}var wn={majorKey:Co,majorTonicFromKeySignature:Do,minorKey:Eo};var Gt=[[0,2773,0,"ionian","","Maj7","major"],[1,2902,2,"dorian","m","m7"],[2,3418,4,"phrygian","m","m7"],[3,2741,-1,"lydian","","Maj7"],[4,2774,1,"mixolydian","","7"],[5,2906,3,"aeolian","m","m7","minor"],[6,3434,5,"locrian","dim","m7b5"]],Fn={...A,name:"",alt:0,modeNum:NaN,triad:"",seventh:"",aliases:[]},Lt=Gt.map(Vo),qt={};Lt.forEach(t=>{qt[t.name]=t,t.aliases.forEach(n=>{qt[n]=t})});function R(t){return typeof t=="string"?qt[t.toLowerCase()]||Fn:t&&t.name?R(t.name):Fn}var _o=d("Mode.mode","Mode.get",R);function Vn(){return Lt.slice()}var wo=d("Mode.mode","Mode.all",Vn);function Fo(){return Lt.map(t=>t.name)}function Vo(t){let[n,e,r,o,a,i,m]=t,c=m?[m]:[],P=Number(e).toString(2);return{empty:!1,intervals:U(o).intervals,modeNum:n,chroma:P,normalized:P,name:o,setNum:e,alt:r,triad:a,seventh:i,aliases:c}}function Oo(t,n){return R(t).intervals.map(e=>u(n,e))}function On(t){return(n,e)=>{let r=R(n);if(r.empty)return[];let o=N(r.modeNum,t),a=r.intervals.map(i=>u(e,i));return o.map((i,m)=>a[m]+i)}}var Ro=On(Gt.map(t=>t[4])),$o=On(Gt.map(t=>t[5]));function Rn(t,n){let e=R(n),r=R(t);return e.empty||r.empty?"":Et(Dt("1P",r.alt-e.alt))}function ko(t,n,e){return u(e,Rn(t,n))}var $n={get:R,names:Fo,all:Vn,distance:Rn,relativeTonic:ko,notes:Oo,triads:Ro,seventhChords:$o,entries:wo,mode:_o};function qo(t,n){return n.map(y).map(r=>u(t,l(r))+r.chordType)}function Go(t,n){return n.map(e=>{let[r,o]=Q(e),a=b(t,r);return y(l(a)).name+o})}var kn={fromRomanNumerals:qo,toRomanNumerals:Go};function qn(t){let n=K(t.map(e=>typeof e=="number"?e:_t(e)));return!t.length||n.length!==t.length?[]:n.reduce((e,r)=>{let o=e[e.length-1];return e.concat(w(o,r).slice(1))},[n[0]])}function Lo(t,n){return qn(t).map(e=>g(e,n))}var Gn={numeric:qn,chromatic:Lo};var Bo={empty:!0,name:"",type:"",tonic:null,setNum:NaN,chroma:"",normalized:"",aliases:[],notes:[],intervals:[]};function Ln(t){if(typeof t!="string")return["",""];let n=t.indexOf(" "),e=s(t.substring(0,n));if(e.empty){let o=s(t);return o.empty?["",t]:[o.name,""]}let r=t.substring(e.name.length+1);return[e.name,r.length?r:""]}var zo=Tt;function I(t){let n=Array.isArray(t)?t:Ln(t),e=s(n[0]).name,r=U(n[1]);if(r.empty)return Bo;let o=r.name,a=e?r.intervals.map(m=>u(e,m)):[],i=e?e+" "+o:o;return{...r,name:i,type:o,tonic:e,notes:a}}var Uo=d("Scale.scale","Scale.get",I);function Ho(t,n={}){let e=gt(t),r=s(n.tonic??t[0]??""),o=r.chroma;if(o===void 0)return[];let a=e.split("");a[o]="1";let i=N(o,a).join(""),m=T().find(P=>P.chroma===i),c=[];return m&&c.push(r.name+" "+m.name),n.match==="exact"||Bn(i).forEach(P=>{c.push(r.name+" "+P)}),c}function Ko(t){let n=I(t),e=L(n.chroma);return S().filter(r=>e(r.chroma)).map(r=>r.aliases[0])}function Bn(t){let n=et(t)?t:I(t).chroma,e=B(n);return T().filter(r=>e(r.chroma)).map(r=>r.name)}function Xo(t){let n=L(I(t).chroma);return T().filter(e=>n(e.chroma)).map(e=>e.name)}function zn(t){let n=t.map(o=>s(o).pc).filter(o=>o),e=n[0],r=Rt(n);return N(r.indexOf(e),r)}function Qo(t){let n=I(t);if(n.empty)return[];let e=n.tonic?n.notes:n.intervals;return X(n.chroma).map((r,o)=>{let a=I(r).name;return a?[e[o],a]:["",""]}).filter(r=>r[0])}function Jo(t){let n=Array.isArray(t)?zn(t):I(t).notes,e=n.map(r=>s(r).chroma);return r=>{let o=typeof r=="number"?s(Vt(r)):s(r),a=o.height;if(a===void 0)return;let i=a%12,m=e.indexOf(i);if(m!==-1)return $t(o.name,n[m])}}function Wo(t){let n=Jo(t);return(e,r)=>{let o=s(e).height,a=s(r).height;return o===void 0||a===void 0?[]:w(o,a).map(n).filter(i=>i)}}function Yo(t){let{intervals:n,tonic:e}=I(t),r=D(n,e);return o=>o?r(o>0?o-1:o):""}function Zo(t){let{intervals:n,tonic:e}=I(t);return D(n,e)}var Un={degrees:Yo,detect:Ho,extended:Bn,get:I,modeNames:Qo,names:zo,rangeOf:Wo,reduced:Xo,scaleChords:Ko,scaleNotes:zn,steps:Zo,tokenize:Ln,scale:Uo};var ta={empty:!0,name:"",upper:void 0,lower:void 0,type:void 0,additive:[]},na=["4/4","3/4","2/4","2/2","12/8","9/8","6/8","3/8"];function ea(){return na.slice()}var ra=/^(\d*\d(?:\+\d)*)\/(\d+)$/,Hn=new Map;function oa(t){let n=JSON.stringify(t),e=Hn.get(n);if(e)return e;let r=ia(Bt(t));return Hn.set(n,r),r}function Bt(t){if(typeof t=="string"){let[a,i,m]=ra.exec(t)||[];return Bt([i,m])}let[n,e]=t,r=+e;if(typeof n=="number")return[n,r];let o=n.split("+").map(a=>+a);return o.length===1?[o[0],r]:[o,r]}var Kn={names:ea,parse:Bt,get:oa},aa=t=>Math.log(t)/Math.log(2)%1===0;function ia([t,n]){let e=Array.isArray(t)?t.reduce((m,c)=>m+c,0):t,r=n;if(e===0||r===0)return ta;let o=Array.isArray(t)?`${t.join("+")}/${n}`:`${t}/${n}`,a=Array.isArray(t)?t:[],i=r===4||r===2?"simple":r===8&&e%3===0?"compound":aa(r)?"irregular":"irrational";return{empty:!1,name:o,type:i,upper:e,lower:r,additive:a}}var ma=tt,sa=It,ca=Nt,ua=jt;return Yn(la);})(); +"use strict"; var Tonal = (() => { var ft = Object.defineProperty; var Xn = Object.getOwnPropertyDescriptor; var Qn = Object.getOwnPropertyNames; var Jn = Object.prototype.hasOwnProperty; var pt = (t, n) => { for (var e in n) ft(t, e, { get: n[e], enumerable: !0 }) }, Wn = (t, n, e, r) => { if (n && typeof n == "object" || typeof n == "function") for (let o of Qn(n)) !Jn.call(t, o) && o !== e && ft(t, o, { get: () => n[o], enumerable: !(r = Xn(n, o)) || r.enumerable }); return t }; var Yn = t => Wn(ft({}, "__esModule", { value: !0 }), t); var la = {}; pt(la, { AbcNotation: () => nn, Array: () => bt, Chord: () => dn, ChordDictionary: () => ca, ChordType: () => Nt, Collection: () => an, Core: () => tt, DurationValue: () => fn, Interval: () => Mn, Key: () => wn, Midi: () => bn, Mode: () => $n, Note: () => Tn, PcSet: () => sa, Pcset: () => It, Progression: () => kn, Range: () => Gn, RomanNumeral: () => En, Scale: () => Un, ScaleDictionary: () => ua, ScaleType: () => jt, TimeSignature: () => Kn, Tonal: () => ma, accToAlt: () => _, altToAcc: () => E, coordToInterval: () => G, coordToNote: () => vt, decode: () => Z, deprecate: () => d, distance: () => b, encode: () => Y, fillStr: () => $, interval: () => l, isNamed: () => k, isPitch: () => q, note: () => s, stepToLetter: () => ht, tokenizeInterval: () => yt, tokenizeNote: () => H, tonicIntervalsTransposer: () => D, transpose: () => u }); var tt = {}; pt(tt, { accToAlt: () => _, altToAcc: () => E, coordToInterval: () => G, coordToNote: () => vt, decode: () => Z, deprecate: () => d, distance: () => b, encode: () => Y, fillStr: () => $, interval: () => l, isNamed: () => k, isPitch: () => q, note: () => s, stepToLetter: () => ht, tokenizeInterval: () => yt, tokenizeNote: () => H, tonicIntervalsTransposer: () => D, transpose: () => u }); var $ = (t, n) => Array(Math.abs(n) + 1).join(t); function d(t, n, e) { return function (...r) { return console.warn(`${t} is deprecated. Use ${n}.`), e.apply(this, r) } } function k(t) { return t !== null && typeof t == "object" && typeof t.name == "string" } function q(t) { return t !== null && typeof t == "object" && typeof t.step == "number" && typeof t.alt == "number" } var Xt = [0, 2, 4, -1, 1, 3, 5], Qt = Xt.map(t => Math.floor(t * 7 / 12)); function Y(t) { let { step: n, alt: e, oct: r, dir: o = 1 } = t, a = Xt[n] + 7 * e; if (r === void 0) return [o * a]; let i = r - Qt[n] - 4 * e; return [o * a, o * i] } var Zn = [3, 0, 4, 1, 5, 2, 6]; function Z(t) { let [n, e, r] = t, o = Zn[te(n)], a = Math.floor((n + 1) / 7); if (e === void 0) return { step: o, alt: a, dir: r }; let i = e + 4 * a + Qt[o]; return { step: o, alt: a, oct: i, dir: r } } function te(t) { let n = (t + 1) % 7; return n < 0 ? 7 + n : n } var Jt = { empty: !0, name: "", pc: "", acc: "" }, Ut = new Map, ht = t => "CDEFGAB".charAt(t), E = t => t < 0 ? $("b", -t) : $("#", t), _ = t => t[0] === "b" ? -t.length : t.length; function s(t) { let n = JSON.stringify(t), e = Ut.get(n); if (e) return e; let r = typeof t == "string" ? re(t) : q(t) ? s(oe(t)) : k(t) ? s(t.name) : Jt; return Ut.set(n, r), r } var ne = /^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/; function H(t) { let n = ne.exec(t); return [n[1].toUpperCase(), n[2].replace(/x/g, "##"), n[3], n[4]] } function vt(t) { return s(Z(t)) } var ee = (t, n) => (t % n + n) % n, Pt = [0, 2, 4, 5, 7, 9, 11]; function re(t) { let n = H(t); if (n[0] === "" || n[3] !== "") return Jt; let e = n[0], r = n[1], o = n[2], a = (e.charCodeAt(0) + 3) % 7, i = _(r), m = o.length ? +o : void 0, c = Y({ step: a, alt: i, oct: m }), P = e + r + o, h = e + r, j = (Pt[a] + i + 120) % 12, f = m === void 0 ? ee(Pt[a] + i, 12) - 12 * 99 : Pt[a] + i + 12 * (m + 1), x = f >= 0 && f <= 127 ? f : null, C = m === void 0 ? null : Math.pow(2, (f - 69) / 12) * 440; return { empty: !1, acc: r, alt: i, chroma: j, coord: c, freq: C, height: f, letter: e, midi: x, name: P, oct: m, pc: h, step: a } } function oe(t) { let { step: n, alt: e, oct: r } = t, o = ht(n); if (!o) return ""; let a = o + E(e); return r || r === 0 ? a + r : a } var Mt = { empty: !0, name: "", acc: "" }, ae = "([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})", ie = "(AA|A|P|M|m|d|dd)([-+]?\\d+)", me = new RegExp("^" + ae + "|" + ie + "$"); function yt(t) { let n = me.exec(`${t}`); return n === null ? ["", ""] : n[1] ? [n[1], n[2]] : [n[4], n[3]] } var Ht = {}; function l(t) { return typeof t == "string" ? Ht[t] || (Ht[t] = se(t)) : q(t) ? l(ue(t)) : k(t) ? l(t.name) : Mt } var Kt = [0, 2, 4, 5, 7, 9, 11], Wt = "PMMPPMM"; function se(t) { let n = yt(t); if (n[0] === "") return Mt; let e = +n[0], r = n[1], o = (Math.abs(e) - 1) % 7, a = Wt[o]; if (a === "M" && r === "P") return Mt; let i = a === "M" ? "majorable" : "perfectable", m = "" + e + r, c = e < 0 ? -1 : 1, P = e === 8 || e === -8 ? e : c * (o + 1), h = ce(i, r), j = Math.floor((Math.abs(e) - 1) / 7), f = c * (Kt[o] + h + 12 * j), x = (c * (Kt[o] + h) % 12 + 12) % 12, C = Y({ step: o, alt: h, oct: j, dir: c }); return { empty: !1, name: m, num: e, q: r, step: o, alt: h, dir: c, type: i, simple: P, semitones: f, chroma: x, coord: C, oct: j } } function G(t, n) { let [e, r = 0] = t, o = e * 7 + r * 12 < 0, a = n || o ? [-e, -r, -1] : [e, r, 1]; return l(Z(a)) } function ce(t, n) { return n === "M" && t === "majorable" || n === "P" && t === "perfectable" ? 0 : n === "m" && t === "majorable" ? -1 : /^A+$/.test(n) ? n.length : /^d+$/.test(n) ? -1 * (t === "perfectable" ? n.length : n.length + 1) : 0 } function ue(t) { let { step: n, alt: e, oct: r = 0, dir: o } = t; if (!o) return ""; let a = n + 1 + 7 * r, i = a === 0 ? n + 1 : a, m = o < 0 ? "-" : "", c = Wt[n] === "M" ? "majorable" : "perfectable"; return m + i + le(c, e) } function le(t, n) { return n === 0 ? t === "majorable" ? "M" : "P" : n === -1 && t === "majorable" ? "m" : n > 0 ? $("A", n) : $("d", t === "perfectable" ? n : n + 1) } function u(t, n) { let e = s(t), r = Array.isArray(n) ? n : l(n).coord; if (e.empty || !r || r.length < 2) return ""; let o = e.coord, a = o.length === 1 ? [o[0] + r[0]] : [o[0] + r[0], o[1] + r[1]]; return vt(a).name } function D(t, n) { let e = t.length; return r => { if (!n) return ""; let o = r < 0 ? (e - -r % e) % e : r % e, a = Math.floor(r / e), i = u(n, [0, a]); return u(i, t[o]) } } function b(t, n) { let e = s(t), r = s(n); if (e.empty || r.empty) return ""; let o = e.coord, a = r.coord, i = a[0] - o[0], m = o.length === 2 && a.length === 2 ? a[1] - o[1] : -Math.floor(i * 7 / 12), c = r.height === e.height && r.midi !== null && e.midi !== null && e.step > r.step; return G([i, m], c).name } var Yt = (t, n) => Array(n + 1).join(t), de = /^(_{1,}|=|\^{1,}|)([abcdefgABCDEFG])([,']*)$/; function Zt(t) { let n = de.exec(t); return n ? [n[1], n[2], n[3]] : ["", "", ""] } function nt(t) { let [n, e, r] = Zt(t); if (e === "") return ""; let o = 4; for (let i = 0; i < r.length; i++)o += r.charAt(i) === "," ? -1 : 1; let a = n[0] === "_" ? n.replace(/_/g, "b") : n[0] === "^" ? n.replace(/\^/g, "#") : ""; return e.charCodeAt(0) > 96 ? e.toUpperCase() + a + (o + 1) : e + a + o } function tn(t) { let n = s(t); if (n.empty || !n.oct && n.oct !== 0) return ""; let { letter: e, acc: r, oct: o } = n, a = r[0] === "b" ? r.replace(/b/g, "_") : r.replace(/#/g, "^"), i = o > 4 ? e.toLowerCase() : e, m = o === 5 ? "" : o > 4 ? Yt("'", o - 5) : Yt(",", 4 - o); return a + i + m } function fe(t, n) { return tn(u(nt(t), n)) } function pe(t, n) { return b(nt(t), nt(n)) } var nn = { abcToScientificNotation: nt, scientificToAbcNotation: tn, tokenize: Zt, transpose: fe, distance: pe }; var bt = {}; pt(bt, { compact: () => ye, permutations: () => rn, range: () => he, rotate: () => ve, shuffle: () => Ae, sortedNoteNames: () => en, sortedUniqNoteNames: () => be }); var Ma = Array.isArray; function Pe(t, n) { let e = []; for (; n--; e[n] = n + t); return e } function Me(t, n) { let e = []; for (; n--; e[n] = t - n); return e } function he(t, n) { return t < n ? Pe(t, n - t + 1) : Me(t, t - n + 1) } function ve(t, n) { let e = n.length, r = (t % e + e) % e; return n.slice(r, e).concat(n.slice(0, r)) } function ye(t) { return t.filter(n => n === 0 || n) } function en(t) { return t.map(e => s(e)).filter(e => !e.empty).sort((e, r) => e.height - r.height).map(e => e.name) } function be(t) { return en(t).filter((n, e, r) => e === 0 || n !== r[e - 1]) } function Ae(t, n = Math.random) { let e, r, o = t.length; for (; o;)e = Math.floor(n() * o--), r = t[o], t[o] = t[e], t[e] = r; return t } function rn(t) { return t.length === 0 ? [[]] : rn(t.slice(1)).reduce((n, e) => n.concat(t.map((r, o) => { let a = e.slice(); return a.splice(o, 0, t[0]), a })), []) } function ge(t, n) { let e = []; for (; n--; e[n] = n + t); return e } function Ie(t, n) { let e = []; for (; n--; e[n] = t - n); return e } function w(t, n) { return t < n ? ge(t, n - t + 1) : Ie(t, t - n + 1) } function N(t, n) { let e = n.length, r = (t % e + e) % e; return n.slice(r, e).concat(n.slice(0, r)) } function K(t) { return t.filter(n => n === 0 || n) } function Ne(t, n = Math.random) { let e, r, o = t.length; for (; o;)e = Math.floor(n() * o--), r = t[o], t[o] = t[e], t[e] = r; return t } function on(t) { return t.length === 0 ? [[]] : on(t.slice(1)).reduce((n, e) => n.concat(t.map((r, o) => { let a = e.slice(); return a.splice(o, 0, t[0]), a })), []) } var an = { compact: K, permutations: on, range: w, rotate: N, shuffle: Ne }; var A = { empty: !0, name: "", setNum: 0, chroma: "000000000000", normalized: "000000000000", intervals: [] }, At = t => Number(t).toString(2).padStart(12, "0"), mn = t => parseInt(t, 2), Se = /^[01]{12}$/; function et(t) { return Se.test(t) } var Te = t => typeof t == "number" && t >= 0 && t <= 4095, je = t => t && et(t.chroma), sn = { [A.chroma]: A }; function p(t) { let n = et(t) ? t : Te(t) ? At(t) : Array.isArray(t) ? $e(t) : je(t) ? t.chroma : A.chroma; return sn[n] = sn[n] || Re(n) } var xe = d("Pcset.pcset", "Pcset.get", p), gt = t => p(t).chroma, Ce = t => p(t).intervals, Ee = t => p(t).setNum, De = ["1P", "2m", "2M", "3m", "3M", "4P", "5d", "5P", "6m", "6M", "7m", "7M"]; function _e(t) { let n = []; for (let e = 0; e < 12; e++)t.charAt(e) === "1" && n.push(De[e]); return n } function we() { return w(2048, 4095).map(At) } function X(t, n = !0) { let r = p(t).chroma.split(""); return K(r.map((o, a) => { let i = N(a, r); return n && i[0] === "0" ? null : i.join("") })) } function Fe(t, n) { return p(t).setNum === p(n).setNum } function L(t) { let n = p(t).setNum; return e => { let r = p(e).setNum; return n && n !== r && (r & n) === r } } function B(t) { let n = p(t).setNum; return e => { let r = p(e).setNum; return n && n !== r && (r | n) === r } } function cn(t) { let n = p(t); return e => { let r = s(e); return n && !r.empty && n.chroma.charAt(r.chroma) === "1" } } function Ve(t) { let n = cn(t); return e => e.filter(n) } var It = { get: p, chroma: gt, num: Ee, intervals: Ce, chromas: we, isSupersetOf: B, isSubsetOf: L, isNoteIncludedIn: cn, isEqual: Fe, filter: Ve, modes: X, pcset: xe }; function Oe(t) { let n = t.split(""); return n.map((e, r) => N(r, n).join("")) } function Re(t) { let n = mn(t), e = Oe(t).map(mn).filter(a => a >= 2048).sort()[0], r = At(e), o = _e(t); return { empty: !1, name: "", setNum: n, chroma: t, normalized: r, intervals: o } } function $e(t) { if (t.length === 0) return A.chroma; let n, e = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (let r = 0; r < t.length; r++)n = s(t[r]), n.empty && (n = l(t[r])), n.empty || (e[n.chroma] = 1); return e.join("") } var ke = [["1P 3M 5P", "major", "M ^ maj"], ["1P 3M 5P 7M", "major seventh", "maj7 \u0394 ma7 Maj7 ^7"], ["1P 3M 5P 7M 9M", "major ninth", "maj9 \u03949 ^9"], ["1P 3M 5P 7M 9M 11P", "major eleventh", "maj11 Δ11 ^11"], ["1P 3M 5P 7M 9M 11P 13M", "major thirteenth", "maj13 Maj13 ^13"], ["1P 3M 5P 6M", "sixth", "6 add6 add13 M6"], ["1P 3M 5P 6M 9M", "sixth added ninth", "6add9 6/9 69 M69"], ["1P 3M 6m 7M", "major seventh flat sixth", "M7b6 ^7b6"], ["1P 3M 5P 7M 11A", "major seventh sharp eleventh", "maj#4 \u0394#4 \u0394#11 M7#11 ^7#11 maj7#11"], ["1P 3m 5P", "minor", "m min -"], ["1P 3m 5P 7m", "minor seventh", "m7 min7 mi7 -7"], ["1P 3m 5P 7M", "minor/major seventh", "m/ma7 m/maj7 mM7 mmaj7 mMaj7 m/M7 -\u03947 m\u0394 -^7"], ["1P 3m 5P 6M", "minor sixth", "m6 -6"], ["1P 3m 5P 7m 9M", "minor ninth", "m9 -9"], ["1P 3m 5P 7M 9M", "minor/major ninth", "mM9 mMaj9 -^9 m9maj7 m9Maj7"], ["1P 3m 5P 7m 9M 11P", "minor eleventh", "m11 -11"], ["1P 3m 5P 7m 9M 11P 13M", "minor thirteenth", "m13 -13"], ["1P 3m 5d", "diminished", "dim \xB0 o"], ["1P 3m 5d 7d", "diminished seventh", "dim7 \xB07 o7"], ["1P 3m 5d 7m", "half-diminished", "m7b5 \xF8 -7b5 h7 h"], ["1P 3M 5P 7m", "dominant seventh", "7 dom"], ["1P 3M 5P 7m 9M", "dominant ninth", "9"], ["1P 3M 5P 7m 9M 11P 13M", "dominant thirteenth", "13"], ["1P 3M 5P 7m 11A", "lydian dominant seventh", "7#11 7#4"], ["1P 3M 5P 7m 9m", "dominant flat ninth", "7b9"], ["1P 3M 5P 7m 9A", "dominant sharp ninth", "7#9"], ["1P 3M 7m 9m", "altered", "alt7"], ["1P 4P 5P", "suspended fourth", "sus4 sus"], ["1P 2M 5P", "suspended second", "sus2"], ["1P 4P 5P 7m", "suspended fourth seventh", "7sus4 7sus"], ["1P 3M 5P 7m 9M 11P", "eleventh", "11"], ["1P 4P 5P 7m 9m", "suspended fourth flat ninth", "b9sus phryg 7b9sus 7b9sus4"], ["1P 5P", "fifth", "5"], ["1P 3M 5A", "augmented", "aug + +5 ^#5"], ["1P 3m 5A", "minor augmented", "m#5 -#5 m+"], ["1P 3M 5A 7M", "augmented seventh", "maj7#5 maj7+5 +maj7 ^7#5"], ["1P 3M 5P 7M 9M 11A", "major sharp eleventh (lydian)", "maj9#11 \u03949#11 ^9#11"], ["1P 2M 4P 5P", "", "sus24 sus4add9"], ["1P 3M 5A 7M 9M", "", "maj9#5 Maj9#5"], ["1P 3M 5A 7m", "", "7#5 +7 7+ 7aug aug7"], ["1P 3M 5A 7m 9A", "", "7#5#9 7#9#5 7alt"], ["1P 3M 5A 7m 9M", "", "9#5 9+"], ["1P 3M 5A 7m 9M 11A", "", "9#5#11"], ["1P 3M 5A 7m 9m", "", "7#5b9 7b9#5"], ["1P 3M 5A 7m 9m 11A", "", "7#5b9#11"], ["1P 3M 5A 9A", "", "+add#9"], ["1P 3M 5A 9M", "", "M#5add9 +add9"], ["1P 3M 5P 6M 11A", "", "M6#11 M6b5 6#11 6b5"], ["1P 3M 5P 6M 7M 9M", "", "M7add13"], ["1P 3M 5P 6M 9M 11A", "", "69#11"], ["1P 3m 5P 6M 9M", "", "m69 -69"], ["1P 3M 5P 6m 7m", "", "7b6"], ["1P 3M 5P 7M 9A 11A", "", "maj7#9#11"], ["1P 3M 5P 7M 9M 11A 13M", "", "M13#11 maj13#11 M13+4 M13#4"], ["1P 3M 5P 7M 9m", "", "M7b9"], ["1P 3M 5P 7m 11A 13m", "", "7#11b13 7b5b13"], ["1P 3M 5P 7m 13M", "", "7add6 67 7add13"], ["1P 3M 5P 7m 9A 11A", "", "7#9#11 7b5#9 7#9b5"], ["1P 3M 5P 7m 9A 11A 13M", "", "13#9#11"], ["1P 3M 5P 7m 9A 11A 13m", "", "7#9#11b13"], ["1P 3M 5P 7m 9A 13M", "", "13#9"], ["1P 3M 5P 7m 9A 13m", "", "7#9b13"], ["1P 3M 5P 7m 9M 11A", "", "9#11 9+4 9#4"], ["1P 3M 5P 7m 9M 11A 13M", "", "13#11 13+4 13#4"], ["1P 3M 5P 7m 9M 11A 13m", "", "9#11b13 9b5b13"], ["1P 3M 5P 7m 9m 11A", "", "7b9#11 7b5b9 7b9b5"], ["1P 3M 5P 7m 9m 11A 13M", "", "13b9#11"], ["1P 3M 5P 7m 9m 11A 13m", "", "7b9b13#11 7b9#11b13 7b5b9b13"], ["1P 3M 5P 7m 9m 13M", "", "13b9"], ["1P 3M 5P 7m 9m 13m", "", "7b9b13"], ["1P 3M 5P 7m 9m 9A", "", "7b9#9"], ["1P 3M 5P 9M", "", "Madd9 2 add9 add2"], ["1P 3M 5P 9m", "", "Maddb9"], ["1P 3M 5d", "", "Mb5"], ["1P 3M 5d 6M 7m 9M", "", "13b5"], ["1P 3M 5d 7M", "", "M7b5"], ["1P 3M 5d 7M 9M", "", "M9b5"], ["1P 3M 5d 7m", "", "7b5"], ["1P 3M 5d 7m 9M", "", "9b5"], ["1P 3M 7m", "", "7no5"], ["1P 3M 7m 13m", "", "7b13"], ["1P 3M 7m 9M", "", "9no5"], ["1P 3M 7m 9M 13M", "", "13no5"], ["1P 3M 7m 9M 13m", "", "9b13"], ["1P 3m 4P 5P", "", "madd4"], ["1P 3m 5P 6m 7M", "", "mMaj7b6"], ["1P 3m 5P 6m 7M 9M", "", "mMaj9b6"], ["1P 3m 5P 7m 11P", "", "m7add11 m7add4"], ["1P 3m 5P 9M", "", "madd9"], ["1P 3m 5d 6M 7M", "", "o7M7"], ["1P 3m 5d 7M", "", "oM7"], ["1P 3m 6m 7M", "", "mb6M7"], ["1P 3m 6m 7m", "", "m7#5"], ["1P 3m 6m 7m 9M", "", "m9#5"], ["1P 3m 5A 7m 9M 11P", "", "m11A"], ["1P 3m 6m 9m", "", "mb6b9"], ["1P 2M 3m 5d 7m", "", "m9b5"], ["1P 4P 5A 7M", "", "M7#5sus4"], ["1P 4P 5A 7M 9M", "", "M9#5sus4"], ["1P 4P 5A 7m", "", "7#5sus4"], ["1P 4P 5P 7M", "", "M7sus4"], ["1P 4P 5P 7M 9M", "", "M9sus4"], ["1P 4P 5P 7m 9M", "", "9sus4 9sus"], ["1P 4P 5P 7m 9M 13M", "", "13sus4 13sus"], ["1P 4P 5P 7m 9m 13m", "", "7sus4b9b13 7b9b13sus4"], ["1P 4P 7m 10m", "", "4 quartal"], ["1P 5P 7m 9m 11P", "", "11b9"]], qe = ke, Ge = { ...A, name: "", quality: "Unknown", intervals: [], aliases: [] }, z = [], F = {}; function rt(t) { return F[t] || Ge } var Le = d("ChordType.chordType", "ChordType.get", rt); function Be() { return z.map(t => t.name).filter(t => t) } function ze() { return z.map(t => t.aliases[0]).filter(t => t) } function Ue() { return Object.keys(F) } function S() { return z.slice() } var He = d("ChordType.entries", "ChordType.all", S); function Ke() { z = [], F = {} } function un(t, n, e) { let r = Qe(t), o = { ...p(t), name: e || "", quality: r, intervals: t, aliases: n }; z.push(o), o.name && (F[o.name] = o), F[o.setNum] = o, F[o.chroma] = o, o.aliases.forEach(a => Xe(o, a)) } function Xe(t, n) { F[n] = t } function Qe(t) { let n = e => t.indexOf(e) !== -1; return n("5A") ? "Augmented" : n("3M") ? "Major" : n("5d") ? "Diminished" : n("3m") ? "Minor" : "Unknown" } qe.forEach(([t, n, e]) => un(t.split(" "), e.split(" "), n)); z.sort((t, n) => t.setNum - n.setNum); var Nt = { names: Be, symbols: ze, get: rt, all: S, add: un, removeAll: Ke, keys: Ue, entries: He, chordType: Le }; var Je = t => { let n = t.reduce((e, r) => { let o = s(r).chroma; return o !== void 0 && (e[o] = e[o] || s(r).name), e }, {}); return e => n[e] }; function St(t, n = {}) { let e = t.map(o => s(o).pc).filter(o => o); return s.length === 0 ? [] : rr(e, 1, n).filter(o => o.weight).sort((o, a) => a.weight - o.weight).map(o => o.name) } var ot = { anyThirds: 384, perfectFifth: 16, nonPerfectFifths: 40, anySeventh: 3 }, at = t => n => !!(n & t), We = at(ot.anyThirds), Ye = at(ot.perfectFifth), Ze = at(ot.anySeventh), tr = at(ot.nonPerfectFifths); function nr(t) { let n = parseInt(t.chroma, 2); return We(n) && Ye(n) && Ze(n) } function er(t) { let n = parseInt(t, 2); return tr(n) ? t : (n | 16).toString(2) } function rr(t, n, e) { let r = t[0], o = s(r).chroma, a = Je(t), i = X(t, !1), m = []; return i.forEach((c, P) => { let h = e.assumePerfectFifth && er(c); S().filter(f => e.assumePerfectFifth && nr(f) ? f.chroma === h : f.chroma === c).forEach(f => { let x = f.aliases[0], C = a(P); P !== o ? m.push({ weight: .5 * n, name: `${C}${x}/${r}` }) : m.push({ weight: 1 * n, name: `${C}${x}` }) }) }), m } var or = [["1P 2M 3M 5P 6M", "major pentatonic", "pentatonic"], ["1P 2M 3M 4P 5P 6M 7M", "major", "ionian"], ["1P 2M 3m 4P 5P 6m 7m", "minor", "aeolian"], ["1P 2M 3m 3M 5P 6M", "major blues"], ["1P 3m 4P 5d 5P 7m", "minor blues", "blues"], ["1P 2M 3m 4P 5P 6M 7M", "melodic minor"], ["1P 2M 3m 4P 5P 6m 7M", "harmonic minor"], ["1P 2M 3M 4P 5P 6M 7m 7M", "bebop"], ["1P 2M 3m 4P 5d 6m 6M 7M", "diminished", "whole-half diminished"], ["1P 2M 3m 4P 5P 6M 7m", "dorian"], ["1P 2M 3M 4A 5P 6M 7M", "lydian"], ["1P 2M 3M 4P 5P 6M 7m", "mixolydian", "dominant"], ["1P 2m 3m 4P 5P 6m 7m", "phrygian"], ["1P 2m 3m 4P 5d 6m 7m", "locrian"], ["1P 3M 4P 5P 7M", "ionian pentatonic"], ["1P 3M 4P 5P 7m", "mixolydian pentatonic", "indian"], ["1P 2M 4P 5P 6M", "ritusen"], ["1P 2M 4P 5P 7m", "egyptian"], ["1P 3M 4P 5d 7m", "neopolitan major pentatonic"], ["1P 3m 4P 5P 6m", "vietnamese 1"], ["1P 2m 3m 5P 6m", "pelog"], ["1P 2m 4P 5P 6m", "kumoijoshi"], ["1P 2M 3m 5P 6m", "hirajoshi"], ["1P 2m 4P 5d 7m", "iwato"], ["1P 2m 4P 5P 7m", "in-sen"], ["1P 3M 4A 5P 7M", "lydian pentatonic", "chinese"], ["1P 3m 4P 6m 7m", "malkos raga"], ["1P 3m 4P 5d 7m", "locrian pentatonic", "minor seven flat five pentatonic"], ["1P 3m 4P 5P 7m", "minor pentatonic", "vietnamese 2"], ["1P 3m 4P 5P 6M", "minor six pentatonic"], ["1P 2M 3m 5P 6M", "flat three pentatonic", "kumoi"], ["1P 2M 3M 5P 6m", "flat six pentatonic"], ["1P 2m 3M 5P 6M", "scriabin"], ["1P 3M 5d 6m 7m", "whole tone pentatonic"], ["1P 3M 4A 5A 7M", "lydian #5P pentatonic"], ["1P 3M 4A 5P 7m", "lydian dominant pentatonic"], ["1P 3m 4P 5P 7M", "minor #7M pentatonic"], ["1P 3m 4d 5d 7m", "super locrian pentatonic"], ["1P 2M 3m 4P 5P 7M", "minor hexatonic"], ["1P 2A 3M 5P 5A 7M", "augmented"], ["1P 2M 4P 5P 6M 7m", "piongio"], ["1P 2m 3M 4A 6M 7m", "prometheus neopolitan"], ["1P 2M 3M 4A 6M 7m", "prometheus"], ["1P 2m 3M 5d 6m 7m", "mystery #1"], ["1P 2m 3M 4P 5A 6M", "six tone symmetric"], ["1P 2M 3M 4A 5A 6A", "whole tone", "messiaen's mode #1"], ["1P 2m 4P 4A 5P 7M", "messiaen's mode #5"], ["1P 2M 3M 4P 5d 6m 7m", "locrian major", "arabian"], ["1P 2m 3M 4A 5P 6m 7M", "double harmonic lydian"], ["1P 2m 2A 3M 4A 6m 7m", "altered", "super locrian", "diminished whole tone", "pomeroy"], ["1P 2M 3m 4P 5d 6m 7m", "locrian #2", "half-diminished", "aeolian b5"], ["1P 2M 3M 4P 5P 6m 7m", "mixolydian b6", "melodic minor fifth mode", "hindu"], ["1P 2M 3M 4A 5P 6M 7m", "lydian dominant", "lydian b7", "overtone"], ["1P 2M 3M 4A 5A 6M 7M", "lydian augmented"], ["1P 2m 3m 4P 5P 6M 7m", "dorian b2", "phrygian #6", "melodic minor second mode"], ["1P 2m 3m 4d 5d 6m 7d", "ultralocrian", "superlocrian bb7", "superlocrian diminished"], ["1P 2m 3m 4P 5d 6M 7m", "locrian 6", "locrian natural 6", "locrian sharp 6"], ["1P 2A 3M 4P 5P 5A 7M", "augmented heptatonic"], ["1P 2M 3m 4A 5P 6M 7m", "dorian #4", "ukrainian dorian", "romanian minor", "altered dorian"], ["1P 2M 3m 4A 5P 6M 7M", "lydian diminished"], ["1P 2M 3M 4A 5A 7m 7M", "leading whole tone"], ["1P 2M 3M 4A 5P 6m 7m", "lydian minor"], ["1P 2m 3M 4P 5P 6m 7m", "phrygian dominant", "spanish", "phrygian major"], ["1P 2m 3m 4P 5P 6m 7M", "balinese"], ["1P 2m 3m 4P 5P 6M 7M", "neopolitan major"], ["1P 2M 3M 4P 5P 6m 7M", "harmonic major"], ["1P 2m 3M 4P 5P 6m 7M", "double harmonic major", "gypsy"], ["1P 2M 3m 4A 5P 6m 7M", "hungarian minor"], ["1P 2A 3M 4A 5P 6M 7m", "hungarian major"], ["1P 2m 3M 4P 5d 6M 7m", "oriental"], ["1P 2m 3m 3M 4A 5P 7m", "flamenco"], ["1P 2m 3m 4A 5P 6m 7M", "todi raga"], ["1P 2m 3M 4P 5d 6m 7M", "persian"], ["1P 2m 3M 5d 6m 7m 7M", "enigmatic"], ["1P 2M 3M 4P 5A 6M 7M", "major augmented", "major #5", "ionian augmented", "ionian #5"], ["1P 2A 3M 4A 5P 6M 7M", "lydian #9"], ["1P 2m 2M 4P 4A 5P 6m 7M", "messiaen's mode #4"], ["1P 2m 3M 4P 4A 5P 6m 7M", "purvi raga"], ["1P 2m 3m 3M 4P 5P 6m 7m", "spanish heptatonic"], ["1P 2M 3m 3M 4P 5P 6M 7m", "bebop minor"], ["1P 2M 3M 4P 5P 5A 6M 7M", "bebop major"], ["1P 2m 3m 4P 5d 5P 6m 7m", "bebop locrian"], ["1P 2M 3m 4P 5P 6m 7m 7M", "minor bebop"], ["1P 2M 3M 4P 5d 5P 6M 7M", "ichikosucho"], ["1P 2M 3m 4P 5P 6m 6M 7M", "minor six diminished"], ["1P 2m 3m 3M 4A 5P 6M 7m", "half-whole diminished", "dominant diminished", "messiaen's mode #2"], ["1P 3m 3M 4P 5P 6M 7m 7M", "kafi raga"], ["1P 2M 3M 4P 4A 5A 6A 7M", "messiaen's mode #6"], ["1P 2M 3m 3M 4P 5d 5P 6M 7m", "composite blues"], ["1P 2M 3m 3M 4A 5P 6m 7m 7M", "messiaen's mode #3"], ["1P 2m 2M 3m 4P 4A 5P 6m 6M 7M", "messiaen's mode #7"], ["1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M", "chromatic"]], ar = or, ir = { ...A, intervals: [], aliases: [] }, it = [], V = {}; function Tt() { return it.map(t => t.name) } function U(t) { return V[t] || ir } var mr = d("ScaleDictionary.scaleType", "ScaleType.get", U); function T() { return it.slice() } var sr = d("ScaleDictionary.entries", "ScaleType.all", T); function cr() { return Object.keys(V) } function ur() { it = [], V = {} } function ln(t, n, e = []) { let r = { ...p(t), name: n, intervals: t, aliases: e }; return it.push(r), V[r.name] = r, V[r.setNum] = r, V[r.chroma] = r, r.aliases.forEach(o => lr(r, o)), r } function lr(t, n) { V[n] = t } ar.forEach(([t, n, ...e]) => ln(t.split(" "), n, e)); var jt = { names: Tt, get: U, all: T, add: ln, removeAll: ur, keys: cr, entries: sr, scaleType: mr }; var xt = { empty: !0, name: "", symbol: "", root: "", rootDegree: 0, type: "", tonic: null, setNum: NaN, quality: "Unknown", chroma: "", normalized: "", aliases: [], notes: [], intervals: [] }; function Q(t) { let [n, e, r, o] = H(t); return n === "" ? ["", t] : n === "A" && o === "ug" ? ["", "aug"] : [n + e, r + o] } function O(t) { if (t === "") return xt; if (Array.isArray(t) && t.length === 2) return mt(t[1], t[0]); { let [n, e] = Q(t), r = mt(e, n); return r.empty ? mt(t) : r } } function mt(t, n, e) { let r = rt(t), o = s(n || ""), a = s(e || ""); if (r.empty || n && o.empty || e && a.empty) return xt; let i = b(o.pc, a.pc), m = r.intervals.indexOf(i) + 1; if (!a.empty && !m) return xt; let c = Array.from(r.intervals); for (let f = 1; f < m; f++) { let x = c[0][0], C = c[0][1], zt = parseInt(x, 10) + 7; c.push(`${zt}${C}`), c.shift() } let P = o.empty ? [] : c.map(f => u(o, f)); t = r.aliases.indexOf(t) !== -1 ? t : r.aliases[0]; let h = `${o.empty ? "" : o.pc}${t}${a.empty || m <= 1 ? "" : "/" + a.pc}`, j = `${n ? o.pc + " " : ""}${r.name}${m > 1 && e ? " over " + a.pc : ""}`; return { ...r, name: j, symbol: h, type: r.name, root: a.name, intervals: c, rootDegree: m, tonic: o.name, notes: P } } var dr = d("Chord.chord", "Chord.get", O); function fr(t, n) { let [e, r] = Q(t); return e ? u(e, n) + r : t } function pr(t) { let n = O(t), e = B(n.chroma); return T().filter(r => e(r.chroma)).map(r => r.name) } function Pr(t) { let n = O(t), e = B(n.chroma); return S().filter(r => e(r.chroma)).map(r => n.tonic + r.aliases[0]) } function Mr(t) { let n = O(t), e = L(n.chroma); return S().filter(r => e(r.chroma)).map(r => n.tonic + r.aliases[0]) } function hr(t) { let { intervals: n, tonic: e } = O(t), r = D(n, e); return o => o ? r(o > 0 ? o - 1 : o) : "" } function vr(t) { let { intervals: n, tonic: e } = O(t); return D(n, e) } var dn = { getChord: mt, get: O, detect: St, chordScales: pr, extended: Pr, reduced: Mr, tokenize: Q, transpose: fr, degrees: hr, steps: vr, chord: dr }; var yr = [[.125, "dl", ["large", "duplex longa", "maxima", "octuple", "octuple whole"]], [.25, "l", ["long", "longa"]], [.5, "d", ["double whole", "double", "breve"]], [1, "w", ["whole", "semibreve"]], [2, "h", ["half", "minim"]], [4, "q", ["quarter", "crotchet"]], [8, "e", ["eighth", "quaver"]], [16, "s", ["sixteenth", "semiquaver"]], [32, "t", ["thirty-second", "demisemiquaver"]], [64, "sf", ["sixty-fourth", "hemidemisemiquaver"]], [128, "h", ["hundred twenty-eighth"]], [256, "th", ["two hundred fifty-sixth"]]], br = yr, st = []; br.forEach(([t, n, e]) => jr(t, n, e)); var Ar = { empty: !0, name: "", value: 0, fraction: [0, 0], shorthand: "", dots: "", names: [] }; function gr() { return st.reduce((t, n) => (n.names.forEach(e => t.push(e)), t), []) } function Ir() { return st.map(t => t.shorthand) } var Nr = /^([^.]+)(\.*)$/; function Ct(t) { let [n, e, r] = Nr.exec(t) || [], o = st.find(m => m.shorthand === e || m.names.includes(e)); if (!o) return Ar; let a = xr(o.fraction, r.length), i = a[0] / a[1]; return { ...o, name: t, dots: r, value: i, fraction: a } } var Sr = t => Ct(t).value, Tr = t => Ct(t).fraction, fn = { names: gr, shorthands: Ir, get: Ct, value: Sr, fraction: Tr }; function jr(t, n, e) { st.push({ empty: !1, dots: "", name: "", value: 1 / t, fraction: t < 1 ? [1 / t, 1] : [1, t], shorthand: n, names: e }) } function xr(t, n) { let e = Math.pow(2, n), r = t[0] * e, o = t[1] * e, a = r; for (let i = 0; i < n; i++)r += a / Math.pow(2, i + 1); for (; r % 2 === 0 && o % 2 === 0;)r /= 2, o /= 2; return [r, o] } function Cr() { return "1P 2M 3M 4P 5P 6m 7m".split(" ") } var pn = l, Er = t => l(t).name, Dr = t => l(t).semitones, _r = t => l(t).q, wr = t => l(t).num; function Et(t) { let n = l(t); return n.empty ? "" : n.simple + n.q } function Fr(t) { let n = l(t); if (n.empty) return ""; let e = (7 - n.step) % 7, r = n.type === "perfectable" ? -n.alt : -(n.alt + 1); return l({ step: e, alt: r, oct: n.oct, dir: n.dir }).name } var Vr = [1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7], Or = "P m M m M P d P m M m M".split(" "); function Rr(t) { let n = t < 0 ? -1 : 1, e = Math.abs(t), r = e % 12, o = Math.floor(e / 12); return n * (Vr[r] + 7 * o) + Or[r] } var $r = b, Pn = hn((t, n) => [t[0] + n[0], t[1] + n[1]]), kr = t => n => Pn(t, n), qr = hn((t, n) => [t[0] - n[0], t[1] - n[1]]); function Dt(t, n) { let e = pn(t); if (e.empty) return ""; let [r, o, a] = e.coord; return G([r + n, o, a]).name } var Mn = { names: Cr, get: pn, name: Er, num: wr, semitones: Dr, quality: _r, fromSemitones: Rr, distance: $r, invert: Fr, simplify: Et, add: Pn, addTo: kr, substract: qr, transposeFifths: Dt }; function hn(t) { return (n, e) => { let r = l(n).coord, o = l(e).coord; if (r && o) { let a = t(r, o); return G(a).name } } } function vn(t) { return +t >= 0 && +t <= 127 } function _t(t) { if (vn(t)) return +t; let n = s(t); return n.empty ? null : n.midi } function Gr(t, n = 440) { return Math.pow(2, (t - 69) / 12) * n } var Lr = Math.log(2), Br = Math.log(440); function ct(t) { let n = 12 * (Math.log(t) - Br) / Lr + 69; return Math.round(n * 100) / 100 } var zr = "C C# D D# E F F# G G# A A# B".split(" "), Ur = "C Db D Eb E F Gb G Ab A Bb B".split(" "); function g(t, n = {}) { if (isNaN(t) || t === -1 / 0 || t === 1 / 0) return ""; t = Math.round(t); let r = (n.sharps === !0 ? zr : Ur)[t % 12]; if (n.pitchClass) return r; let o = Math.floor(t / 12) - 1; return r + o } function wt(t) { return t % 12 } function Hr(t) { return t.split("").reduce((n, e, r) => (r < 12 && e === "1" && n.push(r), n), []) } function Kr(t) { return t.map(wt).sort((n, e) => n - e).filter((n, e, r) => e === 0 || n !== r[e - 1]) } function Ft(t) { return Array.isArray(t) ? Kr(t) : Hr(t) } function Xr(t) { let n = Ft(t); return e => { let r = wt(e); for (let o = 0; o < 12; o++) { if (n.includes(r + o)) return e + o; if (n.includes(r - o)) return e - o } } } function yn(t, n) { let e = Ft(t), r = e.length; return o => { let a = o < 0 ? (r - -o % r) % r : o % r, i = Math.floor(o / r); return e[a] + i * 12 + n } } function Qr(t, n) { let e = yn(t, n); return r => { if (r !== 0) return e(r > 0 ? r - 1 : r) } } var bn = { chroma: wt, freqToMidi: ct, isMidi: vn, midiToFreq: Gr, midiToNoteName: g, pcsetNearest: Xr, pcset: Ft, pcsetDegrees: Qr, pcsetSteps: yn, toMidi: _t }; var Jr = ["C", "D", "E", "F", "G", "A", "B"], An = t => t.name, gn = t => t.map(s).filter(n => !n.empty); function Wr(t) { return t === void 0 ? Jr.slice() : Array.isArray(t) ? gn(t).map(An) : [] } var v = s, Yr = t => v(t).name, Zr = t => v(t).pc, to = t => v(t).acc, no = t => v(t).oct, eo = t => v(t).midi, ro = t => v(t).freq, oo = t => v(t).chroma; function Vt(t) { return g(t) } function ao(t) { return g(ct(t)) } function io(t) { return g(ct(t), { sharps: !0 }) } function mo(t) { return g(t, { sharps: !0 }) } var J = u, so = u, In = t => n => J(n, t), co = In, Nn = t => n => J(t, n), uo = Nn; function W(t, n) { return J(t, [n, 0]) } var lo = W; function fo(t, n) { return J(t, [0, n]) } var Ot = (t, n) => t.height - n.height, po = (t, n) => n.height - t.height; function Sn(t, n) { return n = n || Ot, gn(t).sort(n).map(An) } function Rt(t) { return Sn(t, Ot).filter((n, e, r) => e === 0 || n !== r[e - 1]) } var Po = t => { let n = v(t); return n.empty ? "" : g(n.midi || n.chroma, { sharps: n.alt > 0, pitchClass: n.midi === null }) }; function $t(t, n) { let e = v(t); if (e.empty) return ""; let r = v(n || g(e.midi || e.chroma, { sharps: e.alt < 0, pitchClass: !0 })); if (r.empty || r.chroma !== e.chroma) return ""; if (e.oct === void 0) return r.pc; let o = e.chroma - e.alt, a = r.chroma - r.alt, i = o > 11 || a < 0 ? -1 : o < 0 || a > 11 ? 1 : 0, m = e.oct + i; return r.pc + m } var Tn = { names: Wr, get: v, name: Yr, pitchClass: Zr, accidentals: to, octave: no, midi: eo, ascending: Ot, descending: po, sortedNames: Sn, sortedUniqNames: Rt, fromMidi: Vt, fromMidiSharps: mo, freq: ro, fromFreq: ao, fromFreqSharps: io, chroma: oo, transpose: J, tr: so, transposeBy: In, trBy: co, transposeFrom: Nn, trFrom: uo, transposeFifths: W, transposeOctaves: fo, trFifths: lo, simplify: Po, enharmonic: $t }; var xn = { empty: !0, name: "", chordType: "" }, jn = {}; function y(t) { return typeof t == "string" ? jn[t] || (jn[t] = go(t)) : typeof t == "number" ? y(ut[t] || "") : q(t) ? vo(t) : k(t) ? y(t.name) : xn } var Mo = d("RomanNumeral.romanNumeral", "RomanNumeral.get", y); function ho(t = !0) { return (t ? ut : Ao).slice() } function vo(t) { return y(E(t.alt) + ut[t.step]) } var yo = /^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/; function bo(t) { return yo.exec(t) || ["", "", "", ""] } var Cn = "I II III IV V VI VII", ut = Cn.split(" "), Ao = Cn.toLowerCase().split(" "); function go(t) { let [n, e, r, o] = bo(t); if (!r) return xn; let a = r.toUpperCase(), i = ut.indexOf(a), m = _(e), c = 1; return { empty: !1, name: n, roman: r, interval: l({ step: i, alt: m, dir: c }).name, acc: e, chordType: o, alt: m, step: i, major: r === a, oct: 0, dir: c } } var En = { names: ho, get: y, romanNumeral: Mo }; var M = Object.freeze([]), Dn = { type: "major", tonic: "", alteration: 0, keySignature: "" }, lt = { tonic: "", grades: M, intervals: M, scale: M, triads: M, chords: M, chordsHarmonicFunction: M, chordScales: M }, Io = { ...Dn, ...lt, type: "major", minorRelative: "", scale: M, secondaryDominants: M, secondaryDominantsMinorRelative: M, substituteDominants: M, substituteDominantsMinorRelative: M }, No = { ...Dn, type: "minor", relativeMajor: "", natural: lt, harmonic: lt, melodic: lt }, kt = (t, n, e = "") => n.map((r, o) => `${t[o]}${e}${r}`); function dt(t, n, e, r, o) { return a => { let i = t.map(c => y(c).interval || ""), m = i.map(c => u(a, c)); return { tonic: a, grades: t, intervals: i, scale: m, triads: kt(m, n), chords: kt(m, e), chordsHarmonicFunction: r.slice(), chordScales: kt(m, o, " ") } } } var _n = (t, n) => { let e = s(t), r = s(n); return e.empty || r.empty ? 0 : r.coord[0] - e.coord[0] }, So = dt("I II III IV V VI VII".split(" "), " m m m dim".split(" "), "maj7 m7 m7 maj7 7 m7 m7b5".split(" "), "T SD T SD D T D".split(" "), "major,dorian,phrygian,lydian,mixolydian,minor,locrian".split(",")), To = dt("I II bIII IV V bVI bVII".split(" "), "m dim m m ".split(" "), "m7 m7b5 maj7 m7 m7 maj7 7".split(" "), "T SD T SD D SD SD".split(" "), "minor,locrian,major,dorian,phrygian,lydian,mixolydian".split(",")), jo = dt("I II bIII IV V bVI VII".split(" "), "m dim aug m dim".split(" "), "mMaj7 m7b5 +maj7 m7 7 maj7 o7".split(" "), "T SD T SD D SD D".split(" "), "harmonic minor,locrian 6,major augmented,lydian diminished,phrygian dominant,lydian #9,ultralocrian".split(",")), xo = dt("I II bIII IV V VI VII".split(" "), "m m aug dim dim".split(" "), "m6 m7 +maj7 7 7 m7b5 m7b5".split(" "), "T SD T SD D ".split(" "), "melodic minor,dorian b2,lydian augmented,lydian dominant,mixolydian b6,locrian #2,altered".split(",")); function Co(t) { let n = s(t).pc; if (!n) return Io; let e = So(n), r = _n("C", n), o = a => { let i = y(a); return i.empty ? "" : u(t, i.interval) + i.chordType }; return { ...e, type: "major", minorRelative: u(n, "-3m"), alteration: r, keySignature: E(r), secondaryDominants: "- VI7 VII7 I7 II7 III7 -".split(" ").map(o), secondaryDominantsMinorRelative: "- IIIm7b5 IV#m7 Vm7 VIm7 VIIm7b5 -".split(" ").map(o), substituteDominants: "- bIII7 IV7 bV7 bVI7 bVII7 -".split(" ").map(o), substituteDominantsMinorRelative: "- IIIm7 Im7 IIbm7 VIm7 IVm7 -".split(" ").map(o) } } function Eo(t) { let n = s(t).pc; if (!n) return No; let e = _n("C", n) - 3; return { type: "minor", tonic: n, relativeMajor: u(n, "3m"), alteration: e, keySignature: E(e), natural: To(n), harmonic: jo(n), melodic: xo(n) } } function Do(t) { return typeof t == "number" ? W("C", t) : typeof t == "string" && /^b+|#+$/.test(t) ? W("C", _(t)) : null } var wn = { majorKey: Co, majorTonicFromKeySignature: Do, minorKey: Eo }; var Gt = [[0, 2773, 0, "ionian", "", "Maj7", "major"], [1, 2902, 2, "dorian", "m", "m7"], [2, 3418, 4, "phrygian", "m", "m7"], [3, 2741, -1, "lydian", "", "Maj7"], [4, 2774, 1, "mixolydian", "", "7"], [5, 2906, 3, "aeolian", "m", "m7", "minor"], [6, 3434, 5, "locrian", "dim", "m7b5"]], Fn = { ...A, name: "", alt: 0, modeNum: NaN, triad: "", seventh: "", aliases: [] }, Lt = Gt.map(Vo), qt = {}; Lt.forEach(t => { qt[t.name] = t, t.aliases.forEach(n => { qt[n] = t }) }); function R(t) { return typeof t == "string" ? qt[t.toLowerCase()] || Fn : t && t.name ? R(t.name) : Fn } var _o = d("Mode.mode", "Mode.get", R); function Vn() { return Lt.slice() } var wo = d("Mode.mode", "Mode.all", Vn); function Fo() { return Lt.map(t => t.name) } function Vo(t) { let [n, e, r, o, a, i, m] = t, c = m ? [m] : [], P = Number(e).toString(2); return { empty: !1, intervals: U(o).intervals, modeNum: n, chroma: P, normalized: P, name: o, setNum: e, alt: r, triad: a, seventh: i, aliases: c } } function Oo(t, n) { return R(t).intervals.map(e => u(n, e)) } function On(t) { return (n, e) => { let r = R(n); if (r.empty) return []; let o = N(r.modeNum, t), a = r.intervals.map(i => u(e, i)); return o.map((i, m) => a[m] + i) } } var Ro = On(Gt.map(t => t[4])), $o = On(Gt.map(t => t[5])); function Rn(t, n) { let e = R(n), r = R(t); return e.empty || r.empty ? "" : Et(Dt("1P", r.alt - e.alt)) } function ko(t, n, e) { return u(e, Rn(t, n)) } var $n = { get: R, names: Fo, all: Vn, distance: Rn, relativeTonic: ko, notes: Oo, triads: Ro, seventhChords: $o, entries: wo, mode: _o }; function qo(t, n) { return n.map(y).map(r => u(t, l(r)) + r.chordType) } function Go(t, n) { return n.map(e => { let [r, o] = Q(e), a = b(t, r); return y(l(a)).name + o }) } var kn = { fromRomanNumerals: qo, toRomanNumerals: Go }; function qn(t) { let n = K(t.map(e => typeof e == "number" ? e : _t(e))); return !t.length || n.length !== t.length ? [] : n.reduce((e, r) => { let o = e[e.length - 1]; return e.concat(w(o, r).slice(1)) }, [n[0]]) } function Lo(t, n) { return qn(t).map(e => g(e, n)) } var Gn = { numeric: qn, chromatic: Lo }; var Bo = { empty: !0, name: "", type: "", tonic: null, setNum: NaN, chroma: "", normalized: "", aliases: [], notes: [], intervals: [] }; function Ln(t) { if (typeof t != "string") return ["", ""]; let n = t.indexOf(" "), e = s(t.substring(0, n)); if (e.empty) { let o = s(t); return o.empty ? ["", t] : [o.name, ""] } let r = t.substring(e.name.length + 1); return [e.name, r.length ? r : ""] } var zo = Tt; function I(t) { let n = Array.isArray(t) ? t : Ln(t), e = s(n[0]).name, r = U(n[1]); if (r.empty) return Bo; let o = r.name, a = e ? r.intervals.map(m => u(e, m)) : [], i = e ? e + " " + o : o; return { ...r, name: i, type: o, tonic: e, notes: a } } var Uo = d("Scale.scale", "Scale.get", I); function Ho(t, n = {}) { let e = gt(t), r = s(n.tonic ?? t[0] ?? ""), o = r.chroma; if (o === void 0) return []; let a = e.split(""); a[o] = "1"; let i = N(o, a).join(""), m = T().find(P => P.chroma === i), c = []; return m && c.push(r.name + " " + m.name), n.match === "exact" || Bn(i).forEach(P => { c.push(r.name + " " + P) }), c } function Ko(t) { let n = I(t), e = L(n.chroma); return S().filter(r => e(r.chroma)).map(r => r.aliases[0]) } function Bn(t) { let n = et(t) ? t : I(t).chroma, e = B(n); return T().filter(r => e(r.chroma)).map(r => r.name) } function Xo(t) { let n = L(I(t).chroma); return T().filter(e => n(e.chroma)).map(e => e.name) } function zn(t) { let n = t.map(o => s(o).pc).filter(o => o), e = n[0], r = Rt(n); return N(r.indexOf(e), r) } function Qo(t) { let n = I(t); if (n.empty) return []; let e = n.tonic ? n.notes : n.intervals; return X(n.chroma).map((r, o) => { let a = I(r).name; return a ? [e[o], a] : ["", ""] }).filter(r => r[0]) } function Jo(t) { let n = Array.isArray(t) ? zn(t) : I(t).notes, e = n.map(r => s(r).chroma); return r => { let o = typeof r == "number" ? s(Vt(r)) : s(r), a = o.height; if (a === void 0) return; let i = a % 12, m = e.indexOf(i); if (m !== -1) return $t(o.name, n[m]) } } function Wo(t) { let n = Jo(t); return (e, r) => { let o = s(e).height, a = s(r).height; return o === void 0 || a === void 0 ? [] : w(o, a).map(n).filter(i => i) } } function Yo(t) { let { intervals: n, tonic: e } = I(t), r = D(n, e); return o => o ? r(o > 0 ? o - 1 : o) : "" } function Zo(t) { let { intervals: n, tonic: e } = I(t); return D(n, e) } var Un = { degrees: Yo, detect: Ho, extended: Bn, get: I, modeNames: Qo, names: zo, rangeOf: Wo, reduced: Xo, scaleChords: Ko, scaleNotes: zn, steps: Zo, tokenize: Ln, scale: Uo }; var ta = { empty: !0, name: "", upper: void 0, lower: void 0, type: void 0, additive: [] }, na = ["4/4", "3/4", "2/4", "2/2", "12/8", "9/8", "6/8", "3/8"]; function ea() { return na.slice() } var ra = /^(\d*\d(?:\+\d)*)\/(\d+)$/, Hn = new Map; function oa(t) { let n = JSON.stringify(t), e = Hn.get(n); if (e) return e; let r = ia(Bt(t)); return Hn.set(n, r), r } function Bt(t) { if (typeof t == "string") { let [a, i, m] = ra.exec(t) || []; return Bt([i, m]) } let [n, e] = t, r = +e; if (typeof n == "number") return [n, r]; let o = n.split("+").map(a => +a); return o.length === 1 ? [o[0], r] : [o, r] } var Kn = { names: ea, parse: Bt, get: oa }, aa = t => Math.log(t) / Math.log(2) % 1 === 0; function ia([t, n]) { let e = Array.isArray(t) ? t.reduce((m, c) => m + c, 0) : t, r = n; if (e === 0 || r === 0) return ta; let o = Array.isArray(t) ? `${t.join("+")}/${n}` : `${t}/${n}`, a = Array.isArray(t) ? t : [], i = r === 4 || r === 2 ? "simple" : r === 8 && e % 3 === 0 ? "compound" : aa(r) ? "irregular" : "irrational"; return { empty: !1, name: o, type: i, upper: e, lower: r, additive: a } } var ma = tt, sa = It, ca = Nt, ua = jt; return Yn(la); })(); //# sourceMappingURL=tonal.min.js.map