var musicvislib=(()=>{var ku=Object.create;var bt=Object.defineProperty,Eu=Object.defineProperties,Ru=Object.getOwnPropertyDescriptor,Fu=Object.getOwnPropertyDescriptors,Bu=Object.getOwnPropertyNames,ri=Object.getOwnPropertySymbols,Ou=Object.getPrototypeOf,ii=Object.prototype.hasOwnProperty,Lu=Object.prototype.propertyIsEnumerable;var oi=(e,t,n)=>t in e?bt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,A=(e,t)=>{for(var n in t||(t={}))ii.call(t,n)&&oi(e,n,t[n]);if(ri)for(var n of ri(t))Lu.call(t,n)&&oi(e,n,t[n]);return e},C=(e,t)=>Eu(e,Fu(t));var Gu=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),E=(e,t)=>{for(var n in t)bt(e,n,{get:t[n],enumerable:!0})},ai=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Bu(t))!ii.call(e,o)&&o!==n&&bt(e,o,{get:()=>t[o],enumerable:!(r=Ru(t,o))||r.enumerable});return e};var qu=(e,t,n)=>(n=e!=null?ku(Ou(e)):{},ai(t||!e||!e.__esModule?bt(n,"default",{value:e,enumerable:!0}):n,e)),$u=e=>ai(bt({},"__esModule",{value:!0}),e);var As=Gu((A5,ao)=>{(function(){"use strict";let e=function(n){let r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;if(n=n.replace(/^.*?base64,/,""),n=String(n).replace(/[\t\n\f\r ]+/g,""),!o.test(n))throw new TypeError("Failed to execute _atob() : The string to be decoded is not correctly encoded.");n+="==".slice(2-(n.length&3));let i,a="",s,u,l=0;for(;l>16&255):u===64?String.fromCharCode(i>>16&255,i>>8&255):String.fromCharCode(i>>16&255,i>>8&255,i&255);return a},t={debug:!1,parse:function(n,r){if(n instanceof Uint8Array)return t.Uint8(n);if(typeof n=="string")return t.Base64(n);if(n instanceof HTMLElement&&n.type==="file")return t.addListener(n,r);throw new Error("MidiParser.parse() : Invalid input provided")},addListener:function(n,r){if(!File||!FileReader)throw new Error("The File|FileReader APIs are not supported in this browser. Use instead MidiParser.Base64() or MidiParser.Uint8()");if(n===void 0||!(n instanceof HTMLElement)||n.tagName!=="INPUT"||n.type.toLowerCase()!=="file")return console.warn("MidiParser.addListener() : Provided element is not a valid FILE INPUT element"),!1;r=r||function(){},n.addEventListener("change",function(o){if(!o.target.files.length)return!1;console.log("MidiParser.addListener() : File detected in INPUT ELEMENT processing data..");let i=new FileReader;i.readAsArrayBuffer(o.target.files[0]),i.onload=function(a){r(t.Uint8(new Uint8Array(a.target.result)))}})},Base64:function(n){n=String(n);let r=e(n),o=r.length,i=new Uint8Array(new ArrayBuffer(o));for(let a=0;a1)for(let c=1;c<=u-1;c++)l+=this.data.getUint8(this.pointer)*Math.pow(256,u-c),this.pointer++;return l+=this.data.getUint8(this.pointer),this.pointer++,l},readStr:function(u){let l="";for(let c=1;c<=u;c++)l+=String.fromCharCode(this.readInt(1));return l},readIntVLV:function(){let u=0;if(this.pointer>=this.data.byteLength)return-1;if(this.data.getUint8(this.pointer)<128)u=this.readInt(1);else{let l=[];for(;this.data.getUint8(this.pointer)>=128;)l.push(this.readInt(1)-128);let c=this.readInt(1);for(let f=1;f<=l.length;f++)u+=l[l.length-f]*Math.pow(128,f);u+=c}return u}};if(r.data=new DataView(n.buffer,n.byteOffset,n.byteLength),r.readInt(4)!==1297377380)return console.warn("Header validation failed (not MIDI standard or file corrupt.)"),!1;let o=r.readInt(4),i={};i.formatType=r.readInt(2),i.tracks=r.readInt(2),i.track=[];let a=r.readInt(1),s=r.readInt(1);a>=128?(i.timeDivision=[],i.timeDivision[0]=a-128,i.timeDivision[1]=s):i.timeDivision=a*256+s;for(let u=1;u<=i.tracks;u++){i.track[u-1]={event:[]};let l=r.readInt(4);if(l===-1)break;if(l!==1297379947)return!1;r.readInt(4);let c=0,f=!1,m,p;for(;!f&&(c++,i.track[u-1].event[c-1]={},i.track[u-1].event[c-1].deltaTime=r.readIntVLV(),m=r.readInt(1),m!==-1);)if(m>=128?p=m:(m=p,r.movePointer(-1)),m===255){i.track[u-1].event[c-1].type=255,i.track[u-1].event[c-1].metaType=r.readInt(1);let h=r.readIntVLV();switch(i.track[u-1].event[c-1].metaType){case 47:case-1:f=!0;break;case 1:case 2:case 3:case 4:case 5:case 7:case 6:i.track[u-1].event[c-1].data=r.readStr(h);break;case 33:case 89:case 81:i.track[u-1].event[c-1].data=r.readInt(h);break;case 84:i.track[u-1].event[c-1].data=[],i.track[u-1].event[c-1].data[0]=r.readInt(1),i.track[u-1].event[c-1].data[1]=r.readInt(1),i.track[u-1].event[c-1].data[2]=r.readInt(1),i.track[u-1].event[c-1].data[3]=r.readInt(1),i.track[u-1].event[c-1].data[4]=r.readInt(1);break;case 88:i.track[u-1].event[c-1].data=[],i.track[u-1].event[c-1].data[0]=r.readInt(1),i.track[u-1].event[c-1].data[1]=r.readInt(1),i.track[u-1].event[c-1].data[2]=r.readInt(1),i.track[u-1].event[c-1].data[3]=r.readInt(1);break;default:this.customInterpreter!==null&&(i.track[u-1].event[c-1].data=this.customInterpreter(i.track[u-1].event[c-1].metaType,r,h)),(this.customInterpreter===null||i.track[u-1].event[c-1].data===!1)&&(r.readInt(h),i.track[u-1].event[c-1].data=r.readInt(h),this.debug&&console.info("Unimplemented 0xFF meta event! data block readed as Integer"))}}else switch(m=m.toString(16).split(""),m[1]||m.unshift("0"),i.track[u-1].event[c-1].type=parseInt(m[0],16),i.track[u-1].event[c-1].channel=parseInt(m[1],16),i.track[u-1].event[c-1].type){case 15:{if(this.customInterpreter!==null&&(i.track[u-1].event[c-1].data=this.customInterpreter(i.track[u-1].event[c-1].type,r,!1)),this.customInterpreter===null||i.track[u-1].event[c-1].data===!1){let h=r.readIntVLV();i.track[u-1].event[c-1].data=r.readInt(h),this.debug&&console.info("Unimplemented 0xF exclusive events! data block readed as Integer")}break}case 10:case 11:case 14:case 8:case 9:i.track[u-1].event[c-1].data=[],i.track[u-1].event[c-1].data[0]=r.readInt(1),i.track[u-1].event[c-1].data[1]=r.readInt(1);break;case 12:case 13:i.track[u-1].event[c-1].data=r.readInt(1);break;case-1:f=!0;break;default:if(this.customInterpreter!==null&&(i.track[u-1].event[c-1].data=this.customInterpreter(i.track[u-1].event[c-1].metaType,r,!1)),this.customInterpreter===null||i.track[u-1].event[c-1].data===!1)return console.log("Unknown EVENT detected... reading cancelled!"),!1}}return i},customInterpreter:null};if(typeof ao<"u")ao.exports=t;else{let n=typeof window=="object"&&window.self===window&&window||typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global;n.MidiParser=t}})()});var Vd={};E(Vd,{Alignment:()=>Go,Canvas:()=>lo,Chords:()=>Io,DiffAlignment:()=>jo,Drums:()=>On,Guitar:()=>mo,GuitarNote:()=>Q,HarmonicaNote:()=>pi,Lamellophone:()=>Do,Matching:()=>Oo,Midi:()=>ar,MidiInputManager:()=>Os,MusicPiece:()=>ks,Note:()=>M,NoteArray:()=>K,Piano:()=>ko,PitchSequence:()=>Gt,PriorityMatching:()=>Ho,Recording:()=>kn,SimilarSections:()=>Xo,Similarity:()=>zo,StringBased:()=>ti,Utils:()=>Jn,getVersion:()=>Ud,recordAudio:()=>Es,recordMidi:()=>Fs});var ju="musicvis-lib",Hu="0.57.1",zu="Music analysis and visualization library",Uu="Frank Heyen",Vu="ISC",Xu="https://fheyen.github.io/musicvis-lib",Yu={url:"git+https://github.com/fheyen/musicvis-lib",type:"git"},Wu={url:"https://github.com/fheyen/musicvis-lib/issues"},Ku=["visualization","music visualization","visual analytics","JavaScript","ECMAScript","web-based","MIDI","MusicXML","Web MIDI","music","string comparison"],Ju="module",Qu="./src/index.js",Zu="dist/musicvislib.node.js",el="dist/musicvislib.esm.js",tl="dist/musicvislib.min.js",nl="dist/musicvislib.min.js",rl={upd:"npm-check-updates -u","upd:i":"npm-check-updates -u && npm i && npm audit fix","upd:i:t":"npm-check-updates -u && npm i && npm test",build:"npm run build:bundle && npm run build:browser && npm run build:browser:min && npm run build:node","build:bundle":"esbuild src/index.js --bundle --format=esm --sourcemap --outfile=dist/musicvislib.esm.js","build:browser":"esbuild src/index.js --bundle --format=iife --global-name=musicvislib --sourcemap --target=chrome90,firefox90,edge90 --outfile=dist/musicvislib.js","build:browser:min":"esbuild src/index.js --bundle --format=iife --global-name=musicvislib --sourcemap --minify --target=chrome90,firefox90,edge90 --outfile=dist/musicvislib.min.js","build:node":"esbuild src/index.js --bundle --sourcemap --platform=node --target=node16.5 --outfile=dist/musicvislib.node.js",test:"jest --coverage",testch:"jest --coverage --changedFilesWithAncestor",testfail:"jest --changedFilesWithAncestor --onlyFailures",testclear:"jest --clearCache",doc:"jsdoc -c jsdoc.conf.json","doc:md":"jsdoc2md src/**/*.js > api.md",lint:"standard --verbose","lint:fix":"standard --fix --verbose","git:all":"npm run git:add && npm run git:commit && npm run git:push && npm run git:pushtags","git:add":"git add .","git:commit":'git commit -m "new version build"',"git:push":"git push","git:pushtags":"git push origin --tags",predeploy:"npm run lint:fix && npm run doc:md && npm run build && jest --silent",predeploy_old:"npm run lint:fix && npm run doc:md && npm run doc && npm run build && jest --silent",deploy:"npm publish && npm run git:all",prepare:"husky install"},ol={"@tonaljs/tonal":"^4.6.5",d3:"^6.7.0","midi-parser-js":"^4.0.4"},il={"@babel/core":"^7.19.3","@babel/plugin-proposal-class-properties":"^7.18.6","@babel/plugin-proposal-nullish-coalescing-operator":"^7.18.6","@babel/plugin-proposal-optional-chaining":"^7.18.9","@babel/preset-env":"^7.19.4","@types/d3":"^7.4.0","@types/jest":"^29.1.2","clean-jsdoc-theme":"^4.1.8",esbuild:"^0.15.10",glob:"^8.0.3",husky:"^8.0.1",jest:"^29.1.2","jest-canvas-mock":"^2.4.0","jest-environment-jsdom":"^29.1.2","jest-extended":"^3.1.0",jsdoc:"^3.6.11","jsdoc-to-markdown":"^7.1.1","npm-check-updates":"^16.3.11",standard:"^17.0.0"},al={testEnvironment:"jsdom",testPathIgnorePatterns:["/node_modules/","/dist/"],collectCoverageFrom:["src/**/*.js"],setupFilesAfterEnv:["jest-extended/all"]},sl={ignore:["/dist/","/docs/"],globals:["MediaRecorder","Blob","DOMParser","CanvasRenderingContext2D","localStorage","FileReader"],env:["jest"]},si={name:ju,version:Hu,description:zu,author:Uu,license:Vu,homepage:Xu,repository:Yu,bugs:Wu,keywords:Ku,type:Ju,exports:Qu,main:Zu,module:el,unpkg:tl,browser:nl,scripts:rl,dependencies:ol,devDependencies:il,jest:al,standard:sl};var ar={};E(ar,{MIDI_COMMANDS:()=>gl,MIDI_NOTES:()=>mi,MIDI_NOTE_RANGES:()=>vl,NOTE_NAMES:()=>fi,NOTE_NAMES_FLAT:()=>dl,SHARPS:()=>bl,flatToSharp:()=>pl,getMidiDrumNoteByNr:()=>cl,getMidiInstrumentByNr:()=>ul,getMidiInstrumentByNrL2:()=>ll,getMidiNoteByLabel:()=>oe,getMidiNoteByNameAndOctave:()=>Xt,getMidiNoteByNr:()=>W,getNoteNameFromNoteNr:()=>ml,isSharp:()=>fl,sharpToFlat:()=>hl});var ui=new Map,ir=new Map,li=new Map,ci=new Map;function W(e){return ui.get(e)}function oe(e){return ir.get(e)}function Xt(e,t){return ir.get(`${e}${t}`)}function ul(e){return li.get(e)}function ll(e,t){let n=`${e}-${t}`;return ci.get(n)}function cl(e){return Ml.get(e)}function fl(e){let t=e%12;return t===1||t===3||t===6||t===8||t===10}function ml(e){return fi[e%12]}var pl=new Map([["Cb","B"],["Db","C#"],["Eb","D#"],["Fb","E"],["Gb","F#"],["Ab","G#"],["Bb","A#"]]),hl=new Map([["C#","Db"],["D#","Eb"],["E#","F"],["F#","Gb"],["G#","Ab"],["A#","Bb"],["B#","C"]]),fi=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],dl=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"],mi=[{pitch:0,name:"C",octave:-1,label:"C-1",frequency:8.176},{pitch:1,name:"C#",octave:-1,label:"C#-1",frequency:8.662},{pitch:2,name:"D",octave:-1,label:"D-1",frequency:9.177},{pitch:3,name:"D#",octave:-1,label:"D#-1",frequency:9.723},{pitch:4,name:"E",octave:-1,label:"E-1",frequency:10.301},{pitch:5,name:"F",octave:-1,label:"F-1",frequency:10.913},{pitch:6,name:"F#",octave:-1,label:"F#-1",frequency:11.562},{pitch:7,name:"G",octave:-1,label:"G-1",frequency:12.25},{pitch:8,name:"G#",octave:-1,label:"G#-1",frequency:12.978},{pitch:9,name:"A",octave:-1,label:"A-1",frequency:13.75},{pitch:10,name:"A#",octave:-1,label:"A#-1",frequency:14.568},{pitch:11,name:"B",octave:-1,label:"B-1",frequency:15.434},{pitch:12,name:"C",octave:0,label:"C0",frequency:16.352},{pitch:13,name:"C#",octave:0,label:"C#0",frequency:17.324},{pitch:14,name:"D",octave:0,label:"D0",frequency:18.354},{pitch:15,name:"D#",octave:0,label:"D#0",frequency:19.445},{pitch:16,name:"E",octave:0,label:"E0",frequency:20.602},{pitch:17,name:"F",octave:0,label:"F0",frequency:21.827},{pitch:18,name:"F#",octave:0,label:"F#0",frequency:23.125},{pitch:19,name:"G",octave:0,label:"G0",frequency:24.5},{pitch:20,name:"G#",octave:0,label:"G#0",frequency:25.957},{pitch:21,name:"A",octave:0,label:"A0",frequency:27.5},{pitch:22,name:"A#",octave:0,label:"A#0",frequency:29.135},{pitch:23,name:"B",octave:0,label:"B0",frequency:30.868},{pitch:24,name:"C",octave:1,label:"C1",frequency:32.703},{pitch:25,name:"C#",octave:1,label:"C#1",frequency:34.648},{pitch:26,name:"D",octave:1,label:"D1",frequency:36.708},{pitch:27,name:"D#",octave:1,label:"D#1",frequency:38.891},{pitch:28,name:"E",octave:1,label:"E1",frequency:41.203},{pitch:29,name:"F",octave:1,label:"F1",frequency:43.654},{pitch:30,name:"F#",octave:1,label:"F#1",frequency:46.249},{pitch:31,name:"G",octave:1,label:"G1",frequency:48.999},{pitch:32,name:"G#",octave:1,label:"G#1",frequency:51.913},{pitch:33,name:"A",octave:1,label:"A1",frequency:55},{pitch:34,name:"A#",octave:1,label:"A#1",frequency:58.27},{pitch:35,name:"B",octave:1,label:"B1",frequency:61.735},{pitch:36,name:"C",octave:2,label:"C2",frequency:65.406},{pitch:37,name:"C#",octave:2,label:"C#2",frequency:69.296},{pitch:38,name:"D",octave:2,label:"D2",frequency:73.416},{pitch:39,name:"D#",octave:2,label:"D#2",frequency:77.782},{pitch:40,name:"E",octave:2,label:"E2",frequency:82.407},{pitch:41,name:"F",octave:2,label:"F2",frequency:87.307},{pitch:42,name:"F#",octave:2,label:"F#2",frequency:92.499},{pitch:43,name:"G",octave:2,label:"G2",frequency:97.999},{pitch:44,name:"G#",octave:2,label:"G#2",frequency:103.826},{pitch:45,name:"A",octave:2,label:"A2",frequency:110},{pitch:46,name:"A#",octave:2,label:"A#2",frequency:116.541},{pitch:47,name:"B",octave:2,label:"B2",frequency:123.471},{pitch:48,name:"C",octave:3,label:"C3",frequency:130.813},{pitch:49,name:"C#",octave:3,label:"C#3",frequency:138.591},{pitch:50,name:"D",octave:3,label:"D3",frequency:146.832},{pitch:51,name:"D#",octave:3,label:"D#3",frequency:155.563},{pitch:52,name:"E",octave:3,label:"E3",frequency:164.814},{pitch:53,name:"F",octave:3,label:"F3",frequency:174.614},{pitch:54,name:"F#",octave:3,label:"F#3",frequency:184.997},{pitch:55,name:"G",octave:3,label:"G3",frequency:195.998},{pitch:56,name:"G#",octave:3,label:"G#3",frequency:207.652},{pitch:57,name:"A",octave:3,label:"A3",frequency:220},{pitch:58,name:"A#",octave:3,label:"A#3",frequency:233.082},{pitch:59,name:"B",octave:3,label:"B3",frequency:246.942},{pitch:60,name:"C",octave:4,label:"C4",frequency:261.626},{pitch:61,name:"C#",octave:4,label:"C#4",frequency:277.183},{pitch:62,name:"D",octave:4,label:"D4",frequency:293.665},{pitch:63,name:"D#",octave:4,label:"D#4",frequency:311.127},{pitch:64,name:"E",octave:4,label:"E4",frequency:329.628},{pitch:65,name:"F",octave:4,label:"F4",frequency:349.228},{pitch:66,name:"F#",octave:4,label:"F#4",frequency:369.994},{pitch:67,name:"G",octave:4,label:"G4",frequency:391.995},{pitch:68,name:"G#",octave:4,label:"G#4",frequency:415.305},{pitch:69,name:"A",octave:4,label:"A4",frequency:440},{pitch:70,name:"A#",octave:4,label:"A#4",frequency:466.164},{pitch:71,name:"B",octave:4,label:"B4",frequency:493.883},{pitch:72,name:"C",octave:5,label:"C5",frequency:523.251},{pitch:73,name:"C#",octave:5,label:"C#5",frequency:554.365},{pitch:74,name:"D",octave:5,label:"D5",frequency:587.33},{pitch:75,name:"D#",octave:5,label:"D#5",frequency:622.254},{pitch:76,name:"E",octave:5,label:"E5",frequency:659.255},{pitch:77,name:"F",octave:5,label:"F5",frequency:698.456},{pitch:78,name:"F#",octave:5,label:"F#5",frequency:739.989},{pitch:79,name:"G",octave:5,label:"G5",frequency:783.991},{pitch:80,name:"G#",octave:5,label:"G#5",frequency:830.609},{pitch:81,name:"A",octave:5,label:"A5",frequency:880},{pitch:82,name:"A#",octave:5,label:"A#5",frequency:932.328},{pitch:83,name:"B",octave:5,label:"B5",frequency:987.767},{pitch:84,name:"C",octave:6,label:"C6",frequency:1046.502},{pitch:85,name:"C#",octave:6,label:"C#6",frequency:1108.731},{pitch:86,name:"D",octave:6,label:"D6",frequency:1174.659},{pitch:87,name:"D#",octave:6,label:"D#6",frequency:1244.508},{pitch:88,name:"E",octave:6,label:"E6",frequency:1318.51},{pitch:89,name:"F",octave:6,label:"F6",frequency:1396.913},{pitch:90,name:"F#",octave:6,label:"F#6",frequency:1479.978},{pitch:91,name:"G",octave:6,label:"G6",frequency:1567.982},{pitch:92,name:"G#",octave:6,label:"G#6",frequency:1661.219},{pitch:93,name:"A",octave:6,label:"A6",frequency:1760},{pitch:94,name:"A#",octave:6,label:"A#6",frequency:1864.655},{pitch:95,name:"B",octave:6,label:"B6",frequency:1975.533},{pitch:96,name:"C",octave:7,label:"C7",frequency:2093.005},{pitch:97,name:"C#",octave:7,label:"C#7",frequency:2217.461},{pitch:98,name:"D",octave:7,label:"D7",frequency:2349.318},{pitch:99,name:"D#",octave:7,label:"D#7",frequency:2489.016},{pitch:100,name:"E",octave:7,label:"E7",frequency:2637.02},{pitch:101,name:"F",octave:7,label:"F7",frequency:2793.826},{pitch:102,name:"F#",octave:7,label:"F#7",frequency:2959.955},{pitch:103,name:"G",octave:7,label:"G7",frequency:3135.963},{pitch:104,name:"G#",octave:7,label:"G#7",frequency:3322.438},{pitch:105,name:"A",octave:7,label:"A7",frequency:3520},{pitch:106,name:"A#",octave:7,label:"A#7",frequency:3729.31},{pitch:107,name:"B",octave:7,label:"B7",frequency:3951.066},{pitch:108,name:"C",octave:8,label:"C8",frequency:4186.009},{pitch:109,name:"C#",octave:8,label:"C#8",frequency:4434.922},{pitch:110,name:"D",octave:8,label:"D8",frequency:4698.636},{pitch:111,name:"D#",octave:8,label:"D#8",frequency:4978.032},{pitch:112,name:"E",octave:8,label:"E8",frequency:5274.041},{pitch:113,name:"F",octave:8,label:"F8",frequency:5587.652},{pitch:114,name:"F#",octave:8,label:"F#8",frequency:5919.911},{pitch:115,name:"G",octave:8,label:"G8",frequency:6271.927},{pitch:116,name:"G#",octave:8,label:"G#8",frequency:6644.875},{pitch:117,name:"A",octave:8,label:"A8",frequency:7040},{pitch:118,name:"A#",octave:8,label:"A#8",frequency:7458.62},{pitch:119,name:"B",octave:8,label:"B8",frequency:7902.133},{pitch:120,name:"C",octave:9,label:"C9",frequency:8372.018},{pitch:121,name:"C#",octave:9,label:"C#9",frequency:8869.844},{pitch:122,name:"D",octave:9,label:"D9",frequency:9397.273},{pitch:123,name:"D#",octave:9,label:"D#9",frequency:9956.063},{pitch:124,name:"E",octave:9,label:"E9",frequency:10548.08},{pitch:125,name:"F",octave:9,label:"F9",frequency:11175.3},{pitch:126,name:"F#",octave:9,label:"F#9",frequency:11839.82},{pitch:127,name:"G",octave:9,label:"G9",frequency:12543.85}],bl=new Set([1,3,6,8,10,13,15,18,20,22,25,27,30,32,34,37,39,42,44,46,49,51,54,56,58,61,63,66,68,70,73,75,78,80,82,85,87,90,92,94,97,99,102,104,106,109,111,114,116,118,121,123,126]),gl=new Map([[128,{name:"noteOff",description:"Note-off",params:["key","velocity"]}],[144,{name:"noteOn",description:"Note-on",params:["key","velocity"]}],[160,{name:"aftertouch",description:"Aftertouch",params:["key","touch"]}],[176,{name:"continuousController",description:"Continuous controller",params:["controller #","controller value"]}],[192,{name:"patchChange",description:"Patch change",params:["instrument number","instrument number"]}],[208,{name:"channelPressure",description:"Channel Pressure",params:["pressure"]}],[224,{name:"pitchBend",description:"Pitch bend",params:["lsb (7 bits)","msb (7 bits)"]}],[240,{name:"sysExStart",description:"start of system exclusive message"}],[241,{name:"timeCodeQuarter",description:"MIDI Time Code Quarter Frame (Sys Common)"}],[242,{name:"posPointer",description:"Song Position Pointer (Sys Common)"}],[243,{name:"songSelect",description:"Song Select (Sys Common)"}],[244,{name:"unknown1",description:"???"}],[245,{name:"unknown2",description:"???"}],[246,{name:"tuneRequest",description:"Tune Request (Sys Common)"}],[247,{name:"syExEnd",description:"end of system exclusive message 0"}],[248,{name:"timingClock",description:"Timing Clock (Sys Realtime)"}],[250,{name:"start",description:"Start (Sys Realtime)"}],[251,{name:"continue",description:"Continue (Sys Realtime)"}],[252,{name:"stop",description:"Stop (Sys Realtime)"}],[253,{name:"unknwon3",description:"???"}],[254,{name:"activeSensing",description:"Active Sensing (Sys Realtime)"}],[255,{name:"systemReset",description:"System Reset (Sys Realtime)"}]]),xl=[{number:0,group:"Piano",label:"Acoustic Grand Piano"},{number:1,group:"Piano",label:"Bright Acoustic Piano"},{number:2,group:"Piano",label:"Electric Grand Piano"},{number:3,group:"Piano",label:"Honky-tonk Piano"},{number:4,group:"Piano",label:"Electric Piano 1"},{number:5,group:"Piano",label:"Electric Piano 2"},{number:6,group:"Piano",label:"Harpsichord"},{number:7,group:"Piano",label:"Clavinet"},{number:8,group:"Chromatic Percussion",label:"Celesta"},{number:9,group:"Chromatic Percussion",label:"Glockenspiel"},{number:10,group:"Chromatic Percussion",label:"Music Box"},{number:11,group:"Chromatic Percussion",label:"Vibraphone"},{number:12,group:"Chromatic Percussion",label:"Marimba"},{number:13,group:"Chromatic Percussion",label:"Xylophone"},{number:14,group:"Chromatic Percussion",label:"Tubular Bells"},{number:15,group:"Chromatic Percussion",label:"Dulcimer"},{number:16,group:"Organ",label:"Drawbar Organ"},{number:17,group:"Organ",label:"Percussive Organ"},{number:18,group:"Organ",label:"Rock Organ"},{number:19,group:"Organ",label:"Church Organ"},{number:20,group:"Organ",label:"Reed Organ"},{number:21,group:"Organ",label:"Accordion"},{number:22,group:"Organ",label:"Harmonica"},{number:23,group:"Organ",label:"Tango Accordion"},{number:24,group:"Guitar",label:"Acoustic Guitar(nylon)"},{number:25,group:"Guitar",label:"Acoustic Guitar(steel)"},{number:26,group:"Guitar",label:"Electric Guitar(jazz)"},{number:27,group:"Guitar",label:"Electric Guitar(clean)"},{number:28,group:"Guitar",label:"Electric Guitar(muted)"},{number:29,group:"Guitar",label:"Overdriven Guitar"},{number:30,group:"Guitar",label:"Distortion Guitar"},{number:31,group:"Guitar",label:"Guitar harmonics"},{number:32,group:"Bass",label:"Acoustic Bass"},{number:33,group:"Bass",label:"Electric Bass(finger)"},{number:34,group:"Bass",label:"Electric Bass(pick)"},{number:35,group:"Bass",label:"Fretless Bass"},{number:36,group:"Bass",label:"Slap Bass 1"},{number:37,group:"Bass",label:"Slap Bass 2"},{number:38,group:"Bass",label:"Synth Bass 1"},{number:39,group:"Bass",label:"Synth Bass 2"},{number:40,group:"Strings",label:"Violin"},{number:41,group:"Strings",label:"Viola"},{number:42,group:"Strings",label:"Cello"},{number:43,group:"Strings",label:"Contrabass"},{number:44,group:"Strings",label:"Tremolo Strings"},{number:45,group:"Strings",label:"Pizzicato Strings"},{number:46,group:"Strings",label:"Orchestral Harp"},{number:47,group:"Strings",label:"Timpani"},{number:48,group:"Strings (continued)",label:"String Ensemble 1"},{number:49,group:"Strings (continued)",label:"String Ensemble 2"},{number:50,group:"Strings (continued)",label:"Synth Strings 1"},{number:51,group:"Strings (continued)",label:"Synth Strings 2"},{number:52,group:"Strings (continued)",label:"Choir Aahs"},{number:53,group:"Strings (continued)",label:"Voice Oohs"},{number:54,group:"Strings (continued)",label:"Synth Voice"},{number:55,group:"Strings (continued)",label:"Orchestra Hit"},{number:56,group:"Brass",label:"Trumpet"},{number:57,group:"Brass",label:"Trombone"},{number:58,group:"Brass",label:"Tuba"},{number:59,group:"Brass",label:"Muted Trumpet"},{number:60,group:"Brass",label:"French Horn"},{number:61,group:"Brass",label:"Brass Section"},{number:62,group:"Brass",label:"Synth Brass 1"},{number:63,group:"Brass",label:"Synth Brass 2"},{number:64,group:"Reed",label:"Soprano Sax"},{number:65,group:"Reed",label:"Alto Sax"},{number:66,group:"Reed",label:"Tenor Sax"},{number:67,group:"Reed",label:"Baritone Sax"},{number:68,group:"Reed",label:"Oboe"},{number:69,group:"Reed",label:"English Horn"},{number:70,group:"Reed",label:"Bassoon"},{number:71,group:"Reed",label:"Clarinet"},{number:72,group:"Pipe",label:"Piccolo"},{number:73,group:"Pipe",label:"Flute"},{number:74,group:"Pipe",label:"Recorder"},{number:75,group:"Pipe",label:"Pan Flute"},{number:76,group:"Pipe",label:"Blown Bottle"},{number:77,group:"Pipe",label:"Shakuhachi"},{number:78,group:"Pipe",label:"Whistle"},{number:79,group:"Pipe",label:"Ocarina"},{number:80,group:"Synth Lead",label:"Lead 1(square)"},{number:81,group:"Synth Lead",label:"Lead 2(sawtooth)"},{number:82,group:"Synth Lead",label:"Lead 3(calliope)"},{number:83,group:"Synth Lead",label:"Lead 4(chiff)"},{number:84,group:"Synth Lead",label:"Lead 5(charang)"},{number:85,group:"Synth Lead",label:"Lead 6(voice)"},{number:86,group:"Synth Lead",label:"Lead 7(fifths)"},{number:87,group:"Synth Lead",label:"Lead 8(bass + lead)"},{number:88,group:"Synth Pad",label:"Pad 1(new age)"},{number:89,group:"Synth Pad",label:"Pad 2(warm)"},{number:90,group:"Synth Pad",label:"Pad 3(polysynth)"},{number:91,group:"Synth Pad",label:"Pad 4(choir)"},{number:92,group:"Synth Pad",label:"Pad 5(bowed)"},{number:93,group:"Synth Pad",label:"Pad 6(metallic)"},{number:94,group:"Synth Pad",label:"Pad 7(halo)"},{number:95,group:"Synth Pad",label:"Pad 8(sweep)"},{number:96,group:"Synth Effects",label:"FX 1(rain)"},{number:97,group:"Synth Effects",label:"FX 2(soundtrack)"},{number:98,group:"Synth Effects",label:"FX 3(crystal)"},{number:99,group:"Synth Effects",label:"FX 4(atmosphere)"},{number:100,group:"Synth Effects",label:"FX 5(brightness)"},{number:101,group:"Synth Effects",label:"FX 6(goblins)"},{number:102,group:"Synth Effects",label:"FX 7(echoes)"},{number:103,group:"Synth Effects",label:"FX 8(sci-fi)"},{number:104,group:"Ethnic",label:"Sitar"},{number:105,group:"Ethnic",label:"Banjo"},{number:106,group:"Ethnic",label:"Shamisen"},{number:107,group:"Ethnic",label:"Koto"},{number:108,group:"Ethnic",label:"Kalimba"},{number:109,group:"Ethnic",label:"Bag pipe"},{number:110,group:"Ethnic",label:"Fiddle"},{number:111,group:"Ethnic",label:"Shanai"},{number:112,group:"Percussive",label:"Tinkle Bell"},{number:113,group:"Percussive",label:"Agogo"},{number:114,group:"Percussive",label:"Steel Drums"},{number:115,group:"Percussive",label:"Woodblock"},{number:116,group:"Percussive",label:"Taiko Drum"},{number:117,group:"Percussive",label:"Melodic Tom"},{number:118,group:"Percussive",label:"Synth Drum"},{number:119,group:"Sound Effects",label:"Reverse Cymbal"},{number:120,group:"Sound Effects",label:"Guitar Fret Noise"},{number:121,group:"Sound Effects",label:"Breath Noise"},{number:122,group:"Sound Effects",label:"Seashore"},{number:123,group:"Sound Effects",label:"Bird Tweet"},{number:124,group:"Sound Effects",label:"Telephone Ring"},{number:125,group:"Sound Effects",label:"Helicopter"},{number:126,group:"Sound Effects",label:"Applause"},{number:127,group:"Sound Effects",label:"Gunshot"}],yl=[{number:1,subnumber:0,group:"Piano",label:"Acoustic Grand Piano"},{number:1,subnumber:1,group:"Piano",label:"Wide Acoustic Grand"},{number:1,subnumber:2,group:"Piano",label:"Dark Acoustic Grand"},{number:2,subnumber:0,group:"Piano",label:"Bright Acoustic Piano"},{number:2,subnumber:1,group:"Piano",label:"Wide Bright Acoustic"},{number:3,subnumber:0,group:"Piano",label:"Electric Grand Piano"},{number:3,subnumber:1,group:"Piano",label:"Wide Electric Grand"},{number:4,subnumber:0,group:"Piano",label:"Honky-tonk Piano"},{number:4,subnumber:1,group:"Piano",label:"Wide Honky-tonk"},{number:5,subnumber:0,group:"Piano",label:"Rhodes Piano"},{number:5,subnumber:1,group:"Piano",label:"Detuned Electric Piano 1"},{number:5,subnumber:2,group:"Piano",label:"Electric Piano 1 Variation"},{number:5,subnumber:3,group:"Piano",label:"60's Electric Piano"},{number:6,subnumber:0,group:"Piano",label:"Chorused Electric Piano"},{number:6,subnumber:1,group:"Piano",label:"Detuned Electric Piano 2"},{number:6,subnumber:2,group:"Piano",label:"Electric Piano 2 Variation"},{number:6,subnumber:3,group:"Piano",label:"Electric Piano Legend"},{number:6,subnumber:4,group:"Piano",label:"Electric Piano Phase"},{number:7,subnumber:0,group:"Piano",label:"Harpsichord"},{number:7,subnumber:1,group:"Piano",label:"Coupled Harpsichord"},{number:7,subnumber:2,group:"Piano",label:"Wide Harpsichord"},{number:7,subnumber:3,group:"Piano",label:"Open Harpsichord"},{number:8,subnumber:0,group:"Piano",label:"Clavinet"},{number:8,subnumber:1,group:"Piano",label:"Pulse Clavinet"},{number:9,subnumber:0,group:"Chromatic Percussion",label:"Celesta"},{number:10,subnumber:0,group:"Chromatic Percussion",label:"Glockenspiel"},{number:11,subnumber:0,group:"Chromatic Percussion",label:"Music Box"},{number:12,subnumber:0,group:"Chromatic Percussion",label:"Vibraphone"},{number:12,subnumber:1,group:"Chromatic Percussion",label:"Wet Vibraphone"},{number:13,subnumber:0,group:"Chromatic Percussion",label:"Marimba"},{number:13,subnumber:1,group:"Chromatic Percussion",label:"Wide Marimba"},{number:14,subnumber:0,group:"Chromatic Percussion",label:"Xylophone"},{number:15,subnumber:0,group:"Chromatic Percussion",label:"Tubular Bells"},{number:15,subnumber:1,group:"Chromatic Percussion",label:"Church Bells"},{number:15,subnumber:2,group:"Chromatic Percussion",label:"Carillon"},{number:16,subnumber:0,group:"Chromatic Percussion",label:"Dulcimer / Santur"},{number:17,subnumber:0,group:"Organ",label:"Hammond Organ"},{number:17,subnumber:1,group:"Organ",label:"Detuned Organ 1"},{number:17,subnumber:2,group:"Organ",label:"60's Organ 1"},{number:17,subnumber:3,group:"Organ",label:"Organ 4"},{number:18,subnumber:0,group:"Organ",label:"Percussive Organ"},{number:18,subnumber:1,group:"Organ",label:"Detuned Organ 2"},{number:18,subnumber:2,group:"Organ",label:"Organ 5"},{number:19,subnumber:0,group:"Organ",label:"Rock Organ"},{number:20,subnumber:0,group:"Organ",label:"Church Organ 1"},{number:20,subnumber:1,group:"Organ",label:"Church Organ 2"},{number:20,subnumber:2,group:"Organ",label:"Church Organ 3"},{number:21,subnumber:0,group:"Organ",label:"Reed Organ"},{number:21,subnumber:1,group:"Organ",label:"Puff Organ"},{number:22,subnumber:0,group:"Organ",label:"French Accordion"},{number:22,subnumber:1,group:"Organ",label:"Italian Accordion"},{number:23,subnumber:0,group:"Organ",label:"Harmonica"},{number:24,subnumber:0,group:"Organ",label:"Bandoneon"},{number:25,subnumber:0,group:"Guitar",label:"Nylon-String Guitar"},{number:25,subnumber:1,group:"Guitar",label:"Ukelele"},{number:25,subnumber:2,group:"Guitar",label:"Open Nylon Guitar"},{number:25,subnumber:3,group:"Guitar",label:"Nylon Guitar 2"},{number:26,subnumber:0,group:"Guitar",label:"Steel-String Guitar"},{number:26,subnumber:1,group:"Guitar",label:"12-String Guitar"},{number:26,subnumber:2,group:"Guitar",label:"Mandolin"},{number:26,subnumber:3,group:"Guitar",label:"Steel + Body"},{number:27,subnumber:0,group:"Guitar",label:"Jazz Guitar"},{number:27,subnumber:1,group:"Guitar",label:"Hawaiian Guitar"},{number:28,subnumber:0,group:"Guitar",label:"Clean Electric Guitar"},{number:28,subnumber:1,group:"Guitar",label:"Chorus Guitar"},{number:28,subnumber:2,group:"Guitar",label:"Mid Tone Guitar"},{number:29,subnumber:0,group:"Guitar",label:"Muted Electric Guitar"},{number:29,subnumber:1,group:"Guitar",label:"Funk Guitar"},{number:29,subnumber:2,group:"Guitar",label:"Funk Guitar 2"},{number:29,subnumber:3,group:"Guitar",label:"Jazz Man"},{number:30,subnumber:0,group:"Guitar",label:"Overdriven Guitar"},{number:30,subnumber:1,group:"Guitar",label:"Guitar Pinch"},{number:31,subnumber:0,group:"Guitar",label:"Distortion Guitar"},{number:31,subnumber:1,group:"Guitar",label:"Feedback Guitar"},{number:31,subnumber:2,group:"Guitar",label:"Distortion Rtm Guitar"},{number:32,subnumber:0,group:"Guitar",label:"Guitar Harmonics"},{number:32,subnumber:1,group:"Guitar",label:"Guitar Feedback"},{number:33,subnumber:0,group:"Bass",label:"Acoustic Bass"},{number:34,subnumber:0,group:"Bass",label:"Fingered Bass"},{number:34,subnumber:1,group:"Bass",label:"Finger Slap"},{number:35,subnumber:0,group:"Bass",label:"Picked Bass"},{number:36,subnumber:0,group:"Bass",label:"Fretless Bass"},{number:37,subnumber:0,group:"Bass",label:"Slap Bass 1"},{number:38,subnumber:0,group:"Bass",label:"Slap Bass 2"},{number:39,subnumber:0,group:"Bass",label:"Synth Bass 1"},{number:39,subnumber:1,group:"Bass",label:"Synth Bass 101"},{number:39,subnumber:2,group:"Bass",label:"Synth Bass 3"},{number:39,subnumber:3,group:"Bass",label:"Clavi Bass"},{number:39,subnumber:4,group:"Bass",label:"Hammer"},{number:40,subnumber:0,group:"Bass",label:"Synth Bass 2"},{number:40,subnumber:1,group:"Bass",label:"Synth Bass 4"},{number:40,subnumber:2,group:"Bass",label:"Rubber Bass"},{number:40,subnumber:3,group:"Bass",label:"Attack Pulse"},{number:41,subnumber:0,group:"Strings",label:"Violin"},{number:41,subnumber:1,group:"Strings",label:"Slow Violin"},{number:42,subnumber:0,group:"Strings",label:"Viola"},{number:43,subnumber:0,group:"Strings",label:"Cello"},{number:44,subnumber:0,group:"Strings",label:"Contrabass"},{number:45,subnumber:0,group:"Strings",label:"Tremolo Strings"},{number:46,subnumber:0,group:"Strings",label:"Pizzicato Strings"},{number:47,subnumber:0,group:"Strings",label:"Harp"},{number:47,subnumber:1,group:"Strings",label:"Yang Qin"},{number:48,subnumber:0,group:"Strings",label:"Timpani"},{number:49,subnumber:0,group:"Orchestral Ensemble",label:"String Ensemble"},{number:49,subnumber:1,group:"Orchestral Ensemble",label:"Orchestra Strings"},{number:49,subnumber:2,group:"Orchestral Ensemble",label:"60's Strings"},{number:50,subnumber:0,group:"Orchestral Ensemble",label:"Slow String Ensemble"},{number:51,subnumber:0,group:"Orchestral Ensemble",label:"Synth Strings 1"},{number:51,subnumber:1,group:"Orchestral Ensemble",label:"Synth Strings 3"},{number:52,subnumber:0,group:"Orchestral Ensemble",label:"Synth Strings 2"},{number:53,subnumber:0,group:"Orchestral Ensemble",label:"Choir Aahs"},{number:53,subnumber:1,group:"Orchestral Ensemble",label:"Choir Aahs 2"},{number:54,subnumber:0,group:"Orchestral Ensemble",label:"Voice Oohs"},{number:54,subnumber:1,group:"Orchestral Ensemble",label:"Humming"},{number:55,subnumber:0,group:"Orchestral Ensemble",label:"Synth Voice"},{number:55,subnumber:1,group:"Orchestral Ensemble",label:"Analog Voice"},{number:56,subnumber:0,group:"Orchestral Ensemble",label:"Orchestra Hit"},{number:56,subnumber:1,group:"Orchestral Ensemble",label:"Bass Hit"},{number:56,subnumber:2,group:"Orchestral Ensemble",label:"6th Hit"},{number:56,subnumber:3,group:"Orchestral Ensemble",label:"Euro Hit"},{number:57,subnumber:0,group:"Brass",label:"Trumpet"},{number:57,subnumber:1,group:"Brass",label:"Dark Trumpet"},{number:58,subnumber:0,group:"Brass",label:"Trombone"},{number:58,subnumber:1,group:"Brass",label:"Trombone 2"},{number:58,subnumber:2,group:"Brass",label:"Bright Trombone"},{number:59,subnumber:0,group:"Brass",label:"Tuba"},{number:60,subnumber:0,group:"Brass",label:"Muted Trumpet"},{number:60,subnumber:1,group:"Brass",label:"Muted Trumpet 2"},{number:61,subnumber:0,group:"Brass",label:"French Horn"},{number:61,subnumber:1,group:"Brass",label:"French Horn 2"},{number:62,subnumber:0,group:"Brass",label:"Brass Section"},{number:62,subnumber:1,group:"Brass",label:"Brass Section"},{number:63,subnumber:0,group:"Brass",label:"Synth Brass 1"},{number:63,subnumber:1,group:"Brass",label:"Synth Brass 3"},{number:63,subnumber:2,group:"Brass",label:"Analog Brass 1"},{number:63,subnumber:3,group:"Brass",label:"Jump Brass"},{number:64,subnumber:0,group:"Brass",label:"Synth Brass 2"},{number:64,subnumber:1,group:"Brass",label:"Synth Brass 4"},{number:64,subnumber:2,group:"Brass",label:"Analog Brass 2"},{number:65,subnumber:0,group:"Reed",label:"Soprano Sax"},{number:66,subnumber:0,group:"Reed",label:"Alto Sax"},{number:67,subnumber:0,group:"Reed",label:"Tenor Sax"},{number:68,subnumber:0,group:"Reed",label:"Baritone Sax"},{number:69,subnumber:0,group:"Reed",label:"Oboe"},{number:70,subnumber:0,group:"Reed",label:"English Horn"},{number:71,subnumber:0,group:"Reed",label:"Bassoon"},{number:72,subnumber:0,group:"Reed",label:"Clarinet"},{number:73,subnumber:0,group:"Wind",label:"Piccolo"},{number:74,subnumber:0,group:"Wind",label:"Flute"},{number:75,subnumber:0,group:"Wind",label:"Recorder"},{number:76,subnumber:0,group:"Wind",label:"Pan Flute"},{number:77,subnumber:0,group:"Wind",label:"Blown Bottle"},{number:78,subnumber:0,group:"Wind",label:"Shakuhachi"},{number:79,subnumber:0,group:"Wind",label:"Whistle"},{number:80,subnumber:0,group:"Wind",label:"Ocarina"},{number:81,subnumber:0,group:"Lead",label:"Square Lead"},{number:81,subnumber:1,group:"Lead",label:"Square Wave"},{number:81,subnumber:2,group:"Lead",label:"Sine Wave"},{number:82,subnumber:0,group:"Lead",label:"Saw Lead"},{number:82,subnumber:1,group:"Lead",label:"Saw Wave"},{number:82,subnumber:2,group:"Lead",label:"Doctor Solo"},{number:82,subnumber:3,group:"Lead",label:"Natural Lead"},{number:82,subnumber:4,group:"Lead",label:"Sequenced Saw"},{number:83,subnumber:0,group:"Lead",label:"Synth Calliope"},{number:84,subnumber:0,group:"Lead",label:"Chiffer Lead"},{number:85,subnumber:0,group:"Lead",label:"Charang"},{number:85,subnumber:1,group:"Lead",label:"Wire Lead"},{number:86,subnumber:0,group:"Lead",label:"Solo Synth Vox"},{number:87,subnumber:0,group:"Lead",label:"5th Saw Wave"},{number:88,subnumber:0,group:"Lead",label:"Bass & Lead"},{number:88,subnumber:1,group:"Lead",label:"Delayed Lead"},{number:89,subnumber:0,group:"Synth Pad",label:"Fantasia Pad"},{number:90,subnumber:0,group:"Synth Pad",label:"Warm Pad"},{number:90,subnumber:1,group:"Synth Pad",label:"Sine Pad"},{number:91,subnumber:0,group:"Synth Pad",label:"Polysynth Pad"},{number:92,subnumber:0,group:"Synth Pad",label:"Space Voice Pad"},{number:92,subnumber:1,group:"Synth Pad",label:"Itopia"},{number:93,subnumber:0,group:"Synth Pad",label:"Bowed Glass Pad"},{number:94,subnumber:0,group:"Synth Pad",label:"Metal Pad"},{number:95,subnumber:0,group:"Synth Pad",label:"Halo Pad"},{number:96,subnumber:0,group:"Synth Pad",label:"Sweep Pad"},{number:97,subnumber:0,group:"Synth Effects",label:"Ice Rain"},{number:98,subnumber:0,group:"Synth Effects",label:"Soundtrack"},{number:99,subnumber:0,group:"Synth Effects",label:"Crystal"},{number:99,subnumber:1,group:"Synth Effects",label:"Synth Mallet"},{number:100,subnumber:0,group:"Synth Effects",label:"Atmosphere"},{number:101,subnumber:0,group:"Synth Effects",label:"Brightness"},{number:102,subnumber:0,group:"Synth Effects",label:"Goblin"},{number:103,subnumber:0,group:"Synth Effects",label:"Echo Drops"},{number:103,subnumber:1,group:"Synth Effects",label:"Echo Bell"},{number:103,subnumber:2,group:"Synth Effects",label:"Echo Pan"},{number:104,subnumber:0,group:"Synth Effects",label:"Star Theme"},{number:105,subnumber:0,group:"Ethnic",label:"Sitar"},{number:105,subnumber:1,group:"Ethnic",label:"Sitar 2"},{number:106,subnumber:0,group:"Ethnic",label:"Banjo"},{number:107,subnumber:0,group:"Ethnic",label:"Shamisen"},{number:108,subnumber:0,group:"Ethnic",label:"Koto"},{number:108,subnumber:1,group:"Ethnic",label:"Taisho Koto"},{number:109,subnumber:0,group:"Ethnic",label:"Kalimba"},{number:110,subnumber:0,group:"Ethnic",label:"Bagpipe"},{number:111,subnumber:0,group:"Ethnic",label:"Fiddle"},{number:112,subnumber:0,group:"Ethnic",label:"Shanai"},{number:113,subnumber:0,group:"Percussive",label:"Tinkle Bell"},{number:114,subnumber:0,group:"Percussive",label:"Agogo"},{number:115,subnumber:0,group:"Percussive",label:"Steel Drums"},{number:116,subnumber:0,group:"Percussive",label:"Woodblock"},{number:116,subnumber:1,group:"Percussive",label:"Castanets"},{number:117,subnumber:0,group:"Percussive",label:"Taiko Drum"},{number:117,subnumber:1,group:"Percussive",label:"Concert Bass Drum"},{number:118,subnumber:0,group:"Percussive",label:"Melodic Tom 1"},{number:118,subnumber:1,group:"Percussive",label:"Melodic Tom 2"},{number:119,subnumber:0,group:"Percussive",label:"Synth Drum"},{number:119,subnumber:1,group:"Percussive",label:"808 Tom"},{number:119,subnumber:2,group:"Percussive",label:"Electric Percussion"},{number:120,subnumber:0,group:"Percussive",label:"Reverse Cymbal"},{number:121,subnumber:0,group:"Sound Effects",label:"Guitar Fret Noise"},{number:121,subnumber:1,group:"Sound Effects",label:"Guitar Cut Noise"},{number:121,subnumber:2,group:"Sound Effects",label:"String Slap"},{number:122,subnumber:0,group:"Sound Effects",label:"Breath Noise"},{number:122,subnumber:1,group:"Sound Effects",label:"Flute Key Click"},{number:123,subnumber:0,group:"Sound Effects",label:"Seashore"},{number:123,subnumber:1,group:"Sound Effects",label:"Rain"},{number:123,subnumber:2,group:"Sound Effects",label:"Thunder"},{number:123,subnumber:3,group:"Sound Effects",label:"Wind"},{number:123,subnumber:4,group:"Sound Effects",label:"Stream"},{number:123,subnumber:5,group:"Sound Effects",label:"Bubble"},{number:124,subnumber:0,group:"Sound Effects",label:"Bird Tweet"},{number:124,subnumber:1,group:"Sound Effects",label:"Dog"},{number:124,subnumber:2,group:"Sound Effects",label:"Horse Gallop"},{number:124,subnumber:3,group:"Sound Effects",label:"Bird 2"},{number:125,subnumber:0,group:"Sound Effects",label:"Telephone 1"},{number:125,subnumber:1,group:"Sound Effects",label:"Telephone 2"},{number:125,subnumber:2,group:"Sound Effects",label:"Door Creaking"},{number:125,subnumber:3,group:"Sound Effects",label:"Door Closing"},{number:125,subnumber:4,group:"Sound Effects",label:"Scratch"},{number:125,subnumber:5,group:"Sound Effects",label:"Wind Chimes"},{number:126,subnumber:0,group:"Sound Effects",label:"Helicopter"},{number:126,subnumber:1,group:"Sound Effects",label:"Car Engine"},{number:126,subnumber:2,group:"Sound Effects",label:"Car Stop"},{number:126,subnumber:3,group:"Sound Effects",label:"Car Pass"},{number:126,subnumber:4,group:"Sound Effects",label:"Car Crash"},{number:126,subnumber:5,group:"Sound Effects",label:"Siren"},{number:126,subnumber:6,group:"Sound Effects",label:"Train"},{number:126,subnumber:7,group:"Sound Effects",label:"Jetplane"},{number:126,subnumber:8,group:"Sound Effects",label:"Starship"},{number:126,subnumber:9,group:"Sound Effects",label:"Burst Noise"},{number:127,subnumber:0,group:"Sound Effects",label:"Applause"},{number:127,subnumber:1,group:"Sound Effects",label:"Laughing"},{number:127,subnumber:2,group:"Sound Effects",label:"Screaming"},{number:127,subnumber:3,group:"Sound Effects",label:"Punch"},{number:127,subnumber:4,group:"Sound Effects",label:"Heart Beat"},{number:127,subnumber:5,group:"Sound Effects",label:"Footsteps"},{number:128,subnumber:0,group:"Sound Effects",label:"Gun Shot"},{number:128,subnumber:1,group:"Sound Effects",label:"Machine Gun"},{number:128,subnumber:2,group:"Sound Effects",label:"Lasergun"},{number:128,subnumber:3,group:"Sound Effects",label:"Explosion"}],Ml=new Map([[27,"High Q(GM2)"],[28,"Slap(GM2)"],[29,"Scratch Push(GM2)"],[30,"Scratch Pull(GM2)"],[31,"Sticks(GM2)"],[32,"Square Click(GM2)"],[33,"Metronome Click(GM2)"],[34,"Metronome Bell(GM2)"],[35,"Bass Drum 2"],[36,"Bass Drum 1"],[37,"Side Stick"],[38,"Snare Drum 1"],[39,"Hand Clap"],[40,"Snare Drum 2"],[41,"Low Tom 2"],[42,"Closed Hi-hat"],[43,"Low Tom 1"],[44,"Pedal Hi-hat"],[45,"Mid Tom 2"],[46,"Open Hi-hat"],[47,"Mid Tom 1"],[48,"High Tom 2"],[49,"Crash Cymbal 1"],[50,"High Tom 1"],[51,"Ride Cymbal 1"],[52,"Chinese Cymbal"],[53,"Ride Bell"],[54,"Tambourine"],[55,"Splash Cymbal"],[56,"Cowbell"],[57,"Crash Cymbal 2"],[58,"Vibra Slap"],[59,"Ride Cymbal 2"],[60,"High Bongo"],[61,"Low Bongo"],[62,"Mute High Conga"],[63,"Open High Conga"],[64,"Low Conga"],[65,"High Timbale"],[66,"Low Timbale"],[67,"High Agogo"],[68,"Low Agogo"],[69,"Cabasa"],[70,"Maracas"],[71,"Short Whistle"],[72,"Long Whistle"],[73,"Short Guiro"],[74,"Long Guiro"],[75,"Claves"],[76,"High Wood Block"],[77,"Low Wood Block"],[78,"Mute Cuica"],[79,"Open Cuica"],[80,"Mute Triangle"],[81,"Open Triangle"],[82,"Shaker(GM2)"],[83,"Jingle Bell(GM2)"],[84,"Belltree(GM2)"],[85,"Castanets(GM2)"],[86,"Mute Surdo(GM2)"],[87,"Open Surdo(GM2)"]]),vl=[{instrNr:40,nrL2:-1,subNrL2:-1,label:"Violin",min:55,max:103},{instrNr:41,nrL2:-1,subNrL2:-1,label:"Viola",min:48,max:91},{instrNr:42,nrL2:-1,subNrL2:-1,label:"Cello",min:36,max:76},{instrNr:-1,nrL2:-1,subNrL2:-1,label:"Double Bass",min:28,max:67},{instrNr:-1,nrL2:-1,subNrL2:-1,label:"Bass Guitar",min:28,max:67},{instrNr:-1,nrL2:-1,subNrL2:-1,label:"Acoustic Guitar",min:40,max:88},{instrNr:58,nrL2:59,subNrL2:0,label:"Tuba",min:28,max:58},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Bass Trombone",min:34,max:67},{instrNr:0,nrL2:-1,subNrL2:-1,label:"French Horn",min:34,max:77},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Trombone",min:40,max:72},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Trumpet",min:55,max:82},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Piccolo",min:74,max:102},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Flute",min:60,max:96},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Oboe",min:58,max:91},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Alto Flute",min:55,max:91},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Cor Anglais (English Horn)",min:52,max:81},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Clarinet",min:50,max:94},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Bass Clarinet",min:38,max:77},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Bassoon",min:34,max:75},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Contrabassoon",min:22,max:53},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Soprano Recorder",min:72,max:98},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Alto Recorder",min:65,max:91},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Tenor Recorder",min:60,max:86},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Bass Recorder",min:53,max:79},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Baritone Sax",min:36,max:69},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Tenor Sax",min:44,max:76},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Alto Sax",min:49,max:81},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Soprano Sax",min:56,max:88},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Glockenspiel",min:79,max:108},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Xylophone",min:65,max:108},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Vibraphone",min:53,max:89},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Marimba",min:45,max:96},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Bass Marimba",min:33,max:81},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Celeste",min:60,max:108},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Tubular Bells",min:60,max:77},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Timpani",min:40,max:55},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Harpsichord",min:29,max:89},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Kalimba",min:60,max:88},{instrNr:0,nrL2:-1,subNrL2:-1,label:"Harp",min:24,max:103}];for(let e of mi)ui.set(e.pitch,e),ir.set(e.label,e);for(let e of xl)li.set(e.number,e);for(let e of yl){let t=`${e.number}-${e.subnumber}`;ci.set(t,e)}var tt=class{constructor(t=0,n=0,r=127,o=0,i=null){if(t<0||t>127)throw new Error(`Invalid pitch ${t}`);try{this.name=W(t).label}catch{throw new Error(`Invalid pitch ${t}`)}this.pitch=t,this.start=n,this.velocity=r,this.channel=o,this.end=i}static from(t){let{pitch:n=0,start:r=0,velocity:o=127,channel:i=0,end:a=null,duration:s=null}=t;if(typeof n=="string"&&Number.isNaN(+n)){let u=oe(n);if(u==null)throw new Error("Invalid pitch for Note.from()");n=u.pitch}return a==null&&s!==null&&!Number.isNaN(s)&&(a=r+s),new tt(n,r,o,i,a)}static startPitchComparator(t,n){return t.start!==n.start?t.start-n.start:t.pitch-n.pitch}clone(){return new tt(this.pitch,this.start,this.velocity,this.channel,this.end)}getDuration(){return this.end===null?0:this.end-this.start}getName(){return this.name}getLetter(){return W(this.pitch).name}getOctave(){return W(this.pitch).octave}shiftTime(t){let n=this.clone();return n.start+=t,n.end=n.end===null?null:n.end+t,n}scaleTime(t){let n=this.clone();return n.start*=t,n.end=n.end===null?null:n.end*t,n}overlapsInTime(t){return this.start>=t.start&&this.start<=t.end||this.end>=t.start&&this.end<=t.end}overlapInSeconds(t){if(!this.overlapsInTime(t))return 0;let n=Math.max(this.start,t.start);return Math.min(this.end,t.end)-n}equals(t){return t instanceof tt?this.pitch===t.pitch&&this.start===t.start&&this.velocity===t.velocity&&this.channel===t.channel&&this.end===t.end:!1}toString(t=!1){return t?`Note(n: ${this.name}, p: ${this.pitch}, s: ${this.start}, e: ${this.end}, v: ${this.velocity}, c: ${this.channel})`:`Note(name: ${this.name}, pitch: ${this.pitch}, start: ${this.start}, end: ${this.end}, velocity: ${this.velocity}, channel: ${this.channel})`}},M=tt;var Oe=class extends M{constructor(t=0,n=0,r=127,o=0,i=null,a=null,s=null){super(t,n,r,o,i);this.string=a,this.fret=s}static from(t){let{pitch:n=0,start:r=0,velocity:o=127,channel:i=0,end:a=null,string:s=null,fret:u=null}=t;if(typeof n=="string"&&Number.isNaN(+n)){let l=oe(n);if(l==null)throw new Error("Invalid pitch for GuitarNote.from()");n=l.pitch}return new Oe(n,r,o,i,a,s,u)}static fromNote(t,n,r){return new Oe(t.pitch,t.start,t.velocity,t.channel,t.end,n,r)}toNote(){return new M(this.pitch,this.start,this.velocity,this.channel,this.end)}clone(){return new Oe(this.pitch,this.start,this.velocity,this.channel,this.end,this.string,this.fret)}equals(t){return t instanceof Oe?this.pitch===t.pitch&&this.start===t.start&&this.velocity===t.velocity&&this.channel===t.channel&&this.end===t.end&&this.string===t.string&&this.fret===t.fret:!1}toString(t=!1){return t?`GuitarNote(n: ${this.name}, p: ${this.pitch}, s: ${this.start}, e: ${this.end}, v: ${this.velocity}, c: ${this.channel}, s: ${this.string}, f: ${this.fret})`:`GuitarNote(name: ${this.name}, pitch: ${this.pitch}, start: ${this.start}, end: ${this.end}, velocity: ${this.velocity}, channel: ${this.channel}, string: ${this.string}, fret: ${this.fret})`}},Q=Oe;var Le=class extends M{constructor(t=0,n=0,r=127,o=0,i=null,a=null,s=null){super(t,n,r,o,i);this.hole=a,this.instruction=s}static from(t){let{pitch:n=0,start:r=0,velocity:o=127,channel:i=0,end:a=null,hole:s=null,instruction:u=null}=t;if(typeof n=="string"&&Number.isNaN(+n)){let l=oe(n);if(l==null)throw new Error("Invalid pitch for HarmonicaNote.from()");n=l.pitch}return new Le(n,r,o,i,a,s,u)}static fromNote(t,n,r){return new Le(t.pitch,t.start,t.velocity,t.channel,t.end,n,r)}toNote(){return new M(this.pitch,this.start,this.velocity,this.channel,this.end)}clone(){return new Le(this.pitch,this.start,this.velocity,this.channel,this.end,this.hole,this.instruction)}equals(t){return t instanceof Le?this.pitch===t.pitch&&this.start===t.start&&this.velocity===t.velocity&&this.channel===t.channel&&this.end===t.end&&this.hole===t.hole&&this.instruction===t.instruction:!1}toString(t=!1){return t?`HarmonicaNote(n: ${this.name}, p: ${this.pitch}, s: ${this.start}, e: ${this.end}, v: ${this.velocity}, c: ${this.channel}, h: ${this.hole}, i: ${this.instruction})`:`HarmonicaNote(name: ${this.name}, pitch: ${this.pitch}, start: ${this.start}, end: ${this.end}, velocity: ${this.velocity}, channel: ${this.channel}, hole: ${this.hole}, instruction: ${this.instruction})`}},pi=Le;function nt(e,t){return et?1:e>=t?0:NaN}function sr(e){let t=e,n=e;e.length===1&&(t=(a,s)=>e(a)-s,n=Pl(e));function r(a,s,u,l){for(u==null&&(u=0),l==null&&(l=a.length);u>>1;n(a[c],s)<0?u=c+1:l=c}return u}function o(a,s,u,l){for(u==null&&(u=0),l==null&&(l=a.length);u>>1;n(a[c],s)>0?l=c:u=c+1}return u}function i(a,s,u,l){u==null&&(u=0),l==null&&(l=a.length);let c=r(a,s,u,l-1);return c>u&&t(a[c-1],s)>-t(a[c],s)?c-1:c}return{left:r,center:i,right:o}}function Pl(e){return(t,n)=>nt(e(t),n)}function ur(e){return e===null?NaN:+e}function*hi(e,t){if(t===void 0)for(let n of e)n!=null&&(n=+n)>=n&&(yield n);else{let n=-1;for(let r of e)(r=t(r,++n,e))!=null&&(r=+r)>=r&&(yield r)}}var di=sr(nt),bi=di.right,wl=di.left,Sl=sr(ur).center,lr=bi;function cr(e,t){let n=0,r,o=0,i=0;if(t===void 0)for(let a of e)a!=null&&(a=+a)>=a&&(r=a-o,o+=r/++n,i+=r*(a-o));else{let a=-1;for(let s of e)(s=t(s,++a,e))!=null&&(s=+s)>=s&&(r=s-o,o+=r/++n,i+=r*(s-o))}if(n>1)return i/(n-1)}function Yt(e,t){let n=cr(e,t);return n&&Math.sqrt(n)}function J(e,t){let n,r;if(t===void 0)for(let o of e)o!=null&&(n===void 0?o>=o&&(n=r=o):(n>o&&(n=o),r=i&&(n=r=i):(n>i&&(n=i),r=r.length)return n(i);let s=new fr,u=r[a++],l=-1;for(let c of i){let f=u(c,++l,i),m=s.get(f);m?m.push(c):s.set(f,[c])}for(let[c,f]of s)s.set(c,o(f,a));return t(s)}(e,0)}var pr=Math.sqrt(50),hr=Math.sqrt(10),dr=Math.sqrt(2);function br(e,t,n){var r,o=-1,i,a,s;if(t=+t,e=+e,n=+n,e===t&&n>0)return[e];if((r=t0){let u=Math.round(e/s),l=Math.round(t/s);for(u*st&&--l,a=new Array(i=l-u+1);++ot&&--l,a=new Array(i=l-u+1);++o=0?(i>=pr?10:i>=hr?5:i>=dr?2:1)*Math.pow(10,o):-Math.pow(10,-o)/(i>=pr?10:i>=hr?5:i>=dr?2:1)}function gr(e,t,n){var r=Math.abs(t-e)/Math.max(0,n),o=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),i=r/o;return i>=pr?o*=10:i>=hr?o*=5:i>=dr&&(o*=2),t=r)&&(n=r);else{let r=-1;for(let o of e)(o=t(o,++r,e))!=null&&(n=o)&&(n=o)}return n}function ue(e,t){let n;if(t===void 0)for(let r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let o of e)(o=t(o,++r,e))!=null&&(n>o||n===void 0&&o>=o)&&(n=o)}return n}function Kt(e,t,n=0,r=e.length-1,o=nt){for(;r>n;){if(r-n>600){let u=r-n+1,l=t-n+1,c=Math.log(u),f=.5*Math.exp(2*c/3),m=.5*Math.sqrt(c*f*(u-f)/u)*(l-u/2<0?-1:1),p=Math.max(n,Math.floor(t-l*f/u+m)),h=Math.min(r,Math.floor(t+(u-l)*f/u+m));Kt(e,t,p,h,o)}let i=e[t],a=n,s=r;for(gt(e,n,t),o(e[r],i)>0&>(e,n,r);a0;)--s}o(e[n],i)===0?gt(e,n,s):(++s,gt(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function gt(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function Ce(e,t,n){if(e=Float64Array.from(hi(e,n)),!!(r=e.length)){if((t=+t)<=0||r<2)return ue(e);if(t>=1)return D(e);var r,o=(r-1)*t,i=Math.floor(o),a=D(Kt(e,i).subarray(0,i+1)),s=ue(e.subarray(i+1));return a+(s-a)*(o-i)}}function Ge(e,t){let n=0,r=0;if(t===void 0)for(let o of e)o!=null&&(o=+o)>=o&&(++n,r+=o);else{let o=-1;for(let i of e)(i=t(i,++o,e))!=null&&(i=+i)>=i&&(++n,r+=i)}if(n)return r/n}function xr(e,t){return Ce(e,.5,t)}function xt(e,t){let n,r=-1,o=-1;if(t===void 0)for(let i of e)++o,i!=null&&(n>i||n===void 0&&i>=i)&&(n=i,r=o);else for(let i of e)(i=t(i,++o,e))!=null&&(n>i||n===void 0&&i>=i)&&(n=i,r=o);return r}function yt(e,...t){e=new Set(e);for(let n of t)for(let r of n)e.delete(r);return e}function yr(e){return e instanceof Set?e:new Set(e)}function rt(e,...t){e=new Set(e),t=t.map(yr);e:for(let n of e)for(let r of t)if(!r.has(n)){e.delete(n);continue e}return e}function Jt(...e){let t=new Set;for(let n of e)for(let r of n)t.add(r);return t}var Nl={value:()=>{}};function yi(){for(var e=0,t=arguments.length,n={},r;e=0&&(r=n.slice(o+1),n=n.slice(0,o)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:r}})}Qt.prototype=yi.prototype={constructor:Qt,on:function(e,t){var n=this._,r=Il(e+"",n),o,i=-1,a=r.length;if(arguments.length<2){for(;++i0)for(var n=new Array(o),r=0,o,i;r=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),vr.hasOwnProperty(t)?{space:vr[t],local:e}:e}function kl(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===Zt&&t.documentElement.namespaceURI===Zt?t.createElement(e):t.createElementNS(n,e)}}function El(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function en(e){var t=Me(e);return(t.local?El:kl)(t)}function Rl(){}function qe(e){return e==null?Rl:function(){return this.querySelector(e)}}function Mi(e){typeof e!="function"&&(e=qe(e));for(var t=this._groups,n=t.length,r=new Array(n),o=0;o=P&&(P=S+1);!(_=b[P])&&++P=0;)(a=r[o])&&(i&&a.compareDocumentPosition(i)^4&&i.parentNode.insertBefore(a,i),i=a);return this}function ki(e){e||(e=Vl);function t(f,m){return f&&m?e(f.__data__,m.__data__):!f-!m}for(var n=this._groups,r=n.length,o=new Array(r),i=0;it?1:e>=t?0:NaN}function Ei(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function Ri(){return Array.from(this)}function Fi(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?Zl:typeof t=="function"?tc:ec)(e,t,n??"")):Ne(this.node(),e)}function Ne(e,t){return e.style.getPropertyValue(t)||on(e).getComputedStyle(e,null).getPropertyValue(t)}function nc(e){return function(){delete this[e]}}function rc(e,t){return function(){this[e]=t}}function oc(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function $i(e,t){return arguments.length>1?this.each((t==null?nc:typeof t=="function"?oc:rc)(e,t)):this.node()[e]}function ji(e){return e.trim().split(/^|\s+/)}function Pr(e){return e.classList||new Hi(e)}function Hi(e){this._node=e,this._names=ji(e.getAttribute("class")||"")}Hi.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function zi(e,t){for(var n=Pr(e),r=-1,o=t.length;++r=0&&(n=t.slice(r+1),t=t.slice(0,r)),{type:t,name:n}})}function Pc(e){return function(){var t=this.__on;if(!!t){for(var n=0,r=-1,o=t.length,i;n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?an(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?an(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Nc.exec(e))?new U(t[1],t[2],t[3],1):(t=Ic.exec(e))?new U(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Dc.exec(e))?an(t[1],t[2],t[3],t[4]):(t=kc.exec(e))?an(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Ec.exec(e))?pa(t[1],t[2]/100,t[3]/100,1):(t=Rc.exec(e))?pa(t[1],t[2]/100,t[3]/100,t[4]):sa.hasOwnProperty(e)?ca(sa[e]):e==="transparent"?new U(NaN,NaN,NaN,0):null}function ca(e){return new U(e>>16&255,e>>8&255,e&255,1)}function an(e,t,n,r){return r<=0&&(e=t=n=NaN),new U(e,t,n,r)}function Ar(e){return e instanceof je||(e=X(e)),e?(e=e.rgb(),new U(e.r,e.g,e.b,e.opacity)):new U}function at(e,t,n,r){return arguments.length===1?Ar(e):new U(e,t,n,r??1)}function U(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}ot(U,at,wt(je,{brighter:function(e){return e=e==null?$e:Math.pow($e,e),new U(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=e==null?Ie:Math.pow(Ie,e),new U(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:fa,formatHex:fa,formatRgb:ma,toString:ma}));function fa(){return"#"+wr(this.r)+wr(this.g)+wr(this.b)}function ma(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(e===1?")":", "+e+")")}function wr(e){return e=Math.max(0,Math.min(255,Math.round(e)||0)),(e<16?"0":"")+e.toString(16)}function pa(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new le(e,t,n,r)}function ha(e){if(e instanceof le)return new le(e.h,e.s,e.l,e.opacity);if(e instanceof je||(e=X(e)),!e)return new le;if(e instanceof le)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,o=Math.min(t,n,r),i=Math.max(t,n,r),a=NaN,s=i-o,u=(i+o)/2;return s?(t===i?a=(n-r)/s+(n0&&u<1?0:a,new le(a,s,u,e.opacity)}function sn(e,t,n,r){return arguments.length===1?ha(e):new le(e,t,n,r??1)}function le(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}ot(le,sn,wt(je,{brighter:function(e){return e=e==null?$e:Math.pow($e,e),new le(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?Ie:Math.pow(Ie,e),new le(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,o=2*n-r;return new U(Sr(e>=240?e-240:e+120,o,r),Sr(e,o,r),Sr(e<120?e+240:e-120,o,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return e=isNaN(e)?1:Math.max(0,Math.min(1,e)),(e===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(e===1?")":", "+e+")")}}));function Sr(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var da=Math.PI/180,ba=180/Math.PI;var Ma=-.14861,_r=1.78277,Tr=-.29227,un=-.90649,At=1.97294,ga=At*un,xa=At*_r,ya=_r*Tr-un*Ma;function Bc(e){if(e instanceof He)return new He(e.h,e.s,e.l,e.opacity);e instanceof U||(e=Ar(e));var t=e.r/255,n=e.g/255,r=e.b/255,o=(ya*r+ga*t-xa*n)/(ya+ga-xa),i=r-o,a=(At*(n-o)-Tr*i)/un,s=Math.sqrt(a*a+i*i)/(At*o*(1-o)),u=s?Math.atan2(a,i)*ba-120:NaN;return new He(u<0?u+360:u,s,o,e.opacity)}function Z(e,t,n,r){return arguments.length===1?Bc(e):new He(e,t,n,r??1)}function He(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}ot(He,Z,wt(je,{brighter:function(e){return e=e==null?$e:Math.pow($e,e),new He(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=e==null?Ie:Math.pow(Ie,e),new He(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*da,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),o=Math.sin(e);return new U(255*(t+n*(Ma*r+_r*o)),255*(t+n*(Tr*r+un*o)),255*(t+n*(At*r)),this.opacity)}}));function Cr(e,t,n,r,o){var i=e*e,a=i*e;return((1-3*e+3*i-a)*t+(4-6*i+3*a)*n+(1+3*e+3*i-3*a)*r+a*o)/6}function va(e){var t=e.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[r],i=e[r+1],a=r>0?e[r-1]:2*o-i,s=r()=>e;function wa(e,t){return function(n){return e+n*t}}function Oc(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function Sa(e,t){var n=t-e;return n?wa(e,n>180||n<-180?n-360*Math.round(n/360):n):st(isNaN(e)?t:e)}function Aa(e){return(e=+e)==1?Pe:function(t,n){return n-t?Oc(t,n,e):st(isNaN(t)?n:t)}}function Pe(e,t){var n=t-e;return n?wa(e,n):st(isNaN(e)?t:e)}var we=function e(t){var n=Aa(t);function r(o,i){var a=n((o=at(o)).r,(i=at(i)).r),s=n(o.g,i.g),u=n(o.b,i.b),l=Pe(o.opacity,i.opacity);return function(c){return o.r=a(c),o.g=s(c),o.b=u(c),o.opacity=l(c),o+""}}return r.gamma=e,r}(1);function _a(e){return function(t){var n=t.length,r=new Array(n),o=new Array(n),i=new Array(n),a,s;for(a=0;an&&(i=t.slice(n,i),s[a]?s[a]+=i:s[++a]=i),(r=r[0])===(o=o[0])?s[a]?s[a]+=o:s[++a]=o:(s[++a]=null,u.push({i:a,x:$(r,o)})),n=Nr.lastIndex;return n180?c+=360:c-l>180&&(l+=360),m.push({i:f.push(o(f)+"rotate(",null,r)-2,x:$(l,c)})):c&&f.push(o(f)+"rotate("+c+r)}function s(l,c,f,m){l!==c?m.push({i:f.push(o(f)+"skewX(",null,r)-2,x:$(l,c)}):c&&f.push(o(f)+"skewX("+c+r)}function u(l,c,f,m,p,h){if(l!==f||c!==m){var d=p.push(o(p)+"scale(",null,",",null,")");h.push({i:d-4,x:$(l,f)},{i:d-2,x:$(c,m)})}else(f!==1||m!==1)&&p.push(o(p)+"scale("+f+","+m+")")}return function(l,c){var f=[],m=[];return l=e(l),c=e(c),i(l.translateX,l.translateY,c.translateX,c.translateY,f,m),a(l.rotate,c.rotate,f,m),s(l.skewX,c.skewX,f,m),u(l.scaleX,l.scaleY,c.scaleX,c.scaleY,f,m),l=c=null,function(p){for(var h=-1,d=m.length,b;++h=0&&e._call.call(null,t),e=e._next;--ut}function Oa(){Ue=(pn=It.now())+hn,ut=Ct=0;try{qa()}finally{ut=0,Uc(),Ue=0}}function zc(){var e=It.now(),t=e-pn;t>La&&(hn-=t,pn=e)}function Uc(){for(var e,t=mn,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:mn=n);Nt=e,Fr(r)}function Fr(e){if(!ut){Ct&&(Ct=clearTimeout(Ct));var t=e-Ue;t>24?(e<1/0&&(Ct=setTimeout(Oa,e-It.now()-hn)),Tt&&(Tt=clearInterval(Tt))):(Tt||(pn=It.now(),Tt=setInterval(zc,La)),ut=1,Ga(Oa))}}function bn(e,t,n){var r=new Dt;return t=t==null?0:+t,r.restart(o=>{r.stop(),e(o+t)},t,n),r}var Vc=Mr("start","end","cancel","interrupt"),Xc=[],ja=0,Br=1,xn=2,gn=3,$a=4,yn=5,Et=6;function De(e,t,n,r,o,i){var a=e.__transition;if(!a)e.__transition={};else if(n in a)return;Yc(e,n,{name:t,index:r,group:o,on:Vc,tween:Xc,time:i.time,delay:i.delay,duration:i.duration,ease:i.ease,timer:null,state:ja})}function Rt(e,t){var n=O(e,t);if(n.state>ja)throw new Error("too late; already scheduled");return n}function j(e,t){var n=O(e,t);if(n.state>gn)throw new Error("too late; already running");return n}function O(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function Yc(e,t,n){var r=e.__transition,o;r[t]=n,n.timer=dn(i,0,n.time);function i(l){n.state=Br,n.timer.restart(a,n.delay,n.time),n.delay<=l&&a(l-n.delay)}function a(l){var c,f,m,p;if(n.state!==Br)return u();for(c in r)if(p=r[c],p.name===n.name){if(p.state===gn)return bn(a);p.state===$a?(p.state=Et,p.timer.stop(),p.on.call("interrupt",e,e.__data__,p.index,p.group),delete r[c]):+cxn&&r.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function df(e,t,n){var r,o,i=hf(t)?Rt:j;return function(){var a=i(this,e),s=a.on;s!==r&&(o=(r=s).copy()).on(t,n),a.on=o}}function Za(e,t){var n=this._id;return arguments.length<2?O(this.node(),n).on.on(e):this.each(df(n,e,t))}function bf(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function es(){return this.on("end.remove",bf(this._id))}function ts(e){var t=this._name,n=this._id;typeof e!="function"&&(e=qe(e));for(var r=this._groups,o=r.length,i=new Array(o),a=0;a=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Xe(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function fe(e){return e=Xe(Math.abs(e)),e?e[1]:NaN}function hs(e,t){return function(n,r){for(var o=n.length,i=[],a=0,s=e[0],u=0;o>0&&s>0&&(u+s+1>r&&(s=Math.max(1,r-u)),i.push(n.substring(o-=s,o+s)),!((u+=s+1)>r));)s=e[a=(a+1)%e.length];return i.reverse().join(t)}}function ds(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var kf=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function ke(e){if(!(t=kf.exec(e)))throw new Error("invalid format: "+e);var t;return new wn({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}ke.prototype=wn.prototype;function wn(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}wn.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function bs(e){e:for(var t=e.length,n=1,r=-1,o;n0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(o+1):e}var Gr;function gs(e,t){var n=Xe(e,t);if(!n)return e+"";var r=n[0],o=n[1],i=o-(Gr=Math.max(-8,Math.min(8,Math.floor(o/3)))*3)+1,a=r.length;return i===a?r:i>a?r+new Array(i-a+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+Xe(e,Math.max(0,t+i-1))[0]}function qr(e,t){var n=Xe(e,t);if(!n)return e+"";var r=n[0],o=n[1];return o<0?"0."+new Array(-o).join("0")+r:r.length>o+1?r.slice(0,o+1)+"."+r.slice(o+1):r+new Array(o-r.length+2).join("0")}var $r={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:ps,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>qr(e*100,t),r:qr,s:gs,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function jr(e){return e}var xs=Array.prototype.map,ys=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function Ms(e){var t=e.grouping===void 0||e.thousands===void 0?jr:hs(xs.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",o=e.decimal===void 0?".":e.decimal+"",i=e.numerals===void 0?jr:ds(xs.call(e.numerals,String)),a=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"\u2212":e.minus+"",u=e.nan===void 0?"NaN":e.nan+"";function l(f){f=ke(f);var m=f.fill,p=f.align,h=f.sign,d=f.symbol,b=f.zero,y=f.width,S=f.comma,P=f.precision,w=f.trim,_=f.type;_==="n"?(S=!0,_="g"):$r[_]||(P===void 0&&(P=12),w=!0,_="g"),(b||m==="0"&&p==="=")&&(b=!0,m="0",p="=");var _e=d==="$"?n:d==="#"&&/[boxX]/.test(_)?"0"+_.toLowerCase():"",dt=d==="$"?r:/[%p]/.test(_)?a:"",Te=$r[_],be=/[defgprs%]/.test(_);P=P===void 0?6:/[gprs]/.test(_)?Math.max(1,Math.min(21,P)):Math.max(0,Math.min(20,P));function N(g){var Y=_e,k=dt,ge,L,v;if(_==="c")k=Te(g)+k,g="";else{g=+g;var T=g<0||1/g<0;if(g=isNaN(g)?u:Te(Math.abs(g),P),w&&(g=bs(g)),T&&+g==0&&h!=="+"&&(T=!1),Y=(T?h==="("?h:s:h==="-"||h==="("?"":h)+Y,k=(_==="s"?ys[8+Gr/3]:"")+k+(T&&h==="("?")":""),be){for(ge=-1,L=g.length;++gev||v>57){k=(v===46?o+g.slice(ge+1):g.slice(ge))+k,g=g.slice(0,ge);break}}}S&&!b&&(g=t(g,1/0));var xe=Y.length+g.length+k.length,G=xe>1)+Y+g+k+G.slice(xe);break;default:g=G+Y+g+k;break}return i(g)}return N.toString=function(){return f+""},N}function c(f,m){var p=l((f=ke(f),f.type="f",f)),h=Math.max(-8,Math.min(8,Math.floor(fe(m)/3)))*3,d=Math.pow(10,-h),b=ys[8+h/3];return function(y){return p(d*y)+b}}return{format:l,formatPrefix:c}}var Sn,An,_n;Hr({thousands:",",grouping:[3],currency:["$",""]});function Hr(e){return Sn=Ms(e),An=Sn.format,_n=Sn.formatPrefix,Sn}function zr(e){return Math.max(0,-fe(Math.abs(e)))}function Ur(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(fe(t)/3)))*3-fe(Math.abs(e)))}function Vr(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,fe(t)-fe(e))+1}var ct=Math.random;var Tn=function e(t){function n(r,o){return r=r==null?0:+r,o=o==null?1:+o,arguments.length===1?(o=r,r=0):o-=r,function(){return t()*o+r}}return n.source=e,n}(ct);var ie=function e(t){function n(r,o){return arguments.length<2&&(o=r,r=0),r=Math.floor(r),o=Math.floor(o)-r,function(){return Math.floor(t()*o+r)}}return n.source=e,n}(ct);var Xr=function e(t){function n(r,o){var i,a;return r=r==null?0:+r,o=o==null?1:+o,function(){var s;if(i!=null)s=i,i=null;else do i=t()*2-1,s=t()*2-1,a=i*i+s*s;while(!a||a>1);return r+o*s*Math.sqrt(-2*Math.log(a)/a)}}return n.source=e,n}(ct);var vs=23283064365386963e-26;function ft(e=Math.random()){let t=(0<=e&&e<1?e/vs:Math.abs(e))|0;return()=>(t=1664525*t+1013904223|0,vs*(t>>>0))}function Ps(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function Yr(e){return function(){return e}}function Wr(e){return+e}var ws=[0,1];function mt(e){return e}function Kr(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:Yr(isNaN(t)?NaN:.5)}function Ef(e,t){var n;return e>t&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function Rf(e,t,n){var r=e[0],o=e[1],i=t[0],a=t[1];return o2?Ff:Rf,u=l=null,f}function f(m){return m==null||isNaN(m=+m)?i:(u||(u=s(e.map(r),t,n)))(r(a(m)))}return f.invert=function(m){return a(o((l||(l=s(t,e.map(r),$)))(m)))},f.domain=function(m){return arguments.length?(e=Array.from(m,Wr),c()):e.slice()},f.range=function(m){return arguments.length?(t=Array.from(m),c()):t.slice()},f.rangeRound=function(m){return t=Array.from(m),n=Dr,c()},f.clamp=function(m){return arguments.length?(a=m?!0:mt,c()):a!==mt},f.interpolate=function(m){return arguments.length?(n=m,c()):n},f.unknown=function(m){return arguments.length?(i=m,f):i},function(m,p){return r=m,o=p,c()}}function Jr(){return Bf()(mt,mt)}function Qr(e,t,n,r){var o=gr(e,t,n),i;switch(r=ke(r??",f"),r.type){case"s":{var a=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(i=Ur(o,a))&&(r.precision=i),_n(r,a)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(i=Vr(o,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=i-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(i=zr(o))&&(r.precision=i-(r.type==="%")*2);break}}return An(r)}function Of(e){var t=e.domain;return e.ticks=function(n){var r=t();return br(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var o=t();return Qr(o[0],o[o.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),o=0,i=r.length-1,a=r[o],s=r[i],u,l,c=10;for(s0;){if(l=Wt(a,s,n),l===u)return r[o]=a,r[i]=s,t(r);if(l>0)a=Math.floor(a/l)*l,s=Math.ceil(s/l)*l;else if(l<0)a=Math.ceil(a*l)/l,s=Math.floor(s*l)/l;else break;u=l}return e},e}function me(){var e=Jr();return e.copy=function(){return Ss(e,me())},Ps.apply(e,arguments),Of(e)}function Bt(e){for(var t=e.length/6|0,n=new Array(t),r=0;r1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return Cn.h=360*e-100,Cn.s=1.5-1.5*t,Cn.l=.8-.9*t,Cn+""}function Nn(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var eo=Nn(Bt("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),qf=Nn(Bt("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),$f=Nn(Bt("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),jf=Nn(Bt("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function Ye(e,t,n){this.k=e,this.x=t,this.y=n}Ye.prototype={constructor:Ye,scale:function(e){return e===1?this:new Ye(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new Ye(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var to=new Ye(1,0,0);no.prototype=Ye.prototype;function no(e){for(;!e.__zoom;)if(!(e=e.parentNode))return to;return e.__zoom}function Se(e=0,t=1){return Math.random()*(t-e)+e}function ro(e){let t=ie(0,e.length)();return e[t]}function oo(e,t,n){return Math.max(t,Math.min(n,e))}function q(e,t){return+e.toFixed(t)}function Hf(e,t){return e<=t?[e,t]:[t,e]}function In(e){let t=0;for(;e!==0;)e=e&e-1,t++;return t}function Dn(e){if(e.length<=1)return[];if(e.length===2)return e[0]>e[1]?[0]:e[1]>e[0]?[1]:[];let t=[];e[0]>e[1]&&t.push(0);let n=e[0],r=e[1];for(let i=1;in&&r>a&&t.push(i),n=r,r=a}let o=e.length-1;return e[o]>e[o-1]&&t.push(e.length-1),t}var We=class{constructor(t=[],n=!1){n?this._notes=t:this._notes=t.map(r=>r.string!==void 0&&r.fret!==void 0?Q.from(r):M.from(r))}getNotes(){return this._notes}setNotes(t){return this._notes=t,this}*[Symbol.iterator](){for(let t of this._notes)yield t}addNotes(t,n=!0){return this._notes=[...this._notes,...t],n&&this.sortByTime(),this}concat(t){return this._notes=[...this._notes,...t._notes],this}append(t,n=0){let r=this.getDuration(),o=t.clone();return o.shiftTime(r+n),this._notes=[...this._notes,...o._notes],this.sortByTime(),this}repeat(t){let n=this.clone();if(t<1)return new We;if(t===1)return n;let r=this.clone(),o=this.getDuration();for(let i=1;it.start)}getDuration(){let t=0;for(let n of this._notes){let r=n.end===null?n.start:n.end;r>t&&(t=r)}return t}scaleTime(t){return this._notes=this._notes.map(n=>n.scaleTime(t)),this}shiftTime(t){return this._notes=this._notes.map(n=>n.shiftTime(t)),this}shiftToStartAt(t){this.sortByTime();let r=this._notes[0].start-t;return this._notes.forEach(o=>{o.start-=r,o.end!==null&&(o.end-=r)}),this}forEach(t){return this._notes.forEach((n,r,o)=>t(n,r,o)),this}sort(t){return this._notes=this._notes.sort(t),this}sortByTime(){return this._notes=this._notes.sort((t,n)=>t.start-n.start),this}map(t){return this._notes=this._notes.map((n,r,o)=>t(n,r,o)),this}slice(t,n){return this._notes=this._notes.slice(t,n),this}sliceTime(t,n,r="contained"){let o=t,i=n,a;if(r==="start")a=s=>s.start>=o&&s.starts.end!==null&&s.end>=o&&s.ends.end!==null&&s.start>=o&&s.ends.start>=o&&s.start<=i||s.end!==null&&s.end>=o&&s.end<=i;else if(r==="touched-included")a=s=>s.start>=o&&s.start<=i||s.end!==null&&s.end>=o&&s.end<=i||s.end!==null&&s.start<=o&&s.end>=i;else throw new Error("Invalid slicing mode");return this._notes=this._notes.filter(a),this}sliceAtTimes(t,n,r=!1){if(t.length===0)return[this._notes];let o=this.getDuration();Math.max(...t)<=o&&t.push(o+1);let i=[],a=0;for(let s of t)i.push(new We(this._notes,r).sliceTime(a,s,n).getNotes()),a=s;return i}segmentAtGaps(t,n){if(this._notes.length<2)return[this._notes];if(n==="start-start"){let r=this.clone().sortByTime().getNotes(),o=[];for(let i=1;i=t&&o.push(r[i].start);return this.sliceAtTimes(o,"start")}else{let r=[];for(let i of this._notes){let{start:a,end:s}=i,u=[];for(let l=0;l=a&&c<=s||f>=a&&f<=s)&&(r.splice(l,1),u.push([c,f]))}if(u.length===0)r.push([a,s]);else{let l=Math.min(a,...u.map(f=>f[0])),c=Math.max(s,...u.map(f=>f[1]));r.push([l,c])}}if(r.length===1)return[this._notes];let o=[];for(let i=1;i=t&&o.push(a)}return this.sliceAtTimes(o,"start")}}segmentAtIndices(t){let n=[],r=0;for(let o of t)n.push(this._notes.slice(r,o)),r=o;return n}filter(t){return this._notes=this._notes.filter((n,r,o)=>t(n,r,o)),this}filterPitches(t){return t instanceof Set||(t=new Set(t)),this._notes=this._notes.filter(n=>t.has(n.pitch)),this}transpose(t){return this._notes=this._notes.map(n=>M.from(C(A({},n),{pitch:oo(n.pitch+t,0,127)}))),this}removeOctaves(){return this._notes=this._notes.map(t=>M.from(C(A({},t),{pitch:t.pitch%12}))),this}reverse(){let t=this.getDuration();return this._notes=this._notes.map(n=>{let r=n.clone();return r.start=t-n.end,r.end=r.start+n.getDuration(),r}),this.sortByTime(),this}equals(t){if(!(t instanceof We))return!1;let n=t.getNotes();if(this._notes.length!==n.length)return!1;for(let[r,o]of n.entries())if(!this._notes[r].equals(o))return!1;return!0}clone(){return new We(this._notes)}},K=We;function Ae(e,t){if(e.length!==t.length)return!1;for(let[n,r]of e.entries())if(r!==t[n])return!1;return!0}function zf(e,t,n=!0){if(n&&e.length!==t.length)return!1;let r=new Set(e),o=new Set(t);for(let i of r)if(!o.has(i))return!1;for(let i of o)if(!r.has(i))return!1;return!0}function Uf(e,t,n){let r=0;if(n)for(let o of e)n(o,t)&&r++;else for(let o of e)o===t&&r++;return r}function Vf(e,t){return e.length===0&&t.length===0?1:rt(e,t).size/Jt(e,t).size}function Xf(e,t,n=!0){if(e.length!==t.length)throw new Error("Ranking length must be equal");if(e.length===0)return 0;let r=0,o=e.length;for(let i=0;ir.map(i=>i.length!==void 0?n(i,o):i/o);return n(e,t)}function Zf(e){let t=J(e.flat(Number.POSITIVE_INFINITY)),n=me().domain(t),r=o=>o.map(i=>i.length!==void 0?r(i):n(i));return r(e)}function em(e,t){let n=e.flat(),r=t.flat(),o=n.map((i,a)=>i-r[a]);return Math.hypot(...o)}function tm(e,t=", ",n=` `,r){return!e||e.length===0?"":(r&&(e=e.map(o=>o.map(i=>r(i)))),e.map(o=>o.join(t)).join(n))}function Ot(e,t,n=r=>r){if(e.length<=3){let a=null,s=Number.POSITIVE_INFINITY;for(let u of e){let l=n(u),c=Math.abs(t-l);ci)return Ot(e.slice(r-1),t,n)}function nm(e,t=r=>r,n=(r,o)=>r===o){let r=0,o=[],i=t(e[0]);for(let[a,s]of e.entries()){let u=t(s);n(i,u)||(o.push({startIndex:r,endIndex:a-1,length:a-r}),r=a,i=u)}return e.length>0&&o.push({startIndex:r,endIndex:e.length-1,length:e.length-r}),o}function rm(e,t=(n,r)=>n===r){return e.map(n=>{for(let[r,o]of e.entries())if(t(n,o))return r;return null})}var pt=class extends K{constructor(t,n,r,o=1,i=0,a=null,s=""){super(r);this.name=t,this.date=n,this.dateString=n.toISOString().slice(0,19).replace("T"," "),this.speed=+o,this.selectedTrack=+i,this.timeSelection=a,this.comment=s,this.sortByTime()}clone(){return new pt(this.name,this.date,this.getNotes().map(t=>t.clone()),this.speed,this.selectedTrack,this.timeSelection===null?null:[...this.timeSelection],this.comment)}equals(t){if(!(t instanceof pt)||this.name!==t.name||this.date.getTime()!==t.date.getTime()||this.speed!==t.speed||this.selectedTrack!==t.selectedTrack||this.timeSelection!==t.timeSelection&&(this.timeSelection===null||t.timeSelection===null||!Ae(this.timeSelection,t.timeSelection)))return!1;let n=this.getNotes(),r=t.getNotes();if(n.length!==r.length)return!1;for(let[o,i]of n.entries())if(!i.equals(r[o]))return!1;return this.comment===t.comment}toSimpleObject(){return{name:this.name,date:this.date,notes:this.getNotes(),speed:this.speed,selectedTrack:this.selectedTrack,timeSelection:this.timeSelection,comment:this.comment}}static from(t){let{name:n,date:r,notes:o}=t,i=[n,r,o],a=["name","date","notes"];for(let[f,m]of i.entries())if(m==null)throw new Error(`Cannot create Recording with undefined ${a[f]}`);typeof r=="string"&&(r=new Date(Date.parse(r)));let{speed:s,selectedTrack:u,timeSelection:l,comment:c}=t;return new pt(n,r,o,s,u,l,c)}},kn=pt;var Ds=qu(As(),1);var En=5;function Ts(e,t=!1){t&&(console.groupCollapsed("[MusicXmlParser] Parsing MusicXML"),console.log(e));let n=e.querySelectorAll("part-name"),r=e.querySelectorAll("score-instrument"),o=[],i=[];for(let c of n)o.push(c.innerHTML);for(let c of r)i.push(c.children[0].innerHTML);let a=lm(e),s=e.querySelectorAll("part"),u=[];for(let c of s)u.push(om(c,a));let l={parts:u,partNames:o,instruments:i,totalTime:D(u,c=>c.totalTime)};return t&&(console.log(l),console.groupEnd()),l}function om(e,t){var Te,be,N;e=sm(e);let{resultMeasures:n,xmlMeasureIndices:r}=am(e.children),o=e.querySelectorAll("note"),i=new Map([...o].map((g,Y)=>[g,Y])),a=[],s=0,u,l=120,c=4,f=4,m=90,p=64/71,h=Math.round(m*p),d=[],b=[],y=[],S=[],P=new Map,w=new Map,_=[],_e=[];for(let g of n){let Y=q(s,En);try{let L=g.querySelectorAll("sound");for(let v of L){let T=v.getAttribute("tempo");T!==null&&(l=q(+T,3),d.push({time:Y,tempo:l}));break}}catch{}try{u=+g.querySelectorAll("divisions")[0].innerHTML}catch{}try{c=+g.querySelectorAll("beats")[0].innerHTML,f=+g.querySelectorAll("beat-type")[0].innerHTML,b.push({time:Y,beats:c,beatType:f})}catch{}let k=1/(l/60);try{let L=+g.querySelectorAll("fifths")[0].innerHTML,{key:v,scale:T}=cm.get(L);y.push({time:Y,key:v,scale:T})}catch{}g.querySelectorAll("note").length===0&&(s+=c*(f/4)*k);let ge=0;for(let L of g.children)if(L.nodeName==="backup"){let v=+L.querySelectorAll("duration")[0].innerHTML;s-=so(v,u,k)}else if(L.nodeName==="forward"){let v=+L.querySelectorAll("duration")[0].innerHTML;s+=so(v,u,k)}else if(L.nodeName==="direction"){for(let v of L.children)if(v.nodeName==="sound"&&v.getAttribute("dynamics")&&(h=Math.round(p*+v.getAttribute("dynamics"))),L.querySelectorAll("rehearsal").length>0){let T=L.querySelectorAll("rehearsal"),xe=[];for(let G of T)G.textContent!==""&&xe.push(G.textContent);if(xe.length>0){let G=xe.join(" "),ye=_e.length;P.has(ye)&&(G=`${P.get(ye)} ${G}`),P.set(ye,G)}}}else if(L.nodeName==="note"){let v=L;try{let T;if(v.querySelectorAll("grace").length>0){let z=v.querySelectorAll("type").textContent;z==="64th"?T=k/16:z==="32nd"?T=k/8:z==="16th"?T=k/4:z==="eighth"?T=k/2:z==="quarter"?T=k:z==="half"?T=k*2:T=.01}else{let z=+v.querySelectorAll("duration")[0].innerHTML;T=so(z,u,k)}if(v.querySelectorAll("rest").length>0){s+=T;continue}let G=v.querySelectorAll("unpitched").length>0,ye;if(G){let z=v.querySelectorAll("instrument")[0].id;ye=t.get(e.id).get(z)}else{let z=+(((Te=v.querySelectorAll("alter")[0])==null?void 0:Te.innerHTML)??0),re=v.querySelectorAll("step")[0].innerHTML,Fe=+v.querySelectorAll("octave")[0].innerHTML;ye=Xt(re,Fe).pitch+z}let or=(be=v.querySelectorAll("dynamics")[0])==null?void 0:be.children[0];or&&(h=fm.get(or.nodeName)),v.querySelectorAll("chord").length>0&&(s-=ge);let ni=v.querySelectorAll("tie")[0];if(ni&&ni.getAttribute("type")==="stop"){let z=s+T;for(let re=S.length-1;re>0;re--){let Fe=S[re];if(Fe.pitch===ye){Fe.end=z;let Be=_s(v);if(Be.length>0){let Vt=`${w.get(re)??""} ${Be}`;w.set(re,Vt)}a[re].push(i.get(v));break}}}else{a.push([i.get(v)]);let z=+(((N=v.querySelectorAll("staff")[0])==null?void 0:N.innerHTML)??1),re=q(s,En),Fe=q(s+T,En),Be=null,Ut=null;try{Ut=+v.querySelectorAll("fret")[0].innerHTML,Be=+v.querySelectorAll("string")[0].innerHTML}catch{}Be!==null&&Ut!==null?S.push(new Q(ye,re,h,Be,Fe,Be,Ut)):S.push(new M(ye,re,h,z-1,Fe));let Vt=_s(v);Vt.length>0&&w.set(S.length-1,Vt)}ge=T,s+=T}catch(T){console.warn("[MusicXmlParser] Cannot parse MusicXML note",T,v)}}_.push(q(s,En)),_e.push(S.length)}return(d.length===0||d[0].time>0)&&d.unshift({tempo:120,time:0}),(b.length===0||b[0].time>0)&&b.unshift({beats:4,beatType:4,time:0}),(y.length===0||y[0].time>0)&&y.unshift({key:"C",scale:"major",time:0}),{noteObjs:S,totalTime:s,measureLinePositions:_,measureIndices:_e,xmlMeasureIndices:r,measureRehearsalMap:im(P),xmlNoteIndices:a,tempoChanges:d,beatTypeChanges:b,keySignatureChanges:y,tuning:um(n),noteLyricsMap:w}}function im(e){let t=[...e],n=t.filter((r,o)=>o===0||t[o-1][1]!==r[1]);return new Map(n)}function _s(e){let t=e.querySelectorAll("lyric"),n=[];for(let o of t)n.push(o.querySelectorAll("text")[0].textContent);return n.join(" ")}function so(e,t,n){return e/t*n}function am(e){var a,s;let t=[],n=[],r=!1;for(let u of e){let l=u.querySelectorAll("ending");+((a=l[0])==null?void 0:a.getAttribute("number"))==1&&((s=l[0])==null?void 0:s.getAttribute("type"))==="start"&&(r=!0);let c=u.querySelectorAll("repeat");if(c.length===2){let f=c[1].getAttribute("times")||2,m=Array.from({length:+f}).fill(u);n.length===0?t=[...t,...m]:n=[...n,...m]}else if(c.length===1){let f=c[0].getAttribute("direction");if(f==="forward")n.push(u);else if(f==="backward"){let m=c[0].getAttribute("times")||2;if(n.length>0){if(r){let p=[...n,u];t=[...t,...p];for(let h=1;h[u,l])),i=t.map(u=>o.get(u));return{resultMeasures:t,xmlMeasureIndices:i}}function sm(e){let t=e.querySelectorAll("note"),n=!1;for(let r of t)if(r.querySelectorAll("string").length>0&&r.querySelectorAll("fret").length>0){n=!0;break}if(n){for(let o of t){let i=+(o.querySelectorAll("voice")[0].innerHTML??1);!(o.querySelectorAll("rest").length>0&&i===1)&&o.querySelectorAll("fret").length===0&&o.remove()}let r=e.querySelectorAll("backup");for(let o of r)o.remove()}return e}function um(e){for(let t of e)try{let n=[],r=t.querySelectorAll("staff-tuning");for(let o of r){let i=o.querySelectorAll("tuning-step")[0].innerHTML,a=+o.querySelectorAll("tuning-octave")[0].innerHTML;n.push(Xt(i,a).pitch)}return n}catch{}return[]}function lm(e){var r,o;let t=new Map,n=(r=e.querySelectorAll("part-list")[0])==null?void 0:r.querySelectorAll("score-part");if(!n)return t;for(let i of n){let a=i.id,s=new Map,u=i.querySelectorAll("midi-instrument");for(let l of u){let c=l.id,f=(o=l.querySelectorAll("midi-unpitched")[0])==null?void 0:o.innerHTML;f&&s.set(c,+f)}t.set(a,s)}return t}var cm=new Map([[-7,{key:"Cb",scale:"major"}],[-6,{key:"Gb",scale:"major"}],[-5,{key:"Db",scale:"major"}],[-4,{key:"Ab",scale:"major"}],[-3,{key:"Eb",scale:"major"}],[-2,{key:"Bb",scale:"major"}],[-1,{key:"F",scale:"major"}],[0,{key:"C",scale:"major"}],[1,{key:"G",scale:"major"}],[2,{key:"D",scale:"major"}],[3,{key:"A",scale:"major"}],[4,{key:"E",scale:"major"}],[5,{key:"B",scale:"major"}],[6,{key:"F#",scale:"major"}],[7,{key:"C#",scale:"major"}]]),fm=new Map([["ppp",25],["pp",38],["p",51],["mp",64],["mf",76],["f",89],["ff",102],["fff",114]]);function ae(e){return 1/(e/60)}function mm(e){return 12*Math.log2(e/440)+69}function pm(e){return 2**((e-69)/12)*440}function hm(e){let t=0;for(let n of e){let r=n.pitch%12,o=1<e.duration-t.duration);function gm(e,t){let n=ae(t),r=e/n/4;return Ot(uo,r,o=>o.duration)}var xm=[[0,"C","C",0,0],[7,"G","G",1,0],[2,"D","D",2,0],[9,"A","A",3,0],[4,"E","E",4,0],[11,"B","B",5,7],[6,"F#","Gb",6,6],[1,"C#","Db",7,5],[8,"G#","Ab",0,4],[3,"D#","Eb",0,3],[10,"A#","Bb",0,2],[5,"F","F",0,1]],ym=new Map([[1,"unison"],[1,"m2"],[2,"M2"],[3,"m3"],[4,"M3"],[5,"P4"],[6,"aug4"],[7,"P5"],[8,"m6"],[9,"M6"],[10,"m7"],[11,"M7"],[12,"P8"]]);function Mm(e=120,t=[4,4],n=60){let r=[],o=ae(e)/(t[1]/4),i=0;for(;i<=n;)for(let a=0;an)return r}function vm(e,t=1){let{duration:n,tempos:r,timeSignatures:o}=e,i=[],a=0,s=o[0].signature??[4,4],[u,l]=s,c=o.slice(1),f=r[0].bpm??120,m=ae(f)/(l/4),p=r.slice(1);for(;a<=n;){let h=a+m;c.length>0&&c[0].time<=h&&([u,l]=c[0].signature,c.shift()),p.length>0&&p[0].time<=h&&(m=ae(p[0].bpm)/(l/4),p.shift());for(let d=0;dn)return i}return i}var Ke=5;function Is(e,t=!0,n=!1){if(e==null)return;if(!e.track){console.warn("[MidiParser] MIDI data has no track");return}n&&console.groupCollapsed("[MidiParser] Preprocessing MIDI file data");let r=[],{tempoChanges:o,beatTypeChanges:i,keySignatureChanges:a}=Tm(e.track);for(let c of e.track){let f=Pm(c,e.timeDivision,o,i,a,n);f!==null&&r.push(f)}e.formatType===0&&t&&r.length===1&&(r=_m(r));let s=D(r,c=>(c==null?void 0:c.totalTime)??0),u=Sm(o,i,s);for(let c of r)c.measureIndices=Am(c.noteObjs,u);let l={tracks:r,totalTime:s,tempoChanges:o,beatTypeChanges:i,keySignatureChanges:a,measureLinePositions:u};return n&&(console.log(`Got ${r.length} MIDI tracks`,l),console.groupEnd()),l}function Pm(e,t,n,r,o,i){var S;let a=[],s=((S=n[0])==null?void 0:S.tempo)??120,u=0,l,c=Cs(s,t),f=0,m=0,p=new Map;for(let P of e.event){let w=P.type;if(w===ee.meta)continue;u+=P.deltaTime;for(let N of r)if(N.time===void 0&&N.tick<=u){let g=(N.tick-f)*c/1e3+m;N.time=q(g,Ke)}for(let N of o)if(N.time===void 0&&N.tick<=u){let g=(N.tick-f)*c/1e3+m;N.time=q(g,Ke)}let _;n.length>0&&u>n[n.length-1].tick&&(_=n[n.length-1]);for(let N=1;Nu){_=n[N-1];break}if(_&&_.tempo!==s){let N=_.tick;m=(N-f)*c/1e3+m,f=N,_.time=q(m,Ke),s=_.tempo,c=Cs(s,t)}if(l=(u-f)*c/1e3+m,w!==ee.noteOn&&w!==ee.noteOff)continue;let[_e,dt]=P.data,Te=P.channel,be=`${_e} ${Te}`;if(w===ee.noteOff||w===ee.noteOn&&dt===0)p.has(be)?(p.get(be).end=q(l,Ke),p.delete(be)):i&&(console.warn("Did not find an unfinished note for note-off event!"),console.log(P));else if(w===ee.noteOn){let N=new M(_e,q(l,Ke),dt,Te);a.push(N),p.set(be,N)}else continue}let h=[];for(let P of a)P.end===-1&&(P.end=q(l,Ke),h.push(P));h.length>0&&(console.warn(`had to fix ${h.length} notes`),console.log(h));let{trackName:d,instrument:b,instrumentName:y}=wm(e);return a.length>0?{noteObjs:a,totalTime:l,trackName:d??"Track",instrument:b,instrumentName:y??"Unknown instrument"}:null}function wm(e){let t=null,n=null,r=null;for(let o of e.event)o.type===ee.meta&&o.metaType===Lt.trackName&&(t=o.data),o.type===ee.programChange&&(n=o.data),o.type===ee.meta&&o.metaType===Lt.instrumentName&&(r=o.data);return{trackName:t,instrument:n,instrumentName:r}}function Sm(e,t,n){let r=[],o=120,i=4,a=4,s=0,u=0,l=0,c=0;for(;s=i&&(u=0,r.push(q(s,Ke)))}return r}function Am(e,t){let n=[],r=[...t];for(let[o,i]of e.entries())i.start>=r[0]&&(r.shift(),n.push(o));return n}function _m(e){e.length>1&&console.warn("Splitting a format 0 file with more than 1 track will result in all but the first beeing lost!");let t=F(e[0].noteObjs,r=>r.channel),n=[];for(let r of t.values())n.push(C(A({},e[0]),{noteObjs:r}));return n}function Cs(e,t){return 1/e*6e4/t}function Tm(e){let t=[],n=[],r=[],o=0,i=null;for(let a of e)for(let s of a.event){if(o+=s.deltaTime,s.type===ee.meta&&s.metaType===Lt.setTempo){let u=s.data/1e3,l=Math.round(1/(u/6e4));l!==i&&(t.push({tick:o,tempo:l,time:o===0?0:void 0}),i=l)}if(s.type===ee.meta&&s.metaType===Lt.timeSignature){let u=s.data,l=u[0],c=2**u[1],f={tick:o,beats:l,beatType:c};if(n.length===0)n.push(f);else{let m=n[n.length-1];(m.beats!==l||m.beatType!==c)&&n.push(f)}}if(s.type===ee.meta&&s.metaType===Lt.keySignature){let u=s.data;if(!Ns.has(u))console.warn("[MidiParser] Invalid key signature",u);else{let{key:l,scale:c}=Ns.get(u),f={tick:o,key:l,scale:c};if(r.length===0)r.push(f);else{let m=r[r.length-1];(m.key!==l||m.scale!==c)&&r.push(f)}}}}return(t.length===0||t[0].time>0)&&t.unshift({tempo:120,time:0}),(n.length===0||n[0].time>0)&&n.unshift({beats:4,beatType:4,time:0}),(r.length===0||r[0].time>0)&&r.unshift({key:"C",scale:"major",time:0}),{tempoChanges:t,beatTypeChanges:n,keySignatureChanges:r}}var ee={noteOff:8,noteOn:9,noteAftertouch:10,controller:11,programChange:12,channelAftertouch:13,pitchBend:14,meta:255},Lt={sequenceNumber:0,textEvent:1,copyright:2,trackName:3,instrumentName:4,lyrics:5,marker:6,cuePoint:7,channelPrefix:32,endOfTrack:47,setTempo:81,smpteOffset:84,timeSignature:88,keySignature:89,sequencerSpecific:127},Ns=new Map([[63744,{key:"Cb",scale:"major"}],[64e3,{key:"Gb",scale:"major"}],[64256,{key:"Db",scale:"major"}],[64512,{key:"Ab",scale:"major"}],[64768,{key:"Eb",scale:"major"}],[65024,{key:"Bb",scale:"major"}],[65280,{key:"F",scale:"major"}],[0,{key:"C",scale:"major"}],[256,{key:"G",scale:"major"}],[512,{key:"D",scale:"major"}],[768,{key:"A",scale:"major"}],[1024,{key:"E",scale:"major"}],[1280,{key:"B",scale:"major"}],[1536,{key:"F#",scale:"major"}],[1792,{key:"C#",scale:"major"}],[63745,{key:"Ab",scale:"minor"}],[64001,{key:"Eb",scale:"minor"}],[64257,{key:"Bb",scale:"minor"}],[64513,{key:"F",scale:"minor"}],[64769,{key:"C",scale:"minor"}],[65025,{key:"G",scale:"minor"}],[65281,{key:"D",scale:"minor"}],[1,{key:"A",scale:"minor"}],[257,{key:"E",scale:"minor"}],[513,{key:"B",scale:"minor"}],[769,{key:"F#",scale:"minor"}],[1025,{key:"C#",scale:"minor"}],[1281,{key:"G#",scale:"minor"}],[1537,{key:"D#",scale:"minor"}],[1793,{key:"A#",scale:"minor"}]]);var Je=class{constructor(t,n,r,o,i,a,s){if(!a||a.length===0)throw new Error("No or invalid tracks given! Use .fromMidi or .fromMusicXml?");this.name=t,this.measureTimes=i,this.xmlMeasureIndices=s,this.tracks=a,this.duration=Math.max(...this.tracks.map(f=>f.duration)),this.tempos=n.slice(0,1);let u=n[0];for(let f of n)f.string!==u.string&&(u=f,this.tempos.push(f));this.timeSignatures=r.slice(0,1);let l=r[0];for(let f of r)f.string!==l.string&&(l=f,this.timeSignatures.push(f));this.keySignatures=o.slice(0,1);let c=o[0];for(let f of o)f.string!==c.string&&(c=f,this.keySignatures.push(f))}static fromMidi(t,n){if(!n)throw new Error("No MIDI file content given");let r=Ds.parse(n),o=Is(r),i=[],a=[],s=[],u=[];o.tracks.length>0&&(i=o.tempoChanges.map(c=>new Rn(c.time,c.tempo)),a=o.beatTypeChanges.map(c=>new Fn(c.time,[c.beats,c.beatType])),s=o.keySignatureChanges.map(c=>new Bn(c.time,c.key,c.scale)),u=o.measureLinePositions);let l=o.tracks.map(c=>new Qe(c.trackName,c.instrumentName,c.noteObjs,null,c.measureIndices,new Map,new Map));return new Je(t,i,a,s,u,l)}static fromMusicXml(t,n){if(!n)throw new Error("No MusicXML file content given");let r=n;typeof r=="string"&&(r=new DOMParser().parseFromString(n,"text/xml"));let o=Ts(r),i=[],a=[],s=[];o.parts.length>0&&(i=o.parts[0].tempoChanges.map(f=>new Rn(f.time,f.tempo)),a=o.parts[0].beatTypeChanges.map(f=>new Fn(f.time,[f.beats,f.beatType])),s=o.parts[0].keySignatureChanges.map(f=>new Bn(f.time,f.key,f.scale)));let u=[],l=[];o.parts.length>0&&(u=o.parts[0].measureLinePositions,l=o.parts[0].xmlMeasureIndices);let c=o.parts.map((f,m)=>{for(let p of f.noteObjs)p.channel=m;return new Qe(o.partNames[m],o.instruments[m],f.noteObjs,f.tuning,f.measureIndices,f.measureRehearsalMap,f.noteLyricsMap,f.xmlNoteIndices)});return new Je(t,i,a,s,u,c,l)}static fromJson(t){t=typeof t=="string"?JSON.parse(t):t;let n=t.tempos.map(a=>new Rn(a.time,a.bpm)),r=t.timeSignatures.map(a=>new Fn(a.time,a.signature)),o=t.keySignatures.map(a=>new Bn(a.time,a.key,a.scale)),i=t.tracks.map(a=>Qe.from(a));return new Je(t.name,n,r,o,t.measureTimes,i,t.xmlMeasureIndices)}toJson(t=!1){let n=C(A({},this),{tracks:this.tracks.map(r=>r.toObject())});return JSON.stringify(n,void 0,t?2:0)}getAllNotes(t=!1){let n=this.tracks.flatMap(r=>r.notes);return t&&n.sort((r,o)=>r.start-o.start),n}getNotesFromTracks(t="all",n=!1){let r=[];return t==="all"?r=this.tracks.flatMap(o=>o.notes):Array.isArray(t)?r=this.tracks.filter((o,i)=>t.includes(i)).flatMap(o=>o.notes):(r=this.tracks[t].notes,n=!1),n&&r.sort((o,i)=>o.start-i.start),r}transpose(t=0,n="all"){let r=this.tracks.map((o,i)=>{let a=n==="all"||Array.isArray(n)&&n.includes(i)||n===i,s=new K(o.notes),u=o.tuningPitches;return a&&(s.transpose(t),u=o.tuningPitches.map(l=>l+t)),new Qe(o.name,o.instrument,s.getNotes(),u,o.measureIndices)});return new Je(this.name,[...this.tempos],[...this.timeSignatures],[...this.keySignatures],[...this.measureTimes],r)}},Qe=class{constructor(t,n,r,o=null,i=null,a,s,u=null){if(t=t!=null&&t.length?t.replace("\0",""):"unnamed",this.name=t,this.instrument=n,!r||r.length===void 0)throw new Error("Notes are undefined or not an array");this.notes=r.sort(M.startPitchComparator),this.tuningPitches=o,this.measureIndices=i,this.measureRehearsalMap=a,this.noteLyricsMap=s,this.xmlNoteIndices=u,this.duration=new K(r).getDuration(),this.hasStringFret=!1;for(let l of r)if(l.string!==void 0&&l.fret!==void 0){this.hasStringFret=!0;break}}toObject(){return C(A({},this),{measureRehearsalMap:[...this.measureRehearsalMap],noteLyricsMap:[...this.noteLyricsMap]})}static from(t){let n=t.notes.map(i=>i.string!==void 0&&i.fret!==void 0?Q.from(i):M.from(i)),r=new Map(t.measureRehearsalMap),o=new Map(t.noteLyricsMap);return new Qe(t.name,t.instrument,n,t.tuningPitches,t.measureIndices,r,o,t.xmlNoteIndices)}getMeasures(t){let n=[0,...this.measureIndices],r=[];for(let o=1;o0){let n=t[t.length-1];n.endMeasure=this.measureIndices.length-1}if(t.length>0&&t[0].startMeasure>0){let n={name:"",startMeasure:0,endMeasure:t[0].startMeasure-1};t.unshift(n)}t.length===0&&t.push({name:"",startMeasure:0,endMeasure:this.measureIndices.length-1});for(let n of t)n.length=n.endMeasure-n.startMeasure+1;return t}getSections(t,n,r){n||(n=this.getSectionInfo()),r||(r=this.getMeasures());let o=n.map(a=>a.startMeasure),i=[];for(let a=1;ar.start===o.start?r.pitch-o.pitch:r.start-o.start).map(r=>r.pitch);return new Re(n)}static fromCharString(t){if(!t||t.length===0)return new Re;let n=[...t].map((r,o)=>t.charCodeAt(o));return new Re(n)}getPitches(){return this._pitches}length(){return this._pitches.length}toCharString(){return!this._pitches||this._pitches.length===0?"":String.fromCharCode(...this._pitches)}toNoteNameString(){return this._pitches.map(t=>W(t).label).join(" ")}reverse(){return this._pitches=this._pitches.reverse(),this}removeOctaves(){return this._pitches=this._pitches.map(t=>t%12),this}toIntervals(){let t=this._pitches;if(!t||t.length===0||t.length<2)return[];let n=Array.from({length:t.length-1});for(let r=1;rWm,drawAssymetricArc:()=>Km,drawBezierConnectorX:()=>Um,drawBezierConnectorY:()=>Vm,drawBezierFunnelY:()=>Xm,drawBowRight:()=>km,drawBracketH:()=>Jm,drawCircle:()=>Em,drawColorRamp:()=>Zm,drawCornerLine:()=>$m,drawDiamond:()=>Bm,drawFilledCircle:()=>Rm,drawHLine:()=>Im,drawHexagon:()=>zm,drawLine:()=>Nm,drawMatrix:()=>Qm,drawNoteColorMap:()=>ep,drawNoteTrapezoid:()=>Lm,drawNoteTrapezoidUpwards:()=>Gm,drawRoundedCorner:()=>Ym,drawRoundedCornerLine:()=>jm,drawRoundedCornerLineRightLeft:()=>Hm,drawRoundedRect:()=>qm,drawTriangle:()=>Fm,drawVLine:()=>Dm,drawVerticalText:()=>tp,drawX:()=>Om,setupCanvas:()=>Cm});function Cm(e){if(!window)return;let t=window.devicePixelRatio||1,n=e.getBoundingClientRect();e.width=n.width*t,e.height=n.height*t;let r=e.getContext("2d");return r.scale(t,t),r}function Nm(e,t,n,r,o){e.beginPath(),e.moveTo(t,n),e.lineTo(r,o),e.stroke()}function Im(e,t,n,r){e.beginPath(),e.moveTo(t,n),e.lineTo(r,n),e.stroke()}function Dm(e,t,n,r){e.beginPath(),e.moveTo(t,n),e.lineTo(t,r),e.stroke()}function km(e,t,n,r,o,i=.5){let a=(t+r)/2,s=(n+o)/2,u=r-t,c=-(o-n),f=u,m=a+i*c,p=s+i*f;e.beginPath(),e.moveTo(t,n),e.bezierCurveTo(m,p,m,p,r,o),e.stroke()}function Em(e,t,n,r){e.beginPath(),e.arc(t,n,r,0,2*Math.PI),e.stroke()}function Rm(e,t,n,r){e.beginPath(),e.arc(t,n,r,0,2*Math.PI),e.fill()}function Fm(e,t,n,r){e.beginPath(),e.moveTo(t-r,n+r),e.lineTo(t+r,n+r),e.lineTo(t,n-r),e.closePath(),e.fill()}function Bm(e,t,n,r){e.beginPath(),e.moveTo(t-r,n),e.lineTo(t,n-r),e.lineTo(t+r,n),e.lineTo(t,n+r),e.closePath(),e.fill()}function Om(e,t,n,r){e.save(),e.lineWidth=2,e.beginPath(),e.moveTo(t-r,n-r),e.lineTo(t+r,n+r),e.moveTo(t-r,n+r),e.lineTo(t+r,n-r),e.stroke(),e.restore()}function Lm(e,t,n,r,o,i){e.beginPath(),e.moveTo(t,n),e.lineTo(t,n+o),e.lineTo(t+r,n+(o/2+i/2)),e.lineTo(t+r,n+(o/2-i/2)),e.closePath(),e.fill()}function Gm(e,t,n,r,o,i){e.beginPath(),e.lineTo(t,n+o),e.lineTo(t+r,n+o),e.lineTo(t+(r/2+i/2),n),e.lineTo(t+(r/2-i/2),n),e.closePath(),e.fill()}function qm(e,t,n,r,o,i){r<0||(e.beginPath(),e.moveTo(t+i,n),e.lineTo(t+r-i,n),e.quadraticCurveTo(t+r,n,t+r,n+i),e.lineTo(t+r,n+o-i),e.quadraticCurveTo(t+r,n+o,t+r-i,n+o),e.lineTo(t+i,n+o),e.quadraticCurveTo(t,n+o,t,n+o-i),e.lineTo(t,n+i),e.quadraticCurveTo(t,n,t+i,n),e.closePath())}function $m(e,t,n,r,o,i=!0){e.beginPath(),e.moveTo(t,n),i?e.lineTo(r,n):e.lineTo(t,o),e.lineTo(r,o),e.stroke()}function jm(e,t,n,r,o,i=25){let a=Math.abs(r-t),s=Math.abs(o-n),u=Math.min(a,s,i),l=tr&&nr&&n>o?(u=t-s,l=o+s,e.arc(u,l,s,0,1.5*Math.PI,!0)):(u=r-s,l=n-s,e.arc(u,l,s,.5*Math.PI,0,!0)):tr&&nr&&n>o?(u=r+s,l=n-s,e.arc(u,l,s,.5*Math.PI,1*Math.PI,!1)):(u=t+s,l=o+s,e.arc(u,l,s,Math.PI,1.5*Math.PI,!1)),e.lineTo(r,o),e.stroke()}function Wm(e,t,n,r,o){let i=(n-t)/2,a=t+i+r/2;e.lineWidth=r,e.beginPath(),e.arc(a,o,i,Math.PI,2*Math.PI),e.stroke()}function Km(e,t,n,r,o,i){let a=(o-t)/2;if(a<0)return;let s=(r-n)/2;s<0&&(s=0);let u=t+a,l=n+s;e.beginPath(),e.moveTo(t,i),e.arc(u,i,a,Math.PI,2*Math.PI),e.lineTo(r,i),e.arc(l,i,s,2*Math.PI,Math.PI,!0),e.closePath(),e.fill()}function Jm(e,t,n,r,o){e.beginPath(),e.moveTo(t,n+o),e.lineTo(t,n),e.lineTo(t+r,n),e.lineTo(t+r,n+o),e.stroke()}function Qm(e,t,n=0,r=0,o=400,i,a=eo){let s=o/t.length,u=s*1.01;i=i||me().domain(J(t.flat())).range([1,0]);for(let l=0;lnew Promise(async e=>{let t;try{t=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(s){console.warn("[AudioInput] Cannot access audio",s);return}let n={audioBitsPerSecond:128e3},r=new MediaRecorder(t,n),o=[];r.addEventListener("dataavailable",s=>{o.push(s.data)}),e({start:()=>{if(!r){console.warn("[AudioInput] Cannot record audio, no microphone?");return}r.state!=="recording"&&(console.log(`[AudioInput] Recording @ ${r.audioBitsPerSecond} b/s`),o=[],r.start())},stop:()=>new Promise(s=>{!r||(console.log("[AudioInput] Stopping audio recording"),r.addEventListener("stop",()=>{let u={type:r.mimeType},l=new Blob(o,u);s(l)}),r.stop())})})});var Fs=e=>new Promise(async t=>{let n;try{n=await navigator.requestMIDIAccess()}catch(s){console.warn("[MidiInput] Cannot access MIDI",s);return}let r=[],o=s=>{e&&e(s),r.push(s)};t({start:()=>{if(!n){console.warn("[MidiInput] Cannot record MIDI");return}for(let s of n.inputs.values())s.onmidimessage=o;console.log("[MidiInput] Starting recording"),r=[]},stop:()=>n?(console.log("[MidiInput] Stopping recording"),np(r)):void 0})});function np(e){let t=new Map,n=[];for(let r of e){let o=r.target.name,i=r.timeStamp,a=r.data[0],s=a%16,u=a-s,l=r.data[1],c=r.data.length>2?r.data[2]:0;switch(u){case 128:Rs(n,t,o,i,l,s);break;case 144:c>0?rp(t,o,i,l,s,c):Rs(n,t,o,i,l,s);break;case 224:break;default:}}return t.size>0&&console.warn(`[MidiInput] Got ${t.size} unfinished notes`),n.sort((r,o)=>r.start-o.start),n}function rp(e,t,n,r,o,i){let a=new M(r,n/1e3,i,o),s=`${t}-${o}-${r}`;e.set(s,a)}function Rs(e,t,n,r,o,i){let a=`${n}-${i}-${o}`;if(!t.has(a)){console.warn(`[MidiInput] Missing note-on for note-off with key ${a}`);return}let s=t.get(a);s.end=r/1e3,e.push(s),t.delete(a)}var Bs=class{constructor(t,n,r=()=>{},o=()=>{}){if(this._getMidiLiveData=t,this._setMidiLiveData=n,this._addCurrentNote=r,this._removeCurrentNote=o,navigator.requestMIDIAccess)navigator.requestMIDIAccess().then(this._onMIDISuccess,this._onMIDIFailure);else throw console.error("[MidiInput] WebMIDI is not supported in this browser."),new Error("Browser does not support WebMIDI")}_onMIDISuccess(t){console.groupCollapsed(`[MidiInput] ${t.inputs.size} input devices`);for(let n of t.inputs.values())console.log(` - ${n.name}`),n.onmidimessage=this._handleMIDIMessage;console.groupEnd()}_onMIDIFailure(t){console.error("[MidiInput] Cannot access MIDI devices.",t)}_handleMIDIMessage(t){let n=t.target.name,r=t.data[0],o=r%16,i=r-o,a=t.timeStamp,s=t.data[1],u=t.data.length>2?t.data[2]:0;switch(i){case 128:this._noteOff(n,a,s,o);break;case 144:u>0?this._noteOn(n,a,s,o,u):this._noteOff(n,a,s,o);break;case 224:break;default:}}_noteOn(t,n,r,o,i){let a=new M(r,n/1e3,i,o);this._addCurrentNote(a);let s=this._getMidiLiveData();s=[...s,a],this._setMidiLiveData(s)}_noteOff(t,n,r,o){let i=this._getMidiLiveData();i.length===0&&setTimeout(()=>this._noteOff(n,r),10);let a=i.length-1;for(;i[a].pitch!==r||i[a].channel!==o;)if(a--,a<0){console.warn("[MidiInput] Did not find note-on event for note-off event!");break}a>=0&&(i[a].end=n/1e3,this._setMidiLiveData(i),this._removeCurrentNote(r))}},Os=Bs;var On={};E(On,{DRUM_ACTIONS:()=>ip,DRUM_PARTS:()=>op,DRUM_PARTS_ACTIONS:()=>ap,drumPitchReplacementMapMPS850:()=>sp,generateDrumVariation:()=>co,getPitch2PositionMap:()=>lp,simplifyDrumPitches:()=>up});var op={Agogo:"DRUM_PARTS.Agogo",Cabasa:"DRUM_PARTS.Cabasa",Castanets:"DRUM_PARTS.Castanets",China:"DRUM_PARTS.China",Claves:"DRUM_PARTS.Claves",Conga:"DRUM_PARTS.Conga",Cowbell:"DRUM_PARTS.Cowbell",Crash:"DRUM_PARTS.Crash",Cuica:"DRUM_PARTS.Cuica",Cymbal:"DRUM_PARTS.Cymbal",Golpe:"DRUM_PARTS.Golpe",Grancassa:"DRUM_PARTS.Grancassa",Guiro:"DRUM_PARTS.Guiro",Hand_Clap:"DRUM_PARTS.Hand Clap",Hand:"DRUM_PARTS.Hand",Hi_Hat:"DRUM_PARTS.Hi Hat",High_Floor_Tom:"DRUM_PARTS.High Floor Tom",High_Tom:"DRUM_PARTS.High Tom",Kick:"DRUM_PARTS.Kick",Low_Floor_Tom:"DRUM_PARTS.Low Floor Tom",Low_Tom:"DRUM_PARTS.Low Tom",Mid_Tom:"DRUM_PARTS.Mid Tom",Pedal_Hi_Hat:"DRUM_PARTS.Pedal Hi Hat",Ride:"DRUM_PARTS.Ride",Right_Maraca:"DRUM_PARTS.Right Maraca",Shaker:"DRUM_PARTS.Shaker",Snare:"DRUM_PARTS.Snare",Splash:"DRUM_PARTS.Splash",Surdo:"DRUM_PARTS.Surdo",Timbale:"DRUM_PARTS.Timbale",Tinkle_Bell:"DRUM_PARTS.Tinkle Bell",Triangle:"DRUM_PARTS.Triangle",Vibraslap:"DRUM_PARTS.Vibraslap",Whistle_high:"DRUM_PARTS.Whistle high",Whistle_low:"DRUM_PARTS.Whistle low",Woodblock_high:"DRUM_PARTS.Woodblock high",Woodblock_low:"DRUM_PARTS.Woodblock low"},ip={choke:"DRUM_ACTIONS.choke",finger:"DRUM_ACTIONS.finger",hit:"DRUM_ACTIONS.hit",mute:"DRUM_ACTIONS.mute",return:"DRUM_ACTIONS.return",scrapReturn:"DRUM_ACTIONS.scrapReturn",sideStick:"DRUM_ACTIONS.sideStick",slap:"DRUM_ACTIONS.slap"},ap={Agogo_high_hit:"DRUM_PARTS_ACTIONS.Agogo high (hit)",Agogo_low_hit:"DRUM_PARTS_ACTIONS.Agogo low (hit)",Cabasa_return:"DRUM_PARTS_ACTIONS.Cabasa (return)",Castanets_hit:"DRUM_PARTS_ACTIONS.Castanets (hit)",China_choke:"DRUM_PARTS_ACTIONS.China (choke)",Claves_hit:"DRUM_PARTS_ACTIONS.Claves (hit)",Conga_high_slap:"DRUM_PARTS_ACTIONS.Conga high (slap)",Conga_low_mute:"DRUM_PARTS_ACTIONS.Conga low (mute)",Cowbell_high_tip:"DRUM_PARTS_ACTIONS.Cowbell high (tip)",Crash_medium_choke:"DRUM_PARTS_ACTIONS.Crash medium (choke)",Cuica_mute:"DRUM_PARTS_ACTIONS.Cuica (mute)",Cuica_open:"DRUM_PARTS_ACTIONS.Cuica (open)",Cymbal_hit:"DRUM_PARTS_ACTIONS.Cymbal (hit)",Golpe_finger:"DRUM_PARTS_ACTIONS.Golpe (finger)",Grancassa_hit:"DRUM_PARTS_ACTIONS.Grancassa (hit)",Guiro_hit:"DRUM_PARTS_ACTIONS.Guiro (hit)",Guiro_scrap_return:"DRUM_PARTS_ACTIONS.Guiro (scrap-return)",Hand_Clap_hit:"DRUM_PARTS_ACTIONS.Hand Clap (hit)",Hand_slap:"DRUM_PARTS_ACTIONS.Hand (slap)",Hi_Hat_closed:"DRUM_PARTS_ACTIONS.Hi-Hat (closed)",Hi_Hat_open:"DRUM_PARTS_ACTIONS.Hi-Hat (open)",High_Floor_Tom_hit:"DRUM_PARTS_ACTIONS.High Floor Tom (hit)",High_Tom_hit:"DRUM_PARTS_ACTIONS.High Tom (hit)",Kick_hit:"DRUM_PARTS_ACTIONS.Kick (hit)",Low_Floor_Tom_hit:"DRUM_PARTS_ACTIONS.Low Floor Tom (hit)",Low_Tom_hit:"DRUM_PARTS_ACTIONS.Low Tom (hit)",Mid_Tom_hit:"DRUM_PARTS_ACTIONS.Mid Tom (hit)",Pedal_Hi_Hat_hit:"DRUM_PARTS_ACTIONS.Pedal Hi-Hat (hit)",Ride_choke:"DRUM_PARTS_ACTIONS.Ride (choke)",Right_Maraca_return:"DRUM_PARTS_ACTIONS.Right Maraca (return)",Shaker_return:"DRUM_PARTS_ACTIONS.Shaker (return)",Snare_hit:"DRUM_PARTS_ACTIONS.Snare (hit)",Snare_side_stick:"DRUM_PARTS_ACTIONS.Snare (side stick)",Splash_choke:"DRUM_PARTS_ACTIONS.Splash (choke)",Surdo_hit:"DRUM_PARTS_ACTIONS.Surdo (hit)",Surdo_mute:"DRUM_PARTS_ACTIONS.Surdo (mute)",Timbale_high_hit:"DRUM_PARTS_ACTIONS.Timbale high (hit)",Timbale_low_hit:"DRUM_PARTS_ACTIONS.Timbale low (hit)",Tinkle_Bell_hit:"DRUM_PARTS_ACTIONS.Tinkle Bell (hit)",Triangle_hit:"DRUM_PARTS_ACTIONS.Triangle (hit)",Triangle_mute:"DRUM_PARTS_ACTIONS.Triangle (mute)",Vibraslap_hit:"DRUM_PARTS_ACTIONS.Vibraslap (hit)",Whistle_high_hit:"DRUM_PARTS_ACTIONS.Whistle high (hit)",Whistle_low_hit:"DRUM_PARTS_ACTIONS.Whistle low (hit)",Woodblock_high_hit:"DRUM_PARTS_ACTIONS.Woodblock high (hit)",Woodblock_low_hit:"DRUM_PARTS_ACTIONS.Woodblock low (hit)"},sp=new Map([[49,{repPitch:49,zone:1,order:10,line:-1,shape:"o",label:"CC1",name:"Crash Cymbal 1"}],[55,{repPitch:49,zone:2,order:11,line:-1,shape:"o",label:"CC1",name:"Crash Cymbal 1"}],[52,{repPitch:57,zone:1,order:20,line:0,shape:"o",label:"CC2",name:"Crash Cymbal 2"}],[57,{repPitch:57,zone:2,order:21,line:0,shape:"o",label:"CC2",name:"Crash Cymbal 2"}],[22,{repPitch:46,zone:1,order:30,line:0,shape:"<>",label:"HHS",name:"Hi-Hat"}],[26,{repPitch:46,zone:2,order:31,line:0,shape:"<>",label:"HHS",name:"Hi-Hat"}],[42,{repPitch:46,zone:3,order:32,line:0,shape:"<>",label:"HHS",name:"Hi-Hat"}],[46,{repPitch:46,zone:4,order:33,line:0,shape:"<>",label:"HHS",name:"Hi-Hat"}],[44,{repPitch:44,zone:1,order:40,line:9,shape:"o",label:"HHP",name:"Hi-Hat Pedal"}],[51,{repPitch:51,zone:1,order:50,line:1,shape:"x",label:"Rd",name:"Ride Cymbal"}],[53,{repPitch:51,zone:2,order:51,line:1,shape:"x",label:"Rd",name:"Ride Cymbal"}],[59,{repPitch:51,zone:3,order:52,line:1,shape:"x",label:"Rd",name:"Ride Cymbal"}],[38,{repPitch:38,zone:1,order:60,line:4,shape:"o",label:"SN",name:"Snare"}],[40,{repPitch:38,zone:2,order:61,line:4,shape:"o",label:"SN",name:"Snare"}],[48,{repPitch:48,zone:1,order:90,line:2,shape:"o",label:"T1",name:"Tom 1"}],[50,{repPitch:48,zone:2,order:91,line:2,shape:"o",label:"T1",name:"Tom 1"}],[45,{repPitch:45,zone:1,order:100,line:3,shape:"o",label:"T2",name:"Tom 2"}],[47,{repPitch:45,zone:2,order:101,line:3,shape:"o",label:"T2",name:"Tom 2"}],[43,{repPitch:43,zone:1,order:70,line:5,shape:"o",label:"ST1",name:"Stand Tom 1"}],[58,{repPitch:43,zone:2,order:71,line:5,shape:"o",label:"ST1",name:"Stand Tom 1"}],[39,{repPitch:41,zone:1,order:80,line:6,shape:"o",label:"ST2",name:"Stand Tom 2"}],[41,{repPitch:41,zone:2,order:81,line:6,shape:"o",label:"ST2",name:"Stand Tom 2"}],[35,{repPitch:36,zone:1,order:110,line:8,shape:"o",label:"BD",name:"Bass Drum"}],[36,{repPitch:36,zone:2,order:111,line:8,shape:"o",label:"BD",name:"Bass Drum"}]]);function co(e,t=1,n=.1,r=.1){let o=new Set;for(let l of e)o.add(l.pitch);let i=[...o],a=ie(15,128),s=Xr(0,t),u=[];for(let l of e){if(Se(0,1)l.start-c.start),u}function up(e,t){if(!t||!(t instanceof Map))throw new Error("No replacement map given!");let n=new Set;return e.map(o=>{let i=o.pitch,a=i;return t.has(i)?a=t.get(i).repPitch:n.add(i),M.from(C(A({},o),{pitch:a}))})}function lp(e){let t=new Map,n=[...F([...e],r=>r[1].repPitch)];n.sort((r,o)=>r[1][0][1].order-o[1][0][1].order);for(let[r,o]of n.entries())t.set(o[0],r);return t}var mo={};E(mo,{StringedTuning:()=>x,fretboardPositionsFromMidi:()=>bp,generateExampleData:()=>dp,getFretboardPositionsFromNoteName:()=>hp,getFretboardPositionsFromPitch:()=>qs,getNoteInfoFromFretboardPos:()=>pp,getPitchFromFretboardPos:()=>fo,getTuningFromPitches:()=>fp,getTuningPitchRange:()=>Gs,guitarNoteFromNote:()=>cp,stringColors:()=>mp,stringedTunings:()=>Ls});var x=class{constructor(t,n){this.name=t,this.notes=n,this.short=n.join(" "),this.pitches=n.map(r=>oe(r).pitch),this.stringCount=n.length}},Ls=new Map([["Guitar",new Map([[6,[new x("E stand.",["E2","A2","D3","G3","B3","E4"]),new x("Drop D",["D2","A2","D3","G3","B3","E4"]),new x("Drop C",["C2","G2","C3","F3","A3","D4"]),new x("1/2 down",["D#2","G#2","C#3","F#3","A#3","D#4"]),new x("1 down",["D2","G2","C3","F3","A3","D4"]),new x("1 1/2 down",["C#2","F#2","B2","E3","G#3","C#4"]),new x("2 down",["C2","F2","A#2","D#3","G3","C4"]),new x("DADGAG",["D2","A2","D3","G3","A3","D4"])]],[7,[new x("B stand.",["B1","E2","A2","D3","G3","B3","E4"]),new x("Drop A",["A1","E2","A2","D3","G3","B3","E4"]),new x("1/2 down",["A#1","D#2","G#2","C#3","F#3","A#3","D#4"]),new x("1 down",["A1","D2","G2","C3","F3","A3","D4"]),new x("1 1/2 down",["G#1","C#2","F#2","B2","E3","G#3","C#4"]),new x("2 down",["G1","C2","F2","A#2","D#3","G3","C4"])]],[8,[new x("F# stand.",["F#1","B1","E2","A2","D3","G3","B3","E4"]),new x("Drop E",["E1","B1","E2","A2","D3","G3","B3","E4"]),new x("1/2 down",["F1","A#1","D#2","G#2","C#3","F#3","A#3","D#4"]),new x("1 down",["E1","A1","D2","G2","C3","F3","A3","D4"]),new x("1 1/2 down",["D#1","G#1","C#2","F#2","B2","E3","G#3","C#4"]),new x("2 down",["D1","G1","C2","F2","A#2","D#3","G3","C4"])]]])],["Bass",new Map([[4,[new x("E stand.",["E1","A1","D2","G2"]),new x("Drop D",["D1","A1","D2","G2"]),new x("1/2 down",["D#1","G#1","C#2","F#2"]),new x("1 down",["D1","G1","C2","F2"]),new x("1 1/2 down",["C#1","F#1","B1","E2"]),new x("2 down",["C1","F1","A#1","D#2"])]],[5,[new x("B stand.",["B0","E1","A1","D2","G2"]),new x("Drop A",["A0","D1","A1","D2","G2"]),new x("1/2 down",["A#0","D#1","G#1","C#2","F#2"]),new x("1 down",["A0","D1","G1","C2","F2"]),new x("1 1/2 down",["G#0","C#1","F#1","B1","E2"]),new x("2 down",["G0","C1","F1","A#1","D#2"])]],[6,[new x("F# stand.",["F#0","B0","E1","A1","D2","G2"]),new x("Drop E",["E0","A0","D1","A1","D2","G2"]),new x("1/2 down",["F0","A#0","D#1","G#1","C#2","F#2"]),new x("1 down",["E1","A0","D1","G1","C2","F2"]),new x("1 1/2 down",["D#0","G#0","C#1","F#1","B1","E2"]),new x("2 down",["D0","G0","C1","F1","A#1","D#2"])]]])],["Ukulele",new Map([[4,[new x("Hawaii",["G4","C4","E4","A4"]),new x("Low G",["G3","C4","E4","A4"]),new x("D-tuning",["A4","D4","F#4","B4"]),new x("Canadian",["A3","D4","F#4","B4"]),new x("Bariton",["D3","G3","B3","E4"])]]])]]);function cp(e,t){let n=e.channel,r=t.stringCount-n-1,o=e.pitch-t.pitches[r];return Q.fromNote(e,n,o)}function fp(e){let t=e.length;for(let n of Ls.values())if(n.has(t)){let r=n.get(t);for(let o of r)if(Ae(o.pitches,e))return o}return null}function Gs(e,t=24){let n=e.pitches[e.stringCount-1];return[e.pitches[0],n+t]}var mp=["#888","#d122e9","#31eb1c","#f37c14","#10edfc","#ffeb09","#ff210d","silver","gold"];function fo(e,t,n){let r=n.stringCount-e+1;return n.pitches[r-1]+t}function pp(e,t,n){let r=fo(e,t,n);return W(r)}function qs(e,t,n){let r=[],o=t.stringCount;for(let i=0;ia+n||r.push({string:o-i,fret:e-a})}return r}function hp(e,t,n=24){let r=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];if(!r.includes(e))return null;let o=[],i=r.indexOf(e),a=t.stringCount;for(let s=0;s{let o=r+Se(0,1);r=o+Se(0,1);let i=ie(1,7)(),a=ie(0,25)(),s=fo(i,a,n),u=ie(15,127)();return new Q(s,o,u,i,r,i,a)})}function bp(e,t,n=24){if(!e||e.length===0)return[];if(!t||!t.pitches)return console.warn("Invalid tuning parameter!"),[];let[r,o]=Gs(t,n),i=[],a=[];for(let u of e)u.pitcho?a.push(u.pitch):i.push(u);let s=[];for(let u of i){let l=qs(u.pitch,t,24),c=l[0];for(let p of l)p.fret0){let[u,l]=J(e,f=>f.pitch),c="";ude,bestTransposition:()=>Dh,convertNotesToHtmlTab:()=>Nh,convertNotesToTab:()=>Ch,convertNumbersToLetters:()=>Ih,convertTabToNotes:()=>Th,lamellophoneTunings:()=>_h});var Io={};E(Io,{detectChordsByExactStart:()=>Wn,detectChordsByOverlap:()=>Ph,detectChordsBySimilarStart:()=>vh,getChordName:()=>Ah,getChordType:()=>Sh});var Ln=(e,t)=>Array(Math.abs(t)+1).join(e);function H(e,t,n){return function(...r){return console.warn(`${e} is deprecated. Use ${t}.`),n.apply(this,r)}}function Gn(e){return e!==null&&typeof e=="object"&&typeof e.name=="string"}function qn(e){return e!==null&&typeof e=="object"&&typeof e.step=="number"&&typeof e.alt=="number"}var zs=[0,2,4,-1,1,3,5],Us=zs.map(e=>Math.floor(e*7/12));function Vs(e){let{step:t,alt:n,oct:r,dir:o=1}=e,i=zs[t]+7*n;if(r===void 0)return[o*i];let a=r-Us[t]-4*n;return[o*i,o*a]}var gp=[3,0,4,1,5,2,6];function Xs(e){let[t,n,r]=e,o=gp[xp(t)],i=Math.floor((t+1)/7);if(n===void 0)return{step:o,alt:i,dir:r};let a=n+4*i+Us[o];return{step:o,alt:i,oct:a,dir:r}}function xp(e){let t=(e+1)%7;return t<0?7+t:t}var Ys={empty:!0,name:"",pc:"",acc:""},$s=new Map,yp=e=>"CDEFGAB".charAt(e),$n=e=>e<0?Ln("b",-e):Ln("#",e),jn=e=>e[0]==="b"?-e.length:e.length;function I(e){let t=$s.get(e);if(t)return t;let n=typeof e=="string"?Pp(e):qn(e)?I(wp(e)):Gn(e)?I(e.name):Ys;return $s.set(e,n),n}var Mp=/^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/;function bo(e){let t=Mp.exec(e);return[t[1].toUpperCase(),t[2].replace(/x/g,"##"),t[3],t[4]]}function Ws(e){return I(Xs(e))}var vp=(e,t)=>(e%t+t)%t,po=[0,2,4,5,7,9,11];function Pp(e){let t=bo(e);if(t[0]===""||t[3]!=="")return Ys;let n=t[0],r=t[1],o=t[2],i=(n.charCodeAt(0)+3)%7,a=jn(r),s=o.length?+o:void 0,u=Vs({step:i,alt:a,oct:s}),l=n+r+o,c=n+r,f=(po[i]+a+120)%12,m=s===void 0?vp(po[i]+a,12)-12*99:po[i]+a+12*(s+1),p=m>=0&&m<=127?m:null,h=s===void 0?null:Math.pow(2,(m-69)/12)*440;return{empty:!1,acc:r,alt:a,chroma:f,coord:u,freq:h,height:m,letter:n,midi:p,name:l,oct:s,pc:c,step:i}}function wp(e){let{step:t,alt:n,oct:r}=e,o=yp(t);if(!o)return"";let i=o+$n(n);return r||r===0?i+r:i}var ho={empty:!0,name:"",acc:""},Sp="([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})",Ap="(AA|A|P|M|m|d|dd)([-+]?\\d+)",_p=new RegExp("^"+Sp+"|"+Ap+"$");function Tp(e){let t=_p.exec(`${e}`);return t===null?["",""]:t[1]?[t[1],t[2]]:[t[4],t[3]]}var js={};function te(e){return typeof e=="string"?js[e]||(js[e]=Cp(e)):qn(e)?te(Ip(e)):Gn(e)?te(e.name):ho}var Hs=[0,2,4,5,7,9,11],Ks="PMMPPMM";function Cp(e){let t=Tp(e);if(t[0]==="")return ho;let n=+t[0],r=t[1],o=(Math.abs(n)-1)%7,i=Ks[o];if(i==="M"&&r==="P")return ho;let a=i==="M"?"majorable":"perfectable",s=""+n+r,u=n<0?-1:1,l=n===8||n===-8?n:u*(o+1),c=Np(a,r),f=Math.floor((Math.abs(n)-1)/7),m=u*(Hs[o]+c+12*f),p=(u*(Hs[o]+c)%12+12)%12,h=Vs({step:o,alt:c,oct:f,dir:u});return{empty:!1,name:s,num:n,q:r,step:o,alt:c,dir:u,type:a,simple:l,semitones:m,chroma:p,coord:h,oct:f}}function go(e,t){let[n,r=0]=e,o=n*7+r*12<0,i=t||o?[-n,-r,-1]:[n,r,1];return te(Xs(i))}function Np(e,t){return t==="M"&&e==="majorable"||t==="P"&&e==="perfectable"?0:t==="m"&&e==="majorable"?-1:/^A+$/.test(t)?t.length:/^d+$/.test(t)?-1*(e==="perfectable"?t.length:t.length+1):0}function Ip(e){let{step:t,alt:n,oct:r=0,dir:o}=e;if(!o)return"";let i=t+1+7*r,a=i===0?t+1:i,s=o<0?"-":"",u=Ks[t]==="M"?"majorable":"perfectable";return s+a+Dp(u,n)}function Dp(e,t){return t===0?e==="majorable"?"M":"P":t===-1&&e==="majorable"?"m":t>0?Ln("A",t):Ln("d",e==="perfectable"?t:t+1)}function ne(e,t){let n=I(e),r=te(t);if(n.empty||r.empty)return"";let o=n.coord,i=r.coord,a=o.length===1?[o[0]+i[0]]:[o[0]+i[0],o[1]+i[1]];return Ws(a).name}function qt(e,t){let n=I(e),r=I(t);if(n.empty||r.empty)return"";let o=n.coord,i=r.coord,a=i[0]-o[0],s=o.length===2&&i.length===2?i[1]-o[1]:-Math.floor(a*7/12),u=r.height===n.height&&r.midi!==null&&n.midi!==null&&n.step>r.step;return go([a,s],u).name}function ht(e,t){let n=t.length,r=(e%n+n)%n;return t.slice(r,n).concat(t.slice(0,r))}function xo(e){return e.filter(t=>t===0||t)}var pe={empty:!0,name:"",setNum:0,chroma:"000000000000",normalized:"000000000000",intervals:[]},eu=e=>Number(e).toString(2),Js=e=>parseInt(e,2),Rp=/^[01]{12}$/;function tu(e){return Rp.test(e)}var Fp=e=>typeof e=="number"&&e>=0&&e<=4095,Bp=e=>e&&tu(e.chroma),Qs={[pe.chroma]:pe};function he(e){let t=tu(e)?e:Fp(e)?eu(e):Array.isArray(e)?$p(e):Bp(e)?e.chroma:pe.chroma;return Qs[t]=Qs[t]||qp(t)}var p7=H("Pcset.pcset","Pcset.get",he);var Op=["1P","2m","2M","3m","3M","4P","5d","5P","6m","6M","7m","7M"];function Lp(e){let t=[];for(let n=0;n<12;n++)e.charAt(n)==="1"&&t.push(Op[n]);return t}function yo(e,t=!0){let r=he(e).chroma.split("");return xo(r.map((o,i)=>{let a=ht(i,r);return t&&a[0]==="0"?null:a.join("")}))}function Mo(e){let t=he(e).setNum;return n=>{let r=he(n).setNum;return t&&t!==r&&(r&t)===r}}function Hn(e){let t=he(e).setNum;return n=>{let r=he(n).setNum;return t&&t!==r&&(r|t)===r}}function Gp(e){let t=e.split("");return t.map((n,r)=>ht(r,t).join(""))}function qp(e){let t=Js(e),n=Gp(e).map(Js).filter(i=>i>=2048).sort()[0],r=eu(n),o=Lp(e);return{empty:!1,name:"",setNum:t,chroma:e,normalized:r,intervals:o}}function $p(e){if(e.length===0)return pe.chroma;let t,n=[0,0,0,0,0,0,0,0,0,0,0,0];for(let r=0;rUp(o,i))}function Up(e,t){$t[t]=e}function Vp(e){let t=n=>e.indexOf(n)!==-1;return t("5A")?"Augmented":t("3M")?"Major":t("5d")?"Diminished":t("3m")?"Minor":"Unknown"}jp.forEach(([e,t,n])=>zp(e.split(" "),n.split(" "),t));vo.sort((e,t)=>e.setNum-t.setNum);var Xp=e=>{let t=e.reduce((n,r)=>{let o=I(r).chroma;return o!==void 0&&(n[o]=n[o]||I(r).name),n},{});return n=>t[n]};function wo(e){let t=e.map(r=>I(r).pc).filter(r=>r);return I.length===0?[]:Yp(t,1).filter(r=>r.weight).sort((r,o)=>o.weight-r.weight).map(r=>r.name)}function Yp(e,t){let n=e[0],r=I(n).chroma,o=Xp(e),i=yo(e,!1),a=[];return i.forEach((s,u)=>{Ze().filter(c=>c.chroma===s).forEach(c=>{let f=c.aliases[0],m=o(u);u!==r?a.push({weight:.5*t,name:`${m}${f}/${n}`}):a.push({weight:1*t,name:`${m}${f}`})})}),a}var Wp=[["1P 2M 3M 5P 6M","major pentatonic","pentatonic"],["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 3m 3M 5P 6M","major blues"],["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 7m","whole tone","messiaen's mode #1"],["1P 2m 4P 4A 5P 7M","messiaen's mode #5"],["1P 3m 4P 5d 5P 7m","minor blues","blues"],["1P 2M 3M 4P 5d 6m 7m","locrian major","arabian"],["1P 2m 3M 4A 5P 6m 7M","double harmonic lydian"],["1P 2M 3m 4P 5P 6m 7M","harmonic minor"],["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 5P 6M 7M","lydian"],["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 4P 5P 6M 7M","melodic minor"],["1P 2m 3m 4P 5d 6m 7m","locrian"],["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 4P 5P 6m 7m","phrygian"],["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","aeolian","minor"],["1P 2M 3M 4P 5P 6m 7M","harmonic major"],["1P 2m 3M 4P 5P 6m 7M","double harmonic major","gypsy"],["1P 2M 3m 4P 5P 6M 7m","dorian"],["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 5P 6M 7m","mixolydian","dominant"],["1P 2m 3M 4P 5d 6m 7M","persian"],["1P 2M 3M 4P 5P 6M 7M","major","ionian"],["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 4P 5P 6M 7m 7M","bebop"],["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 6m 6M 7M","diminished","whole-half diminished"],["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"]],Kp=C(A({},pe),{intervals:[],aliases:[]}),nu=[],jt={};function Ht(e){return jt[e]||Kp}var _7=H("ScaleDictionary.scaleType","ScaleType.get",Ht);function zn(){return nu.slice()}var T7=H("ScaleDictionary.entries","ScaleType.all",zn);function Jp(e,t,n=[]){let r=C(A({},he(e)),{name:t,intervals:e,aliases:n});return nu.push(r),jt[r.name]=r,jt[r.setNum]=r,jt[r.chroma]=r,r.aliases.forEach(o=>Qp(r,o)),r}function Qp(e,t){jt[t]=e}Wp.forEach(([e,t,...n])=>Jp(e.split(" "),t,n));var So={empty:!0,name:"",symbol:"",root:"",rootDegree:0,type:"",tonic:null,setNum:NaN,quality:"Unknown",chroma:"",normalized:"",aliases:[],notes:[],intervals:[]},Zp=/^(6|64|7|9|11|13)$/;function Vn(e){let[t,n,r,o]=bo(e);return t===""?["",e]:t==="A"&&o==="ug"?["","aug"]:!o&&(r==="4"||r==="5")?[t+n,r]:Zp.test(r)?[t+n,r+o]:[t+n+r,o]}function zt(e){if(e==="")return So;if(Array.isArray(e)&&e.length===2)return Un(e[1],e[0]);{let[t,n]=Vn(e),r=Un(n,t);return r.empty?Un(e):r}}function Un(e,t,n){let r=Po(e),o=I(t||""),i=I(n||"");if(r.empty||t&&o.empty||n&&i.empty)return So;let a=qt(o.pc,i.pc),s=r.intervals.indexOf(a)+1;if(!i.empty&&!s)return So;let u=Array.from(r.intervals);for(let m=1;mne(o,m));e=r.aliases.indexOf(e)!==-1?e:r.aliases[0];let c=`${o.empty?"":o.pc}${e}${i.empty||s<=1?"":"/"+i.pc}`,f=`${t?o.pc+" ":""}${r.name}${s>1&&n?" over "+i.pc:""}`;return C(A({},r),{name:f,symbol:c,type:r.name,root:i.name,intervals:u,rootDegree:s,tonic:o.name,notes:l})}var eh=H("Chord.chord","Chord.get",zt);function th(e,t){let[n,r]=Vn(e);return n?ne(n,t)+r:e}function nh(e){let t=zt(e),n=Hn(t.chroma);return zn().filter(r=>n(r.chroma)).map(r=>r.name)}function rh(e){let t=zt(e),n=Hn(t.chroma);return Ze().filter(r=>n(r.chroma)).map(r=>t.tonic+r.aliases[0])}function oh(e){let t=zt(e),n=Mo(t.chroma);return Ze().filter(r=>n(r.chroma)).map(r=>t.tonic+r.aliases[0])}var Ao={getChord:Un,get:zt,detect:wo,chordScales:nh,extended:rh,reduced:oh,tokenize:Vn,transpose:th,chord:eh};var ih=[[.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"]]],ah=[];ih.forEach(([e,t,n])=>sh(e,t,n));function sh(e,t,n){ah.push({empty:!1,dots:"",name:"",value:1/e,fraction:e<1?[1/e,1]:[1,e],shorthand:t,names:n})}var L7="P m M m M P d P m M m M".split(" ");var G7=ru((e,t)=>[e[0]+t[0],e[1]+t[1]]);var q7=ru((e,t)=>[e[0]-t[0],e[1]-t[1]]);function ru(e){return(t,n)=>{let r=te(t).coord,o=te(n).coord;if(r&&o){let i=e(r,o);return go(i).name}}}var H7=Math.log(2),z7=Math.log(440);var U7="C C# D D# E F F# G G# A A# B".split(" "),V7="C Db D Eb E F Gb G Ab A Bb B".split(" ");var iu={empty:!0,name:"",chordType:""},ou={};function et(e){return typeof e=="string"?ou[e]||(ou[e]=mh(e)):typeof e=="number"?et(_o[e]||""):qn(e)?lh(e):Gn(e)?et(e.name):iu}var Z7=H("RomanNumeral.romanNumeral","RomanNumeral.get",et);function lh(e){return et($n(e.alt)+_o[e.step])}var ch=/^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/;function fh(e){return ch.exec(e)||["","","",""]}var au="I II III IV V VI VII",_o=au.split(" "),e4=au.toLowerCase().split(" ");function mh(e){let[t,n,r,o]=fh(e);if(!r)return iu;let i=r.toUpperCase(),a=_o.indexOf(i),s=jn(n),u=1;return{empty:!1,name:t,roman:r,interval:te({step:a,alt:s,dir:u}).name,acc:n,chordType:o,alt:s,step:a,major:r===i,oct:0,dir:u}}var se=Object.freeze([]),uu={type:"major",tonic:"",alteration:0,keySignature:""},Xn={tonic:"",grades:se,intervals:se,scale:se,chords:se,chordsHarmonicFunction:se,chordScales:se},a4=C(A(A({},uu),Xn),{type:"major",minorRelative:"",scale:se,secondaryDominants:se,secondaryDominantsMinorRelative:se,substituteDominants:se,substituteDominantsMinorRelative:se}),s4=C(A({},uu),{type:"minor",relativeMajor:"",natural:Xn,harmonic:Xn,melodic:Xn}),su=(e,t,n="")=>t.map((r,o)=>`${e[o]}${n}${r}`);function Yn(e,t,n,r){return o=>{let i=e.map(s=>et(s).interval||""),a=i.map(s=>ne(o,s));return{tonic:o,grades:e,intervals:i,scale:a,chords:su(a,t),chordsHarmonicFunction:n.slice(),chordScales:su(a,r," ")}}}var u4=Yn("I II III IV V VI VII".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(",")),l4=Yn("I II bIII IV V bVI bVII".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(",")),c4=Yn("I II bIII IV V bVI VII".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(",")),f4=Yn("I II bIII IV V VI VII".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(","));var Co=[[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"]],lu=C(A({},pe),{name:"",alt:0,modeNum:NaN,triad:"",seventh:"",aliases:[]}),cu=Co.map(hh),To={};cu.forEach(e=>{To[e.name]=e,e.aliases.forEach(t=>{To[t]=e})});function No(e){return typeof e=="string"?To[e.toLowerCase()]||lu:e&&e.name?No(e.name):lu}var M4=H("Mode.mode","Mode.get",No);function ph(){return cu.slice()}var v4=H("Mode.mode","Mode.all",ph);function hh(e){let[t,n,r,o,i,a,s]=e,u=s?[s]:[],l=Number(n).toString(2),c=Ht(o).intervals;return{empty:!1,intervals:c,modeNum:t,chroma:l,normalized:l,name:o,setNum:n,alt:r,triad:i,seventh:a,aliases:u}}function fu(e){return(t,n)=>{let r=No(t);if(r.empty)return[];let o=ht(r.modeNum,e),i=r.intervals.map(a=>ne(n,a));return o.map((a,s)=>i[s]+a)}}var P4=fu(Co.map(e=>e[4])),w4=fu(Co.map(e=>e[5]));var dh={empty:!0,name:"",type:"",tonic:null,setNum:NaN,chroma:"",normalized:"",aliases:[],notes:[],intervals:[]};function bh(e){if(typeof e!="string")return["",""];let t=e.indexOf(" "),n=I(e.substring(0,t));if(n.empty){let o=I(e);return o.empty?["",e]:[o.name,""]}let r=e.substring(n.name.length+1);return[n.name,r.length?r:""]}function gh(e){let t=Array.isArray(e)?e:bh(e),n=I(t[0]).name,r=Ht(t[1]);if(r.empty)return dh;let o=r.name,i=n?r.intervals.map(s=>ne(n,s)):[],a=n?n+" "+o:o;return C(A({},r),{name:a,type:o,tonic:n,notes:i})}var H4=H("Scale.scale","Scale.get",gh);function Wn(e){return[...F(e,r=>r.start)].map(r=>r[1]).sort((r,o)=>r[0].start-o[0].start).map(r=>r.sort((o,i)=>o.pitch-i.pitch))}function vh(e,t=.02){let n=[],r=[],o=0,i=new Set;for(let a of e)a.start-o<=t?i.has(a.pitch)||(r.push(a),i.add(a.pitch)):(r.length>0&&n.push(r),r=[a],o=a.start,i=new Set([a.pitch]));return r.length>0&&n.push(r),n}function Ph(e,t=!0){if(!e||e.length===0)return[];if(e.length===1)return[[e[0]]];let n=[...e].sort((i,a)=>i.start!==a.start?i.start-a.start:i.pitch-a.pitch),r=new Set(n),o=[];for(;r.size>0;){let i=r.values().next().value;r.delete(i);let a=[i];for(let s of r.values())i.overlapInSeconds(s)>=.5*i.getDuration()&&(a.push(s),r.delete(s));t&&(a=a.sort((s,u)=>s.pitch-u.pitch)),o.push(a)}return o}var wh=new Map([[1,[{steps:[5],name:"Inverted power chord",suffix:"?"},{steps:[7],name:"Power chord",suffix:"5"}]],[2,[{steps:[2,7],name:"Suspended second",suffix:"sus2"},{steps:[3,6],name:"Diminished",suffix:"dim"},{steps:[3,7],name:"Minor",suffix:"min"},{steps:[4,10],name:"Seventh",suffix:"7"},{steps:[4,7],name:"Major",suffix:""},{steps:[4,8],name:"Augmented",suffix:"aug"},{steps:[4,9],name:"Sixth",suffix:"6"},{steps:[5,7],name:"Suspended fourth",suffix:"sus4"}]],[3,[{steps:[2,3,7],name:"Minor, added ninth",suffix:"m(add9)"},{steps:[2,4,7],name:"Added ninth",suffix:"add9"},{steps:[3,6,10],name:"Minor seventh, flat fifth",suffix:"m7b5"},{steps:[3,7,10],name:"Minor seventh",suffix:"m7"},{steps:[3,7,11],name:"Minor, major seventh",suffix:"m(Maj7)"},{steps:[3,7,8],name:"Minor, flat sixth",suffix:"mb6"},{steps:[3,7,9],name:"Minor sixth",suffix:"m6"},{steps:[4,5,11],name:"Major eleventh (no fifth, no ninth)",suffix:"Maj11"},{steps:[4,5,7],name:"Added fourth",suffix:"add4"},{steps:[4,7,10],name:"Dominant seventh",suffix:"7"},{steps:[4,7,11],name:"Major seventh",suffix:"Maj7"},{steps:[4,7,9],name:"Major Sixth",suffix:"Maj6"}]],[4,[{steps:[2,3,6,10],name:"Minor ninth flat fifth",suffix:"m9b5"},{steps:[2,3,7,10],name:"Minor ninth",suffix:"m9"},{steps:[2,3,7,11],name:"Minor ninth, major seventh",suffix:"m9(Maj7)"},{steps:[2,3,7,9],name:"Minor sixth, added ninth",suffix:"m6/9"},{steps:[2,4,7,11],name:"Major ninth",suffix:"Maj9"},{steps:[2,4,7,9],name:"Sixth, added ninth",suffix:"6/9"},{steps:[4,5,7,11],name:"Major eleventh (no ninth)",suffix:"Maj11"},{steps:[4,6,7,10],name:"Seventh, sharp eleventh",suffix:"7#11"},{steps:[4,6,7,11],name:"Major seventh, sharp eleventh",suffix:"Maj7#11"}]],[5,[{steps:[2,4,5,7,11],name:"Major eleventh",suffix:"Maj11"},{steps:[2,4,7,9,11],name:"Major thirteen",suffix:"Maj13"}]],[6,[{steps:[2,3,4,6,7,10],name:"Minor thirteen",suffix:"m13"}]]]);function Sh(e){if(!e||e.length===0)return{name:"No note"};if(e.length===1)return{name:"Single note"};let t=[],n=e[0].pitch;for(let o=1;oo%12),t=[...new Set(t)],t=t.filter(o=>o!==0),t.length===0)return{name:"Octave"};t.sort((o,i)=>o-i);let r=wh.get(t.length);if(r){for(let o of r)if(Ae(t,o.steps))return o}return{name:"Unknown chord type"}}function Ah(e){let t=e.sort((r,o)=>r.pitch-o.pitch).map(r=>r.getLetter());return Ao.detect(t)}var de=class{constructor(t,n){this.name=t,this.notes=n,this.short=n.join(" "),this.pitches=n.map(r=>oe(r).pitch),this.pitchesSorted=[...this.pitches].sort((r,o)=>r-o),this.keyCount=n.length}getNumbers(){let t=this.pitchesSorted,n=new Map;for(let[r,o]of t.entries()){let i=r+1,a="",s=o-12;for(;s>0&&n.has(s);)i=n.get(s).number,a+="\xB0",s-=12;n.set(o,{number:i,numberString:`${i}${a}`})}return[...n.values()].map(r=>r.numberString)}getLetters(){let t=this.pitchesSorted,n=new Map;for(let[r,o]of t.entries()){let i=r+1,a="",s=o-12;for(;s>0&&n.has(s);)i=n.get(s).number,a+="\xB0",s-=12;let u=W(o).name;n.set(o,{number:i,letterString:`${u}${a}`})}return[...n.values()].map(r=>r.letterString)}},_h=new Map([["Kalimba",new Map([["9 A Major",new de("9 A Major",["A5","C#6","C#5","A5","A4","F#5","E5","E6","B5"])],["9 A Minor",new de("9 A Minor",["A5","C6","C5","A5","A4","F5","E5","E6","B5"])],["9 A Minor 7",new de("9 A Minor 7",["A5","C6","C5","A5","A4","F#5","E5","E6","B5"])],["9 A Ake Bono",new de("9 A Ake Bono",["A5","D6","D5","A5","A4","F5","E5","E6","A#5"])],["9 A Hijaz",new de("9 A Hijaz",["G5","D6","D5","A5","A4","F#5","D#5","D#6","A#5"])],["9 A Pygmy",new de("9 A Pygmy",["G5","C6","C5","G5","G4","D#5","D5","D#6","A#5"])],["17 C Major",new de("17 C Major",["D6","B5","G5","E5","C5","A4","F4","D4","C4","E4","G4","B4","D5","F5","A5","C6","E6"])],["21 C Major",new de("21 C Major",["D6","B5","G5","E5","C5","A4","F4","D4","B3","G3","F3","A3","C4","E4","G4","B4","D5","F5","A5","C6","E6"])]])]]);function Th(e,t,n=120){if(!e||e.length===0)return[];let r=new Map,o=t.getLetters();for(let y=0;y{try{d.push(M.from({pitch:p+12*(u+1+h),start:m,end:m+l})),h=0,c||(m+=l)}catch{console.log(p)}f=!1};for(let y of e)y==="("?(c&&(c=!1),f&&b(),c=!0):a.has(y)?(f&&b(),f=!0,p=i.indexOf(y)):y==="#"?p++:y==="\xB0"?h++:(y===" "||y===` `||y===")")&&(y===")"&&(c=!1),y===` `&&(c=!1,m+=l),f&&b());return d}function Ch(e,t,n="letter",r=.1){if(!e||e.length===0)return[];let o=new Map,i=n==="letter"?t.getLetters():t.getNumbers();for(let l=0;l{var m;return o.has(f.pitch)?o.get(f.pitch)||`[${f.pitch}]`:n==="letter"?((m=W(f.pitch))==null?void 0:m.name)??f.pitch:f.pitch}).join(" ");l.length>1&&(c=`(${c})`),s=l[0].start-u>r?`${s} ${c}`:`${s} ${c}`,u=D(l,f=>f.end)}return s.slice(1)}function Nh(e,t,n="letter",r=.1,o=()=>"black"){if(!e||e.length===0)return[];let i=new Map,a=n==="letter"?t.getLetters():t.getNumbers();for(let c=0;c{var d;let p;return i.has(m.pitch)?p=i.get(m.pitch)||`[${m.pitch}]`:p=n==="letter"?((d=W(m.pitch))==null?void 0:d.name)??m.pitch:m.pitch,`${p}`}).join(` `);c.length>1&&(f=`${f}`),u=c[0].start-l>r?`${u}
${f}`:`${u}${f}`,l=D(c,m=>m.end)}return u}function Ih(e,t){if(!e||e.length===0)return"";e=e.replaceAll("'","\xB0"),e=e.replaceAll("\u2019","\xB0"),e=e.replaceAll("*","\xB0"),e=e.replaceAll("\xBA","\xB0"),e=e.replaceAll("^","\xB0");for(let[n,r]of t.entries())e=e.replaceAll(n,r);return e}function Dh(e,t){if(!e||e.length===0)return{transpose:0,retune:new Map};let n=new Set(e.map(h=>h.pitch));n.size>t.keyCount;let r=[...n];if(yt(r,t.pitches).size===0)return{transpose:0,retune:new Map};let[o,i]=J(r),a=(h,d)=>h.map(b=>b+d),s=0,u,l;for(let h=-o;h<=127-i;h++){let d=a(r,h),b=rt(d,t.pitches);(!l||b.size>l.size)&&(s=h,u=d)}u=new Set(u);let c=yt(u,t.pitches);console.log(c);let f=new Set,m=[];for(let h of c)u.has(h)?m.push(h):f.add(h);if(console.log(m),console.log(f),m.length===0)return{transpose:s,retune:new Map};if(f.size===0)return{transpose:s,retune:new Map};let p=new Map;for(let h of m){let d=null,b=Number.POSITIVE_INFINITY,y;for(y of f)Math.abs(h-y)kh});var kh=new Map([[72,{minPitch:24,maxPitch:95}],[88,{minPitch:21,maxPitch:108}],[128,{minPitch:0,maxPitch:127}]]);var Go={};E(Go,{alignNoteArrays:()=>Lo,alignNoteArrays2:()=>xu,alignNoteArrays3:()=>yu,alignmentBenchmark:()=>_d,testAlignment:()=>Ad});var Oo={};E(Oo,{getMatchingError:()=>bu,getMatchingSection:()=>gu,getMatchingSliceError:()=>wd,getMultiMatchingErrorPerNote:()=>Pd,matchGtAndMultipleRecordings:()=>vd,matchGtAndRecordingNotes:()=>Qn});var Jn={};E(Jn,{CIRCLE_OF_5THS:()=>xm,INTERVALS:()=>ym,aeppli:()=>od,alignNotesToBpm:()=>dd,arrayContainsArray:()=>Wf,arrayHasSameElements:()=>zf,arrayIndexOf:()=>Kf,arrayShallowEquals:()=>Ae,arraySlicesEqual:()=>io,averageColor:()=>Bh,averageRecordings:()=>bd,averageRecordings2:()=>gd,belmont:()=>id,binarySearch:()=>Ot,bishop:()=>ed,blobToBase64:()=>Eh,blobToFileExtension:()=>Rh,bpmToSecondsPerBeat:()=>ae,castel:()=>Wh,choose:()=>ro,chordIntegerJaccardIndex:()=>dm,chordToInteger:()=>hm,clipRecordingsPitchesToGtFretboardRange:()=>hd,clipRecordingsPitchesToGtRange:()=>pd,clipValue:()=>oo,colorInterpolator:()=>hu,confidenceInterval:()=>ld,count:()=>Uf,countOnesOfBinary:()=>In,deepCloneFlatObjectMap:()=>Hh,delay:()=>Vh,differenceMap:()=>xd,differenceMapErrorAreas:()=>yd,euclideanDistance:()=>em,field:()=>Kh,filterRecordingNoise:()=>md,findLocalMaxima:()=>Dn,findNearest:()=>Kn,findRepeatedIndices:()=>rm,findStreaks:()=>nm,formatDate:()=>Gh,formatMatrix:()=>tm,formatSongTitle:()=>qh,formatTime:()=>Lh,freqToApproxMidiNr:()=>mm,getArrayMax:()=>Jf,getBoxplotCharacteristics:()=>cd,getColorLightness:()=>Fh,getObjectFromLocalStorage:()=>jh,groupNotesByPitch:()=>zh,helmholtz:()=>td,jaccardIndex:()=>Vf,jameson:()=>Jh,kendallTau:()=>Xf,kernelDensityEstimator:()=>Ro,kernelEpanechnikov:()=>Fo,kernelGauss:()=>fd,klein:()=>rd,metronomeTrackFromMusicPiece:()=>vm,metronomeTrackFromTempoAndMeter:()=>Mm,midiToFrequency:()=>pm,newton:()=>Yh,normalizeNdArray:()=>Qf,normalizeNdArrayNegative:()=>Zf,noteColorFromPitch:()=>sd,noteColormap:()=>mu,noteColormapAccessible:()=>pu,noteColormapAccessible2:()=>Xh,noteColormapGradientArray:()=>du,noteDurationToNoteType:()=>gm,pearsonCorrelation:()=>ud,pingMidiDevice:()=>Md,randFloat:()=>Se,recordingsHeatmap:()=>Bo,removeDuplicates:()=>Yf,reverseString:()=>Uh,rimington:()=>Zh,roundToNDecimals:()=>q,scriabin:()=>nd,seemann:()=>Qh,setOpacity:()=>Oh,setSaturation:()=>Eo,storeObjectInLocalStorage:()=>$h,swapSoSmallerFirst:()=>Hf,zieverink:()=>ad});function Eh(e){return new Promise(t=>{let n=new FileReader;n.onloadend=()=>t(n.result),n.readAsDataURL(e)})}function Rh(e){return e.type.split("/")[1].split(";")[0]}function Fh(e){let{r:t,g:n,b:r}=X(e).rgb();return(t+t+t+r+n+n+n+n>>3)/2.55}function Bh(e){let t=0,n=0,r=0;for(let o of e){let{r:i,g:a,b:s}=X(o).rgb();t+=i,n+=a,r+=s}return t=Math.round(t/e.length),n=Math.round(n/e.length),r=Math.round(r/e.length),`rgb(${t}, ${n}, ${r})`}function Oh(e,t=1){let{r:n,g:r,b:o}=X(e).rgb();return`rgba(${n}, ${r}, ${o}, ${t})`}function Eo(e,t=1){let n=sn(e);return n.s=t,n.toString()}function Lh(e,t=!0){if(e==null)return t?"--:--.---":"--:--";let n=Math.floor(e),r=Math.floor(n/60).toString(),o=(n%60).toString();if(r=r.length<2?`0${r}`:r,o=o.length<2?`0${o}`:o,!t)return`${r}:${o}`;let i=Math.round((e-n)*1e3).toString();return i.length<2?i=`00${i}`:i.length<3&&(i=`0${i}`),`${r}:${o}.${i}`}function Gh(e,t=!1,n=!0){let r=e.toISOString().split(":").join("-");return n||(r=r.slice(0,r.indexOf("."))),t&&(r=r.replace("T"," ")),r}function qh(e,t=30){return e?(e.lastIndexOf(".")!==-1&&(e=e.slice(0,e.lastIndexOf("."))),e.length>t&&(e=`${e.slice(0,t-3)}...`),e):"[No Song]"}function $h(e,t){let n=JSON.stringify(t);localStorage.setItem(e,n)}function jh(e){let t=localStorage.getItem(e);if(t===null)return null;try{return JSON.parse(t)}catch{return null}}function Hh(e){let t=new Map;for(let[n,r]of e.entries())t.set(n,A({},r));return t}function zh(e){let t=e.flat();return t.length===0?new Map:F(t,n=>n.pitch)}function Uh(e){return[...e].reverse().join("")}function Kn(e,t){if(!e||e.length===0||!t)return null;let n=null,r=Number.POSITIVE_INFINITY,o=t.start;for(let i of e){let a=Math.abs(i.start-o);a{setTimeout(t,e*1e3)})}var mu=["#ff0000","#ff4e00","#db7b00","#ffcc00","#e4ed00","#81d700","#00ffb4","#00ffea","#00baff","#3c00ff","#a800ff","#ff00fd"].map(e=>Eo(e,.5)),pu=["#6699ff","#66ffff","#000000","#647878","#993366","#ff0000","#ffcc99","#ffff01","#ff9900","#009900","#66ff99","#0000cc"],Xh=["#9aebff","#add5ff","#d6d6ff","#ebd5ff","#ffc2eb","#ffcbcc","#ffd5c2","#ffebc2","#ebffc2","#c2d599","#99ebbe","#adebeb"],Yh=["#FA0B0C","#FA0B0C","#F88010","#F88010","#F5F43C","#149033","#149033","#FA0B0C","#FA0B0C","#7F087C","#7F087C","#908791"],Wh=["#1C0D82","#F5F5F5","#149033","#709226","#F5F43C","#F5D23B","#F88010","#FA0B0C","#A00C09","#D71386","#4B0E7D","#7F087C"],Kh=["#1C0D82","#1C0D82","#7F087C","#7F087C","#FA0B0C","#F88010","#F88010","#F5F43C","#F5F43C","#709226","#709226","#149033"],Jh=["#FA0B0C","#F44712","#F88010","#F5D23B","#F5F43C","#149033","#1B9081","#1C0D82","#4B0E7D","#7F087C","#A61586","#D71386"],Qh=["#6A1C1C","#FA0B0C","#F88010","#F5D23B","#F5F43C","#709226","#1B9081","#1C0D82","#7F087C","#D71386","#6A1C1C","#070707"],Zh=["#FA0B0C","#A00C09","#F44712","#F88010","#F5F43C","#709226","#149033","#27A481","#1B9081","#7F087C","#1C0D82","#D71386"],ed=["#FA0B0C","#A00C09","#F88010","#F6D111","#F5F43C","#BCE039","#149033","#27A481","#7F087C","#D71386","#D91951","#FA0B0C"],td=["#F5F43C","#149033","#1B9081","#1C5BA0","#7F087C","#D71386","#9D0E55","#FA0B0C","#D32C0A","#D32C0A","#F62E0D","#F17A0F"],nd=["#FA0B0C","#D71386","#F5F43C","#5A5685","#1C5BA0","#A00C09","#1C0D82","#F88010","#7F087C","#149033","#5A5685","#1C5BA0"],rd=["#C40A09","#FA0B0C","#F44712","#F88010","#F5F43C","#BCE039","#149033","#1B9081","#1C0D82","#781887","#D71386","#9D0E55"],od=["#FA0B0C","#FA0B0C","#F88010","#F88010","#F5F43C","#F5F43C","#149033","#1B9081","#1B9081","#1C5BA0","#4B0E7D","#7F087C"],id=["#FA0B0C","#F44712","#F88010","#F6D111","#F5F43C","#BCE039","#149033","#1B9081","#1C0D82","#A61586","#D71386","#AD0E48"],ad=["#BCE039","#149033","#1B9081","#1C0D82","#7F087C","#D71386","#6F0D45","#A00C09","#FA0B0C","#F88010","#EDF087","#F5F43C"],hu=we("black","steelblue"),du=Array.from({length:12}).map((e,t)=>hu(t/11));function sd(e,t="default"){switch(t){case"accessible":return pu[e%12];case"gradient":return du[e%12];default:return mu[e%12]}}function ud(e,t){if(!e||!t||!e.length||!t.length||e.length!==t.length)throw new Error("Invalid data, must be two arrays with same length");if(e.length<2)throw new Error("Invalid data, length must be >= 2");let n=e.length,r=0;for(let s=0;sMath.sqrt(s.reduce((l,c)=>l+c*c,0)-n*u*u);return(e.map((s,u)=>({x:s,y:t[u]})).reduce((s,u)=>s+u.x*u.y,0)-n*o*i)/(a(e,o)*a(t,i))}function ld(e){let t=e.length,n=Ge(e),r=Yt(e),i=1.96*(r/Math.sqrt(t)),a=n-i,s=n+i;return{mean:n,low:a,high:s}}function cd(e){e.sort((l,c)=>l-c);let t=e[0],n=e[e.length-1],r=Ce(e,.25),o=Ce(e,.5),i=Ce(e,.75),a=i-r,s=Math.max(t,r-a*1.5),u=Math.min(n,i+a*1.5);return{q1:r,q2:o,q3:i,r0:s,r1:u}}function Ro(e,t){return r=>t.map(o=>[o,Ge(r,i=>e(o-i))])}function Fo(e){return n=>Math.abs(n/=e)<=1?.75*(1-n*n)/e:0}function fd(e){return n=>Math.abs(n/e)<=1?1/Math.sqrt(2*Math.PI)*Math.E**(-.5*n*n):0}function md(e,t=0,n=0){return e.clone().filter(o=>!(o.velocitya.pitch);n.set(r,i)}return e.map(r=>{let o=r.selectedTrack,[i,a]=n.get(o);return r.clone().filter(s=>s.pitch>=i&&s.pitch<=a)})}function hd(e,t,n="exact"){if(n==="exact"){let r=new Map;for(let[o,i]of t.entries()){let a=new Set(i.map(s=>`${s.string} ${s.fret}`));r.set(o,a)}return e.map(o=>{let i=o.selectedTrack,a=r.get(i);return o.clone().filter(s=>a.has(`${s.string} ${s.fret}`))})}else{let r=new Map;for(let[o,i]of t.entries()){let a=J(i,u=>u.string),s=J(i,u=>u.fret);r.set(o,{stringExtent:a,fretExtent:s})}return e.map(o=>{let i=o.selectedTrack,{stringExtent:a,fretExtent:s}=r.get(i),[u,l]=a,[c,f]=s;return o.clone().filter(m=>m.string>=u&&m.string<=l&&m.fret>=c&&m.fret<=f)})}}function dd(e,t,n=16){let o=ae(t)/n;return e.map(i=>{let a=i.clone();return a.start=Math.round(a.start/o)*o,a.end=Math.round(a.end/o)*o,a})}function Bo(e,t,n=10,r="pitch"){let o;r==="pitch"?o=F(e,a=>a.pitch):r==="channel"?o=F(e,a=>a.channel):console.warn(`Invalid attribute parameter '${r}'`);let i=new Map;for(let[a,s]of o.entries()){let u=D(s,f=>f.end),l=Math.ceil(u*1e3/n)+1,c=Array.from({length:l}).fill(0);for(let f of s){let m=Math.round(f.start*1e3/n),p=Math.round(f.end*1e3/n);for(let h=m;h<=p;h++)c[h]+=1}for(let f=0;fn;let a=null;for(let s=0;so.start-i.start),r}function gd(e,t=.01,n,r){let o=F(e,a=>a.pitch),i=[];for(let[a,s]of o.entries()){let u=s.map(w=>w.start),l=s.map(w=>w.end),c=D(l),f=Math.ceil(n*c),m=me().domain([0,c]).range([0,c]),p=Ro(Fo(t),m.ticks(f)),h=p(u),d=p(l),b=Dn(h.map(w=>w[1])),y=Dn(d.map(w=>w[1])),S=b.filter(w=>h[w][1]>r).map(w=>h[w][0]),P=y.filter(w=>d[w][1]>r).map(w=>d[w][0]);for(;S.length>0;){let w=S.shift();for(;P.length>0&&P[0]0&&S[0]<_;)S.shift();i.push(new M(a,w,127,0,_))}}return i.sort((a,s)=>a.start-s.start),i}function xd(e,t,n){let r=Bo(t,1,n),o=Bo(e,1,n),i=[...new Set([...r.keys(),...o.keys()])],a=new Map;for(let s of i){let u;if(!r.has(s))u=o.get(s).map(l=>l!==0?1:0);else if(!o.has(s))u=r.get(s).map(l=>l!==0?2:0);else{let l=r.get(s),c=o.get(s),f=Math.max(l.length,c.length);u=Array.from({length:f}).fill(0);for(let m=0;ma[1].length),i=e.size*o;return{missing:t/i,additional:n/i,correct:r/i}}function Md(e,t=1){if(!navigator.requestMIDIAccess)console.error("MIDI: WebMIDI is not supported in this browser.");else{let n=0,r,o=0,i=()=>{let a=Date.now()-r;o+=a;let s=o/n;console.log(`Received MIDI from ${e} after ${a} ms (avg: ${s})`)};navigator.requestMIDIAccess().then(a=>{for(let l of a.inputs.values())e===l.name&&(l.onmidimessage=i);let s=null;for(let l of a.outputs.values())e===l.name&&(s=l);s||console.error(`Cannot ping output device ${e} because it is not there`);let u=()=>{nconsole.error("Cannot get MIDI access"))}}function Qn(e,t){let n=F(t,i=>i.pitch),r=F(e,i=>i.pitch),o=new Map;for(let[i,a]of n.entries()){let s=new Map,u=[],l=[];for(let f of a)s.set(f.start,null);if(!r.has(i)){o.set(i,{gtRecMap:new Map,additionalNotes:[],missingNotes:a,gtNotes:a});continue}let c=r.get(i);for(let f of c){let m=Kn(a,f),p=s.get(m.start);p===null?s.set(m.start,f):Math.abs(m.start-f.start)a.notes),r=F(t,a=>a.pitch),o=F(n,a=>a.pitch),i=new Map;for(let[a,s]of r.entries()){let u=new Map;for(let c of s)u.set(c.start,[]);if(!o.has(a)){i.set(a,new Map);continue}let l=o.get(a);for(let c of l){let f=Kn(s,c),m=u.get(f.start);m.push(c),u.set(f.start,m)}i.set(a,u)}return i}function Pd(e,t=3){let n=new Map;for(let[r,o]of e.entries()){let i=new Map,a=0;for(let[s,u]of o.entries()){let l=0;if(u.length>0){for(let c of u){let f=Math.abs(c.start-s);f<=t&&(l+=f)}l/=u.length,l>a&&(a=l)}i.set(s,l)}n.set(r,{gtErrorMap:i,maxError:a})}return n}function bu(e,t,n,r,o=0){let i={total:0,totalAdd:0,totalMiss:0,totalCorrect:0,totalTime:0,totalNumberOfGtNotes:0,perPitch:new Map};for(let[a,s]of e.entries()){let{gtRecMap:u,additionalNotes:l,missingNotes:c,gtNotes:f}=s,m=l.length*t,p=c.length*n,h=0,d=0;for(let[y,S]of u.entries())if(S!==null){h++;let P=Math.abs(S.start-y);P>o&&(d+=P)}let b=m+p+d*r;i.perPitch.set(a,{total:b,addError:m,missError:p,correct:h,timeError:d,numberOfGtNotes:f.length}),i.totalAdd+=m,i.totalMiss+=p,i.totalCorrect+=h,i.totalTime+=d,i.total+=b,i.totalNumberOfGtNotes+=f.length}return i}function gu(e,t,n){let r=new Map;for(let[o,i]of e.entries()){let{gtRecMap:a,additionalNotes:s,missingNotes:u,gtNotes:l}=i,c=new Map;for(let[f,m]of a.entries())m!==null&&f>=t&&ff.start>=t&&f.startf.start>=t&&f.start{console.log(i),console.log(o.getNotes().map(s=>s.start));let a=Lo(r,o);console.log(a.getNotes().map(s=>s.start))},t=new K([new M(69,0,127,0,1),new M(70,1,127,0,2),new M(71,2,127,0,3)]);console.log(t.getNotes().map(r=>r.start));let n;n=t.clone().shiftTime(2),e(t,n,"shifted by 2"),n=t.clone().shiftTime(-2),e(t,n,"shifted by -2"),n=t.clone().shiftTime(3).addNotes([new M(72,2,127,0,3)]),e(t,n,"shifted by 3, added note"),n=t.clone().repeat(2),e(t,n,"repeated"),n=t.clone().repeat(2).shiftTime(3),e(t,n,"repeated, shifted by 3")}function _d(){let e=.44871573888282423,t=ie.source(ft(e))(0,127),n=500,r=Tn.source(ft(e))(0,n),o=Tn.source(ft(e))(1/64,2),i=Array.from({length:200}).fill(0).map(()=>{let h=r();return new M(t(),h,127,0,h+o())}),a=new K(i).sortByTime();console.log("true notes",a.getNotes());let s=3,u=a.clone().shiftTime(s);console.log("shifted",u);let l=.1,c=.1,f=.1,m=co(u.getNotes(),l,c,f);m=new K(m),console.log("variation",m);let p=[Lo,xu,yu];console.log(`True time shift: ${s} seconds`),console.log("Only shifted");for(let h of p){let{timeDifference:d}=h(a,u),b=Math.abs(d- -s);console.log(`${h.name} shift: ${d.toFixed(3)} Error ${b.toFixed(3)}`)}console.log("Shifted & variation");for(let h of p){let{timeDifference:d}=h(a,m),b=Math.abs(d- -s);console.log(`${h.name} shift: ${d.toFixed(3)} Error ${b.toFixed(3)}`)}}var jo={};E(jo,{activationMap:()=>qo,agreement:()=>Mu,alignGtAndRecToMinimizeDiffError:()=>$o,alignRecordingSectionsToBestFit:()=>Cd,alignRecordingToBestFit:()=>Td});function Td(e,t,n=100){let r=t.getNotes(),o=$o(e,r,n)[0];return t.clone().shiftToStartAt(o.offsetMilliseconds/1e3)}function Cd(e,t,n,r=3,o="start-start"){let a=kn.segmentAtGaps(r,o).map(u=>$o(e,u,n)[0]),s=t.clone();return s.setNotes(a.flat()),s}function $o(e,t,n){e=new K(e),t=new K(t).shiftToStartAt(0);let r=e.getDuration(),o=t.getDuration(),i=Math.ceil(r*1e3/n)+1,a=Math.ceil(o*1e3/n)+1;a>i&&console.warn("Cannot compare GT and rec if rec is longer");let s=qo(e.getNotes(),n),u=qo(t.getNotes(),n),l=[];for(let f=0;fm.agreement-f.agreement)}function qo(e,t=100){let n=new Map;for(let[r,o]of F(e,i=>i.pitch).entries()){let i=D(o,u=>u.end),a=Math.ceil(i*1e3/t)+1,s=Array.from({length:a}).fill(0);for(let u of o){let l=Math.round(u.start*1e3/t),c=Math.round(u.end*1e3/t);for(let f=l;f<=c;f++)s[f]=1}n.set(r,s)}return n}function Mu(e,t,n){let r=[...new Set([...e.keys(),...t.keys()])],o=0;for(let i of r)if(e.has(i)){if(t.has(i)){let a=e.get(i),s=t.get(i);for(let u=0;uId,errorFromPriorityMatching:()=>Nd,getMatrixMinPosition:()=>Pu,priorityMatching:()=>vu});function vu(e,t,n){let r=Array.from({length:e.length}).map(()=>Array.from({length:t.length}));for(let[a,s]of e.entries())for(let u=a;u=i-1)break;for(let l=0;l{let i=xt(o);return[i,o[i]]}),n=xt(t,o=>o[1]),r=t[n][0];return[n,r]}var zo={};E(zo,{discretizeTime:()=>Au,getSimilarParts:()=>Dd,getTrackSimilarity:()=>Su});function Dd(e,t,n,r,o=1/16,i="euclidean"){if(console.log(`Searching for similar parts based on selection, using ${i}`),e===void 0||e.length===0){console.warn("No or empty track given");return}let a=ue(e,d=>d.start),s=D(e,d=>d.end),u=Math.ceil((s-a)/o),l=Au(e,o),c=Math.floor((t[0]-a)/o),f=Math.ceil((t[1]-a)/o),m=wu(l,c,f),p=f-c,h=[];for(let d=0;d=c&&d<=f)&&!(b>=c&&b<=f)){let y=wu(l,d,b),S=Su(m,y,i);S<=r&&h.push({startBin:d,endBin:b,startTime:a+d*o,endTime:a+b*o,dist:S})}}return{selection:{startBin:c,endBin:f,startTime:a+c*o,endTime:a+f*o},similarParts:h}}function Su(e,t,n){let r=[];for(let a of e.keys())t.has(a)&&r.push(a);let o=0;for(let a of r){let s=e.get(a),u=t.get(a),l;n==="dtw"||(n==="euclidean"?l=Ed(s,u):n==="nearest"&&(l=Rd(s,u))),o+=1*l}let i=0;for(let a of[e,t])for(let s of a.keys())r.includes(s)||(i+=kd(a.get(s)));return o+i}function Au(e,t){let n=ue(e,a=>a.start),r=D(e,a=>a.end),o=Math.ceil((r-n)/t),i=new Map;for(let a of e){let s=Math.round((a.start-n)/t),u=Math.round((a.end-n)/t),l=a.pitch,c=i.has(l)?i.get(l):Array.from({length:o}).fill(0);for(let f=s;f<=u;f++)c[f]=1;i.set(l,c)}return i}function kd(e){let t=0;for(let n of e)n===1&&t++;return t}function wu(e,t,n){let r=new Map;for(let[o,i]of e.entries())r.set(o,i.slice(t,n));return r}function Ed(e,t){let n=Math.max(e.length,t.length),r=0;for(let o=0;oBd,findSimilarStringSections:()=>_u});var Vo={};E(Vo,{damerauLevenshtein:()=>Fd,levenshtein:()=>Uo});function Uo(e,t,n=!1){if(e.length===0&&t.length===0)return 0;if(e.length===0)return n?1:t.length;if(t.length===0)return n?1:e.length;let r,o,i,a;if(e.length>t.length){let l=e;e=t,t=l}let s=Array.from({length:e.length+1});for(r=0;r<=e.length;r++)s[r]=r;for(r=1;r<=t.length;r++){for(i=r,o=1;o<=e.length;o++)a=t[r-1]===e[o-1]?s[o-1]:Math.min(s[o-1]+1,Math.min(i+1,s[o]+1)),s[o-1]=i,i=a;s[e.length]=i}let u=s[e.length];return n?u/Math.max(e.length,t.length):u}function Fd(e,t,n=!1){if(e.length===0&&t.length===0)return 0;if(e.length===0)return n?1:t.length;if(t.length===0)return n?1:e.length;let r=Array.from({length:e.length+1}).map(()=>Array.from({length:t.length}));for(let a=0;a<=e.length;a++)r[a][0]=a;for(let a=0;a<=t.length;a++)r[0][a]=a;let o;for(let a=1;a<=e.length;a++)for(let s=1;s<=t.length;s++)o=e[a-1]===t[s-1]?0:1,r[a][s]=Math.min(r[a-1][s]+1,r[a][s-1]+1,r[a-1][s-1]+o),a>1&&s>1&&e[a-1]===t[s-2]&&e[a-2]===t[s-1]&&(r[a][s]=Math.min(r[a][s],r[a-2][s-2]+1));let i=r[e.length][t.length];return n?i/Math.max(e.length,t.length):i}function Bd(e,t,n,r=.5){let o=e.filter(l=>l.start>=t&&l.end<=n),i=Gt.fromNotes(e).getPitches(),a=Gt.fromNotes(o).getPitches(),s=a.length;return s<3?[]:_u(i,a,r).map(l=>{let{index:c}=l,f=e[c],m=e[c+s];return C(A({},l),{startTime:f.start,endTime:m.end})})}function _u(e,t,n=.5){let r=t.length,o=[];for(let s=0;ss.distance-u.distance);let a=Array.from({length:e.length}).fill(!1);for(let s of o){let{index:u}=s,l=!1;for(let c=u;cJo,ImmediateRepetitionCompression:()=>ei,Levenshtein:()=>Vo,LongestCommonSubsequence:()=>Yo,NGrams:()=>Zo,NeedlemanWunsch:()=>Du,SuffixTree:()=>Qo});var Yo={};E(Yo,{lcs:()=>Od,lcsLength:()=>Tu,normalizedLcsLength:()=>Ld});function Od(e,t){let n=e.length,r=t.length;if(e.length===0)return e;if(t.length===0)return t;let o,i,a=[],s,u,l,c=[],f=[];for(i=0;ia[i]&&(a[i]=s));for(o--,i--;o>-1&&i>-1;)switch(f[o][i]){default:i--,c.unshift(e[o]);case(o&&f[o-1][i]):o--;continue;case(i&&f[o][i-1]):i--}return Array.isArray(e)||Array.isArray(t)?c:c.join("")}function Tu(e,t){let n=e.length,r=t.length;if(e.length===0||t.length===0)return 0;let o,i,a=[],s,u,l,c=[];for(i=0;ia[i]&&(a[i]=s));return o--,i--,a[i]}function Ld(e,t){let n=Math.max(e.length,t.length);return n===0?0:Tu(e,t)/n}var Jo={};E(Jo,{differenceSimilarity:()=>qd,gotoh:()=>Wo,matchMissmatchSimilarity:()=>Ko,normalizedGotoh:()=>Gd});function Wo(e,t,n=Ko,r=-1,o=-.1){if(e.length===0&&t.length===0)return 0;let i=f=>r+(f-1)*o,a=e.length,s=t.length,u=Array.from({length:a+1}).map(()=>Array.from({length:s+1})),l=Array.from({length:a+1}).map(()=>Array.from({length:s+1})),c=Array.from({length:a+1}).map(()=>Array.from({length:s+1}));u[0][0]=0,l[0][0]=0,c[0][0]=0;for(let f=1;f<=a;f++)u[f][0]=c[f][0]=Number.NEGATIVE_INFINITY,l[f][0]=i(f);for(let f=1;f<=s;f++)u[0][f]=l[0][f]=Number.NEGATIVE_INFINITY,c[0][f]=i(f);for(let f=1;f<=a;f++)for(let m=1;m<=s;m++){let p=n(e[f-1],t[m-1]);u[f][m]=Math.max(u[f-1][m-1],l[f-1][m-1],c[f-1][m-1])+p,l[f][m]=Math.max(u[f-1][m]+r,l[f-1][m]+o,c[f-1][m]+r),c[f][m]=Math.max(u[f][m-1]+r,l[f][m-1]+r,c[f][m-1]+o)}return Math.max(u[a][s],l[a][s],c[a][s])}function Gd(e,t,n=Ko,r=-1,o=-.1){let i=Wo(e,t,n,r,o),a=e.length>=t.length?e:t,s=Wo(a,a,n,r,o);return s===0?i:i/s}function Ko(e,t){return e===t?1:-1}function qd(e,t){return-Math.abs(e-t)}var Qo={};E(Qo,{default:()=>$d});var Cu=class{constructor(t){if(typeof t=="string"&&(t=t.split("")),this.node=new Zn,t&&t.length>0)for(let n=0;nt.length&&(t=n);return this.value.concat(t)}toString(t=1){let n=" |".repeat(t),r="";if(r+=this.value.length>0?`-N '${this.value}'`:"root",this.nodes.length>0)for(let o=0;o0)for(let o=0;ojd,getNGramsForArray:()=>Hd});function jd(e,t){if(t<=0)return new Map;t=Math.min(t,e.length);let n=new Map;for(let r=0;rer,compressionRate:()=>zd,decompress:()=>tr,getImmediateRepetitions:()=>Nu,summary:()=>nr,toString:()=>rr});function er(e){if(!e||e.length===0)return null;let t=Nu(e);if(t===null)return e;let{seq:n,rep:r,length:o,pos:i}=t[0],a=e.slice(0,i),s=e.slice(i+o*r),u=er(n),l=er(a),c=er(s),f=Math.max((l==null?void 0:l.depth)??0,((u==null?void 0:u.depth)??0)+1,(c==null?void 0:c.depth)??0),m=((l==null?void 0:l.length)??0)+((u==null?void 0:u.length)??0)+((c==null?void 0:c.length)??0);return{pre:l,seq:u,rep:r,post:c,depth:f,length:m,content:e}}function Nu(e=[]){let t=[];for(let n=Math.floor(e.length/2);n>0;--n)for(let r=0;r0){let s=o+1,u=e.slice(r,r+n);t.push({length:n,pos:r,rep:s,seq:u,totalLength:n*s})}}}return t.length>0?t.sort((n,r)=>n.totalLength===r.totalLength?r.rep-n.rep:r.totalLength-n.totalLength):null}function tr(e){if(!e)return[];if(e.join)return e;let t=tr(e.seq),n=Array.from({length:e.rep}).map(()=>t);return[...tr(e.pre),...n.flat(),...tr(e.post)]}function nr(e){return e?e.join?e:[...nr(e.pre),...nr(e.seq),...nr(e.post)]:[]}function rr(e,t=" "){if(!e)return"";if(e.join)return e.join(t);let n=rr(e.seq),r=`(${e.rep}x ${n})`;return[rr(e.pre),r,rr(e.post)].join(t).trim()}function zd(e){var t;if(!(e!=null&&e.length)||!((t=e==null?void 0:e.content)!=null&&t.length))throw new Error("Invalid hierarchy");return e.length/e.content.length}var Iu=class{constructor(t,n,r=1,o=-1,i=-1){this.seq1=t,this.seq2=n,this.matchScore=r,this.mismatchPenalty=o,this.gapPenalty=i,this.I=[],this.S=[],this.T=[],this.finalAlignments=[],this.calcScoresAndTracebacks()}calcScoresAndTracebacks(){this.S.push([0]),this.I.push([[null,null,null]]),this.T.push([[!1,!1,!1]]);for(let n=1;nf===l);this.S[n].push(l),this.I[n].push(u),this.T[n].push(c)}}let t=this.S[this.S.length-1];this.score=t[t.length-1]}alignmentChildren(t){let[n,r]=t,o=[],i=this.T[n][r];return i[0]&&o.push({pos:[n,r-1],tracebackType:0}),i[1]&&o.push({pos:[n-1,r-1],tracebackType:1}),i[2]&&o.push({pos:[n-1,r],tracebackType:2}),o}alignmentTraceback(){let t=[],n={next:null,pos:[this.seq1.length,this.seq2.length],alignment:{seq1:"",seq2:""}},r,o,i,a,s,u,l;for(r=n;r;)for(u=r.pos,s=r.alignment,i=this.alignmentChildren(r.pos),i.length===0&&t.push(s),r=r.next,l=0,a=i.length;l