feat: implement global chord track

This commit is contained in:
Xiaohan-Tian
2026-05-24 23:06:08 -07:00
parent 77fb0e4c1f
commit 1879df8033
30 changed files with 2757 additions and 20 deletions
+323 -2
View File
@@ -1,12 +1,12 @@
{
"name": "K.G.Studio",
"version": "0.17.3-build.20260515",
"version": "0.17.4-build.20260520",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "K.G.Studio",
"version": "0.17.3-build.20260515",
"version": "0.17.4-build.20260520",
"dependencies": {
"@breezystack/lamejs": "^1.2.7",
"class-transformer": "^0.5.1",
@@ -25,6 +25,7 @@
"rehype-katex": "^7.0.1",
"remark-gfm": "^4.0.1",
"remark-math": "^6.0.0",
"tonal": "^6.4.3",
"tone": "^15.1.22",
"vexflow": "^5.0.0",
"zustand": "^5.0.6"
@@ -2562,6 +2563,295 @@
"@testing-library/dom": ">=7.21.4"
}
},
"node_modules/@tonaljs/abc-notation": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.9.1.tgz",
"integrity": "sha512-2fDUdPsFDdgZgyIiZCTYGKy30QiwIQxSXCSN2thGrSMXbQKCp8iTC8haStYcrA+25MPWhWlmvC/pz3tGcTNAqQ==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/array": {
"version": "4.8.4",
"resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.8.4.tgz",
"integrity": "sha512-97HVdpZy82PqNBDMM9PRSbO2DUrnxNg3++N4xqLpfby70fKHAHhTWrMXWZK+Dzs76HDPQLd+qhd4cq28eBZzjw==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/chord": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-6.1.2.tgz",
"integrity": "sha512-39crsPVyBJxdGJ1DGl+4diM+6+mZ/ws6crkQMlqX4zTYHMUVfJOQrko4mPF1CD89AFhHJe1zCT9Js+nNp3Gffg==",
"license": "MIT",
"dependencies": {
"@tonaljs/chord-detect": "4.9.1",
"@tonaljs/chord-type": "5.1.1",
"@tonaljs/collection": "4.9.0",
"@tonaljs/interval": "^5.1.0",
"@tonaljs/pcset": "4.10.1",
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-note": "6.1.0",
"@tonaljs/scale-type": "4.9.2"
}
},
"node_modules/@tonaljs/chord-detect": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.9.1.tgz",
"integrity": "sha512-rV/9+R7aZ9cQorQ3jdNMMMh63onosglYZM71Q0n7KKcWMAGrxF66MzxBG82xy+w1QDMJQslB3iHfDHUiS6wRjA==",
"license": "MIT",
"dependencies": {
"@tonaljs/chord-type": "5.1.1",
"@tonaljs/pcset": "4.10.1",
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/chord-type": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-5.1.1.tgz",
"integrity": "sha512-ti4WzRYvvjH7to0G3zlJFq7WsjHqmcqbk8Jv98aZSR5YumLdY/ua2yOPPyoPq82n6vfgjZsacnAZ3v8/SodOcw==",
"license": "MIT",
"dependencies": {
"@tonaljs/pcset": "4.10.1"
}
},
"node_modules/@tonaljs/collection": {
"version": "4.9.0",
"resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.9.0.tgz",
"integrity": "sha512-Mk0h7O54nT6PgNVcUYauzxa5KOB23+0AOKudWzRH7JhJIN9vhVIC7PtwZXE+/G051UTbHSFIcN/afkgF4nB/8A==",
"license": "MIT"
},
"node_modules/@tonaljs/core": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-5.0.2.tgz",
"integrity": "sha512-v/fIRsB+lz93/yJnDEWvjDX6nDJ/Pz3cb0znm/UD8qKpN9BhN+v93iIaZG5LX0J2JNS35TtgIhwKFO10j6zieQ==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch": "5.0.2",
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-interval": "6.1.0",
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/duration-value": {
"version": "4.9.0",
"resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.9.0.tgz",
"integrity": "sha512-Muz54HyIe0nMYKWx6wyTa4y17ma29DtpJF4/oqJphy6A124rAVDe/SKit8JGOvDYAQj71FUXqs17sXBxO/ExVw==",
"license": "MIT"
},
"node_modules/@tonaljs/interval": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-5.1.0.tgz",
"integrity": "sha512-GR9dUjn0j7yhjwjRh8HQxZYXOiVl05WfY3AFyMB9rfg807K4dSJmWfPTULPQXyHJ6NiZOPXcwRs8MxMLDxgdbg==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch": "^5.0.2",
"@tonaljs/pitch-distance": "^5.0.4",
"@tonaljs/pitch-interval": "^6.0.0"
}
},
"node_modules/@tonaljs/key": {
"version": "4.11.2",
"resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.11.2.tgz",
"integrity": "sha512-fc1y5+NwS4S3amirzYLLB324PxJDO00oIBbLJclAddc46UBeYnu4FNz+1nZboHCXRQ/06/ftuaWD/l7HrAoulw==",
"license": "MIT",
"dependencies": {
"@tonaljs/note": "4.12.1",
"@tonaljs/pitch-note": "6.1.0",
"@tonaljs/roman-numeral": "4.9.1"
}
},
"node_modules/@tonaljs/midi": {
"version": "4.10.2",
"resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.10.2.tgz",
"integrity": "sha512-MPamXhEwPL7L1udLfYMm3Ft8mLYtHr62Zi2w5zYHM2P7YwIvNoiX0+dvAN5is1Wvq4iVRa8AjFHerjOW/SZhGg==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/mode": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.9.2.tgz",
"integrity": "sha512-Il48fWX9SnGMzwNFVbizkWkr/SJ+aCIIHhjWfSf1agrQAoq81536qBXEyEyvia6aqEXC4OaXAQ5rSoBcmQRj1Q==",
"license": "MIT",
"dependencies": {
"@tonaljs/collection": "4.9.0",
"@tonaljs/interval": "5.1.0",
"@tonaljs/pcset": "4.10.1",
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-note": "6.1.0",
"@tonaljs/scale-type": "4.9.2"
}
},
"node_modules/@tonaljs/note": {
"version": "4.12.1",
"resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.12.1.tgz",
"integrity": "sha512-yh6cnhu21bUb0VuIQWxObSbWBVp2cHIkJj4zZ4qsNOW4jSqn74+wHpSbOTDF8q+2hl6upz7TtBRavtqwPtLUCQ==",
"license": "MIT",
"dependencies": {
"@tonaljs/midi": "4.10.2",
"@tonaljs/pitch": "5.0.2",
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-interval": "6.1.0",
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/pcset": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.10.1.tgz",
"integrity": "sha512-CZG1rpKc38yMfpEJsbDTvsTmQqsek9xxcuMgK64Tr6sP1lEiDuZJbQeKVWWRnreBF2FQ1cEGLmfOpvSO+40csA==",
"license": "MIT",
"dependencies": {
"@tonaljs/collection": "4.9.0",
"@tonaljs/pitch": "5.0.2",
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-interval": "6.1.0",
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/pitch": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@tonaljs/pitch/-/pitch-5.0.2.tgz",
"integrity": "sha512-mxaXJPPe+LIJdjzpZEl8I8Wx3dEvlzkBbsr2Ltwc2dTAdnErAZ5R0TxVq2egF27lMvQN2QPQPWI9iDPPdVUmrg==",
"license": "MIT"
},
"node_modules/@tonaljs/pitch-distance": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/@tonaljs/pitch-distance/-/pitch-distance-5.0.5.tgz",
"integrity": "sha512-dTfjsU0zyrj5YmiFio5prPaD5w7sBmHp4nnmlEg70nHY+SerAH0KiO9HM9usttVgRFUaXl0Gc7OI8YMGfSFmug==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch": "5.0.2",
"@tonaljs/pitch-interval": "6.1.0",
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/pitch-interval": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@tonaljs/pitch-interval/-/pitch-interval-6.1.0.tgz",
"integrity": "sha512-9ZMxA7V4UgySnOKPIG6HECzhDb8mbiTCIdNNIzCIfz5XpjUmohku2YZpVVWMacLHgyeQicJzNoRiPel5oSAn4A==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch": "5.0.2"
}
},
"node_modules/@tonaljs/pitch-note": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@tonaljs/pitch-note/-/pitch-note-6.1.0.tgz",
"integrity": "sha512-A4OSLo8DjM38u73862LnDmL4YInDDRBmg0fojXcvu4cyU3oOlqndyeHOra1OVoH/WW46uNIxNs1wJDZNPWL5KQ==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch": "5.0.2"
}
},
"node_modules/@tonaljs/progression": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.9.2.tgz",
"integrity": "sha512-1Pmau5tKoWmY2H/fp9WVJ5Qm4c+xlu7IEZb3R3uLbc26kJq97DbuSnfArIAQoZTum2V6lOEN/Dt34E9OrGKnoA==",
"license": "MIT",
"dependencies": {
"@tonaljs/chord": "6.1.2",
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-interval": "6.1.0",
"@tonaljs/pitch-note": "6.1.0",
"@tonaljs/roman-numeral": "4.9.1"
}
},
"node_modules/@tonaljs/range": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.9.2.tgz",
"integrity": "sha512-XhFbCJCrEEIVz3MNmdVp9QUyiJA6eqnNnQeNqto8AuT5BYuffHDoMkBmvvjPuV5Lh8zfF9D0aqglvqPbZ+neKQ==",
"license": "MIT",
"dependencies": {
"@tonaljs/collection": "4.9.0",
"@tonaljs/midi": "4.10.2"
}
},
"node_modules/@tonaljs/rhythm-pattern": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@tonaljs/rhythm-pattern/-/rhythm-pattern-1.0.0.tgz",
"integrity": "sha512-3hp4Yw49e6BTWApRNb7arJ6HiICsHRFZYijuPE+vR93lIo9+lxcOMh0OPc4DyupTN7cvFTSB70Z7B/IeEJxhCQ==",
"license": "MIT"
},
"node_modules/@tonaljs/roman-numeral": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.9.1.tgz",
"integrity": "sha512-dJGKBNHdPrNTE97ZDk4t6wpNmgYcpHyLkAvWkRP9I/HsDkeTFFQqNXosYIvspPWrFySlRpeqqFwcqV74MYoOag==",
"license": "MIT",
"dependencies": {
"@tonaljs/pitch": "5.0.2",
"@tonaljs/pitch-interval": "6.1.0",
"@tonaljs/pitch-note": "6.1.0"
}
},
"node_modules/@tonaljs/scale": {
"version": "4.13.4",
"resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.13.4.tgz",
"integrity": "sha512-hyilnmsCmoGQiRhYWKM1QPrqaNH3KGEfrSfxeXcicPnEh12yvrVRm4djKmTVw7Rc/5P4GniPAA51+CS0C5dbLw==",
"license": "MIT",
"dependencies": {
"@tonaljs/chord-type": "5.1.1",
"@tonaljs/collection": "4.9.0",
"@tonaljs/note": "4.12.1",
"@tonaljs/pcset": "4.10.1",
"@tonaljs/pitch-distance": "5.0.5",
"@tonaljs/pitch-note": "6.1.0",
"@tonaljs/scale-type": "4.9.2"
}
},
"node_modules/@tonaljs/scale-type": {
"version": "4.9.2",
"resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.9.2.tgz",
"integrity": "sha512-XDRPySg0X6owJ6AVzVRpS4ZpgleAUQakuq5VtfQ0JitnJKGRYo5Y0w7Fl/wEz/X9aEMk2lxcdF8VGGMIsQFo0g==",
"license": "MIT",
"dependencies": {
"@tonaljs/pcset": "4.10.1"
}
},
"node_modules/@tonaljs/time-signature": {
"version": "4.9.0",
"resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.9.0.tgz",
"integrity": "sha512-zRo8CBqg/2guzTlF2vxyVIuB5gmwWQaxlknJPUSDII8CTdQ/x3a1LlNoMKkvTUnqwCihe3WrNPZ5XUfOOTthYA==",
"license": "MIT"
},
"node_modules/@tonaljs/voice-leading": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/@tonaljs/voice-leading/-/voice-leading-5.1.2.tgz",
"integrity": "sha512-lV5hsDZC4ekhh465d2aVFFqyG9AOZvwKdxU1+dNB/P6ldefU1yHC10mKdY7FrdhVgKeGZG1MbJh8rETaKVg7vA==",
"license": "MIT",
"dependencies": {
"@tonaljs/note": "4.12.1"
}
},
"node_modules/@tonaljs/voicing": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/@tonaljs/voicing/-/voicing-5.1.3.tgz",
"integrity": "sha512-OLNcaIA086/4gwoXVa736yW0yP9TADi95/5LAS8KxMtzYBWPYzxyC1IxcE9bGqXsdBnI99au57J8+G6wroluyg==",
"license": "MIT",
"dependencies": {
"@tonaljs/chord": "6.1.2",
"@tonaljs/interval": "5.1.0",
"@tonaljs/note": "4.12.1",
"@tonaljs/range": "4.9.2",
"@tonaljs/voice-leading": "5.1.2",
"@tonaljs/voicing-dictionary": "5.1.3"
}
},
"node_modules/@tonaljs/voicing-dictionary": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/@tonaljs/voicing-dictionary/-/voicing-dictionary-5.1.3.tgz",
"integrity": "sha512-kRM6IOHq+ULgZtJdbGNz5OmfUo+WyA3EeqKVrlA9Uj7QqrrfOkzeQdE3jXEBnjO1oGP5ql6NS5QUF3rST+SqUQ==",
"license": "MIT",
"dependencies": {
"@tonaljs/chord": "6.1.2",
"@tonaljs/note": "4.12.1",
"@tonaljs/voice-leading": "5.1.2"
}
},
"node_modules/@types/aria-query": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
@@ -13720,6 +14010,37 @@
"node": ">=8.0"
}
},
"node_modules/tonal": {
"version": "6.4.3",
"resolved": "https://registry.npmjs.org/tonal/-/tonal-6.4.3.tgz",
"integrity": "sha512-p+0kwBBma3Ko2xtHVq8oYa+IAGRozkAkBk03swRvcEfxYa8Ktr0yrBYW1fsZlywaerEu346oebghrS8jDQmBsA==",
"license": "MIT",
"dependencies": {
"@tonaljs/abc-notation": "4.9.1",
"@tonaljs/array": "4.8.4",
"@tonaljs/chord": "6.1.2",
"@tonaljs/chord-type": "5.1.1",
"@tonaljs/collection": "4.9.0",
"@tonaljs/core": "5.0.2",
"@tonaljs/duration-value": "4.9.0",
"@tonaljs/interval": "5.1.0",
"@tonaljs/key": "4.11.2",
"@tonaljs/midi": "4.10.2",
"@tonaljs/mode": "4.9.2",
"@tonaljs/note": "4.12.1",
"@tonaljs/pcset": "4.10.1",
"@tonaljs/progression": "4.9.2",
"@tonaljs/range": "4.9.2",
"@tonaljs/rhythm-pattern": "1.0.0",
"@tonaljs/roman-numeral": "4.9.1",
"@tonaljs/scale": "4.13.4",
"@tonaljs/scale-type": "4.9.2",
"@tonaljs/time-signature": "4.9.0",
"@tonaljs/voice-leading": "5.1.2",
"@tonaljs/voicing": "5.1.3",
"@tonaljs/voicing-dictionary": "5.1.3"
}
},
"node_modules/tone": {
"version": "15.1.22",
"resolved": "https://registry.npmjs.org/tone/-/tone-15.1.22.tgz",