new TuneScope extension and library, thanks, Glen, Eric, and team!

snap8
Jens Mönig 2022-07-20 18:35:33 +02:00
rodzic 32a5900215
commit ec937588a0
39 zmienionych plików z 14069 dodań i 1 usunięć

Wyświetl plik

@ -29,6 +29,7 @@
* new extension primitive for querying all variable names accessible from a specified scope (global, sprite, script)
* new extension primitive for querying whether a watcher for a variable by name is shown onstage
* new support for setting the translation via the API
* new TuneScope extension and library, thanks, Glen, Eric, and team!
* new "Tad", "Jahrd", "Derec" and "Jamet" costume series, thanks, Meghan and Brian!
* **Notable Changes:**
* exporting a library includes dependencies (auto-select all referenced blocks)
@ -59,6 +60,9 @@
* **Translation Updates:**
* German
### 2022-07-20
* new TuneScope extension and library, thanks, Glen, Eric, and team!
### 2022-07-19
* new "Jamet" costumes, thanks, Meghan and Brian!
* updated sw.js with new costumes

Wyświetl plik

@ -36,6 +36,7 @@ bitwise.xml Bitwise operators Bitwise arithmetic operators for low-level bit man
~ ~
~ ~
SciSnap!2Blocks.xml SciSnap! v2 Scientific Functions, Graphing, SQL interface, Machine Learning, from Uni Göttingen (Eckart Modrow)
TuneScope.xml TuneScope Music Notation, Instruments, Drums, Tones, Chords, Tracks, from the University of Virginia (Glen Bull)
~ ~
~ ~
~ ~

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -0,0 +1,110 @@
console.log('load _tone_0710_Chaos_sf2_file');
var _tone_0710_Chaos_sf2_file={
zones:[
{
midi:71
,originalPitch:4800
,keyRangeLow:0
,keyRangeHigh:49
,loopStart:2225
,loopEnd:2564
,coarseTune:0
,fineTune:19
,sampleRate:44100
,ahdsr:false
,file:'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VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMTWA8AAAf4cAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV'
,anchor:0.05204082
//_tone.Clarinet_1
}
,{
midi:71
,originalPitch:5700
,keyRangeLow:50
,keyRangeHigh:55
,loopStart:1891
,loopEnd:2094
,coarseTune:0
,fineTune:20
,sampleRate:44100
,ahdsr:false
,file:'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAADAAAIDQB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn6/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAMMAAAAAAAACA35+etEAAAAAAD/+9DEAAALVGFGdPeAJCAzKHc5sAAABGN8Qw8CfgXwCMCGIeZbn5E4WwuB0MjeW8NQJoSxUZY1er2dkePIkSlKUve973vDfqx48DEHwQBAMcuD4fcCAIFATP//+XP5cEAQy5/8QAMH8uCAIZcHwfD4AAAAAEYYAAZDSsVtlph2kiTyMC281mFwJUzhoDEjkJCIw6VwgYGDzmZqBxjsumDAiY4HYGERgEkCEImhupgpWbkeGEnhp8QAA0mYx0ZRgNMSlbwIFmLlLIHCeRnzxrMcVBYvC5xgIIzZKQON0d35f2vRgIqUvnJS46Egt6oY492HGoUt6RTTN4OfiURy6yeKNrRwRVlEnnMqeUXp2LQxK4vS2ILt6wbFSxaYgTdW/Wt3rOElrQ9FYHleGNqxORSN1r96/b7hfr0+7+ed/5Zlcr53qbGzQUvcL1TUtzpJVjvG7n3LWeO9V79fOtVzsf/MeZU2OHe2985FKmFb53Dn2rf+z3f6f/9qQGkYFgAgAnJd2khYpdka8ZwCpE3QxAYh2VBWM4N3X/EH1TqwPgEownvuVFmNFZ9Q39WxxkjrbX5oy7tAwlYl4sN/nWfAcJY8WND14EWrG5Up6x9Y1eBF+q9sZb6p1Z6a949Xk1Il6w7ZZL7lxDj6zfL+cTr96lHDlE+tJdfU5EgxUuXJ/aqEQUwAAAACjMBgUMNiEMvJQNlwfMNwdMJQPAgJmFIZmrITAocgsEQQAAXAUwRKEwPGAwOB4EAgYEAcYVGZFYzyBmMkEAz0ITIYTJAGZSaSHYBAcIITcwuHxpJRcVBBeldYGCokEgqBRCIyIAAoCGPiSYtCpg8ImUDyFwGOAAx0F0E5CJQEcnkMBAAOIyK5hUMDwwf0ChNtVukRMnJUghbqgnMEARsz9Ou6AoB0m4bL9u6+4cD2zW4xDihiwe4chvJ6lEJqM5VFKItE2V6n2h5MvcCbVXh+cZBA1LAMulDd/j6wGTou9Zch++szymozR5NMtTDv9eqHfnoE6tCWSl4s46yqcji9LbY5V1/YesxSK7bnSTTKYfyfjCSY8lVnCtSZ58oZdfsU2qHmqtW3ZsTeGNS7/0W69L+tf3/z/fefXodWhPAb//ugxOWAEOjzY/2HgCVet6equ8ABPdhh4zMgIVUPo62jwClcG7DM2I0AABAAACgAAAQmESy5wLIQGAeYBWsY4CCgUYOhcBBjCC9MOCmNMBMMNw8gAwcKsxvAMyqO4wIEwwDBQwlDIwe4QuODcmMN6ysGgwHBYxqQQUMDBgINWM4xIHDHhXMDgpBECgUXnd9mBikLggPAYlGFDKECqhqtJBgBMQggLg9IYHBcwIBTRpeMdmMCiQyCKyZY3WUlwYjUSaUCHQC3qqkgMYi8OBQKHo0OhYNiIBNLjL7MJZCulajsreYu6rtQGBgGHBsIBrxhwKIQIUAZhsRh2GYjDrsu/BbSXcvQFBdmPI5oTS7LguEms7EQbjEXddmVRqVfTUz6Os19lT9u7Vs0sO0petB1KQQAFGotmlIpw3qaboSl/X9lVrv1qaZjOqWXWoaid6cpYtTQ9HbfeO+0Ng7kMElL3v45Dc37Ym3B5Izll+qamqy2ly7jqm3+/3+v13Xcf/+c/////9/Y3LKluXyuks6vSjGXyu3RczwpLEvp7fA+FXYNaxEezoNNyORFqgP6gBEIzqNZEui+pkGnCDVGczHQKY0kS6VVLkvKyJFY1CYDxOQwRHVCEp1pc89rK3ma9lrayt9lbXLfVb5yYraNPWmbWs9+17Wa9a2rTH2VruR3isjgXEVCxFxRXArJ//ugxPCAL64FS7neAgGNlWO3sMABTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV'
,anchor:0.02639456
//_tone.Clarinet_2
}
,{
midi:71
,originalPitch:6600
,keyRangeLow:56
,keyRangeHigh:61
,loopStart:607
,loopEnd:728
,coarseTune:0
,fineTune:20
,sampleRate:44100
,ahdsr:false
,file:'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAFZgC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAPdAAAAAAAABWagXgXkAAAAAAD/+9DEAAAHcCtOdPEAJBSyKfc5ogApp2a8uajai2C2CaC4GRFTigZIlKUpQWBiwfwQOHOsH3+A/DHL/5d/BA5///WDgIHMHwf/+j9YPg4CAYAAMIAQRAAAAAUBgWUsFQQePZbXzQSHLACMcxAzkPTBwGAx7dEyQDjEoRGAIFAEYBCKagXMYcFxCBHTwMFGIJJ0lVQYIOyFoIKcIoQQRpBI20Sdm25vsyR+27veXjlkgGAl+GI2zi22jI2nwKtNOtaIGEJJKaUTZY248ERtLuHWVt+tNp4WCIRPAWgVvXNUqSyWQRe5FnQlk3GZhtHsqRGe1DkvsRSxCr1rLmMik1LAkrnt8+X09NQxqWZXflFJcs/Z7vW8o5VjdJ+cxU1j8Yy5as2+yjmOt8mOYXuVLH/S6l93VT8rmHKfmNXfctd7Y32p9zK/eFQglogdDDxjhiEf//uRo0IbG4Sh4WhQGBAIEBESAsoFEsQgCkzHhE116CDAIEwQCzJlnWdJ4qaiQXKUqQvNGJ46g4GD82sm8YpnC0PGDOY89sSkRgbOZstlhGKAtsrZ1kxHW8QujmHD4yMFUxaisdCteaxa1+U/5gAGYaRCI/MGFR0SZXOLxUGaYwerWtbrWltzTvPS0qD4u/FO47qbcfdam7WpsrLAofghKprbPGISmLsExjbXJyn1llrLLWWSGTI1sF7mRqKF7mZqoLsjFdnEOVXYgS9DEOayy/LL9Zf6GTM1UE5m7rYVueNnjKoLlkQdyKXIYnO0mGeed2V03/l/6///9/70Q1Nxymu1P/dXV2rcz5nb5Xt2K9ucu25Zu3LMbcYvZxix2MUn//////////f/LL8sv1l+sqHGtQ/ldrZ8hqnmHClcEMqgN6GBPG0RW542MK3NjYxVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uAxPaAKUZBbbm9kYAAADSDgAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='
,anchor:0.01668934
//_tone.Clarinet_3
}
,{
midi:71
,originalPitch:7100
,keyRangeLow:62
,keyRangeHigh:67
,loopStart:1024
,loopEnd:1114
,coarseTune:0
,fineTune:20
,sampleRate:44100
,ahdsr:false
,file:'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAFmwCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAJkAAAAAAAABZt0RKYZAAAAAAD/+8DEAAAGqAND9BAAI7IyqD828ACmEQBkETcAFCebGg+8H0sn1g/KA+H4IAmf1ajhR3lAQcUd4nD+D8QO/4IO/4nlz////B//BAyAgCmQQADIyQAgB2IqaywAgqF6VxiCsm6YFYGAASmRxAU3c6QdCoeaMCmKg40OlUFASmYMHGCTAk7UJ4i0PEYTZRJhaIeP9vOgsRnnlQuLIjlKXZiKM/iEErQlDE8SdiJUXJpFzPl4phxlsVZYI7olzXEgvsK5GOTBPcy1lqpSiflTkBjZoarTEKC+YIM1D8cIq0srvTPbessLDprVr93TN1XtlVrHHiN7g5NN7X27fpxCUJQl7F1ijfiG3xYUuXkNv3TGtWzCie2M5eahanltaJNG8LwIUb0kkpDkpEiTSjLn7///39e+Pv2rvSAAKGAAAQgBAarTfP705QqVnVMFjMGAAwAEzRI/aAJn4qgow6EiYDiRXMPhF3DBwOMBAIhERjTKdRlaClJkiauy8CnMdAUcQAgIBRIbiCQzjp0PxSI/mJAtcdWGEBt5eVPNx9x7isYyTKCzPEw3Ka7D0igR/46/jmUj+FsGVM4LtuBcaopbajc7A0OXsO57ylMG15/KpYjMcf+euz9eN36T6K9GrF+zbp6K3LKOvlR2ZXMx99YDkFHl+dj6fWNTdq1+dizbsWM/28MjfzOA6z9/GIvMYTOf1M6bfcq9fte3TVt2/x3hc/8Mr+Usn6SWW5RLKaUSy5GMKSx//3/uwCQAAJmEIxryGOUZ5xmjIVCgJmLm02AjkqzGLAQKPsMJzAUABBGqHECqMYYIDqBBHC49tLaLaLihJ3A2gFocLInldG3/aC91CVyunYVDHTqGstE8QYTYTZCW40jSQ5mt8wnz6Nuta5hPnz6NmC9Vr6NbeavXr23//zWtrb+awXr23rWta1rbfrV7WtcW/rV69e29a1rWtfmta11/61rXX9q1rWvxa//7oMTSAB/BmV+5zRIDQbGoZ7LwAFa118WtCrXXxa0J8GoNA0DLlA0DUsDQNPg0exEe1B3kazusFT2CoLYKgqpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg=='
,anchor:0.02362812
//_tone.Clarinet_4
}
,{
midi:71
,originalPitch:7800
,keyRangeLow:68
,keyRangeHigh:73
,loopStart:840
,loopEnd:900
,coarseTune:0
,fineTune:20
,sampleRate:44100
,ahdsr:false
,file:'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAGawCenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6e//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAM7AAAAAAAABmta1XzMAAAAAAD/+9DEAAAIDCNQ9JAAJAAzKb85kABgAJCjnsIQz3NcVggGGLRo0cwcBAEAQBAHwfB98EAQBD4kBAEPB9/wQKAgCDvBDEAJg/wQBB3/8hBD8Th//+XD7mYADwkI0mTusQs193n19oXApiwouIOBASCAjFbAR5kGDSWBRiIjWcpGJkQKhwQMkkoxsETIIIGgDOhkEylwKjAwkcAOMAAWL9KI3hElwbiJFOFDMAkAd9YRrizxYQKRA6C+2CCW5sXhDsQY5E7IJRZfeBoq7LgQE1qGZXA8OO/R01DDCt7fLnl8YdWSQFylmZmEPZLocnqaVyCgeOcllNjlEqkOW6H7li/STcWjFyLZ0dS7D8gtYZawsZyyJ0/Ma0t5U1OyWbxz3KMtfF6S5Yo+wPUxmMcrtLyt3KvrmGVz7Wd7HH7tXfe853lPzdaWWOawuWLeOFPz///1f171/So4QAFzNWQBREQOKI0OiYShfimZKAWHARmH2YOcEy+5gDAOGCaAwQAJCQAJpjziGjO9AIgFwcAMCgC2QHJWQKbsz0N9PwoAuMBABQ0Lm0zN+NaLiGAUBskw18LADpcGfKHsZIyNZoaDn2BGAENAEvuxMtTOwgyf0gDEFFKMOgjExFBknIdSIJKIQJpPvTM6XKYNYshkSjLGKoayYWQX5h1inV3DgixAEOVo3OTkAQswoh7TB2EFMPwDcw9RnDCLEUMOcB6xWhyi3cvbt14RU+uYKAQIMAlMEYDEwFQagSA4YGYFhgBgC8xl/amGrlJS01NfqUs5XowaAEQAMmBkB+YCgHoYC4YJYOxgMglGCSAAYJAQ9/8+fu///yL1JRKKsbu34xTWDASBHME4BswLQbjABAsMEcC4wBAUSAAcwKgMTACAULOmACBNvDPPfP1j3//vc7NP9+phYu288rGuGBKAkYBIERgCgHmBkB+YBQF5ECIYF4KRgDgWGBiAQYDwKIIAbMCwBsEgYMIMBcCD/////////////////////////////////////BQBYFAGEQDZgQALmAMA+YAwAxgWgdGASBQUAhGBQCWYAQEpgUADmAuCEFwEDAlAYCwFaj5gJAOg4AQEABjIChgOgKGA//uwxPaAP/ZBa/nvEUJOlCD3s4AAKA0YA4AJgTAbmAIBGNAcmBGCMY3K7Y5ZEAANZqqgQUwAS1rXASIaqSeBluHHAChmzq2mMSZBIOJSVNVTpEMSocAQFrnnay71r6r+v7efZyqRcy6o2uVMVpsFLDQ7cpqamy3Sy27GZbNO05U8+rOZdKX9f2l5lTU3K1NTZbxqnRKGoi/8FXFjwiBqCqwVOljxYOxL//lTsRQaes7//+p8SxLv///W6qpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo='
,anchor:0.01920635
//_tone.Clarinet_5
}
,{
midi:71
,originalPitch:8400
,keyRangeLow:74
,keyRangeHigh:79
,loopStart:1063
,loopEnd:1106
,coarseTune:0
,fineTune:35
,sampleRate:44100
,ahdsr:false
,file:'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAGAwCpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqamp//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJAJtAAAAAAAABgMRIXOPAAAAAAD/+9DEAAAIJClCdDEAJBSzKXc5okBRNNN9ETd3NAMDeBAAAEUIIGn4kOF4YWD4fn+gP5c14f5QEHYPv8QAgclz8oCAIAhA4Pg+D4EBDg+f/+gQBjwfD9eBgABgASADIsabUljpgQImLBiDmoMBkOWpIHQYCDBApXoYDHkJAg/M/kNyTngoLyCVWZylqCAF0vQ3NB5DMmKxYA00j48AYZQDp3fkzKHyeRI8yKlX3H0MIsIgGMEQ5NR+lbpDIOKNlko4AIDYY9aNGH4wn7Lvu1g4juXupEOaAhSTKuI7YmYs7kOTeUFsHlUUgZ2JuJo5z26TGfpJ6zFbVe3etyGgitBb7Yf+32phAlbHsOXvqavc5TXLlJS1IzlVrcsWbk9SYYTE9YvX43b+9N2Mqm8LNJT1sOXan5z9JhKH8vW617HPKk+7PXvuVMuYznLly/e1cQDTn70xgXNXgM8UBVVWdoUAFX0AAAFAIRnNTv6ceTE3StKXyYSThhdCgudA4PJUcwoCMrKTmAWNHbh1KZ4KoHr7CgB4w4yY16cNAF667KUd3jTCdGCbA3oydsy8tf8XesynB7E6E7gAbQous4MjVGnd+3EAvnSznIefgqGWLuxBMaMMZdu5G4/oKkqLGsmovAww2blrS1iEzN+sZcgy7yZA0rpsZlIaqXSMmAcSBKMxAGmtVEj0+8NXWXSCzwlDri1q66ONa8lO91Jzla320vCforkYahYsTfPjnc/7C+bu2Z+av9mLcHZ2Mbss5hu//4yvesbFDUt5/2V5cxu63u7FKPCvlXy/OteysfMXd//W+l+v9Lq6kmAAAAAfMxAiwQEzNOETg00HMQQ5IUeAAlvWYGFBtYBnNfL+sGr1Haa9G0MTEk1LQ2WSBBmQoCKla2AEiMpErWfF/i5SKTToJS9QCuNEaJpSYyumigA5qWmskaYBgIKAFtW5ISi5S6ZY1pYZUzEotMuy/0ajUuzhlhqgKYr9R1yXJiuFNGo1S2eVpVGqbuPf1TU1qrDL+01WUy2lx/LLH//LLLLL8su7xpaXHL8cccefrHHHmVNTU1NjrKtll38csssu7xpaXJYKgqCqwVDRYGQ0oGgaOg0DT2srBV6z//ugxPOAIRGZYfm9EgO/qyezsYAAv/Bo9ER7BqJQWwVDUSusywNKTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'
,anchor:0.02392290
//_tone.Clarinet_6
}
,{
midi:71
,originalPitch:8900
,keyRangeLow:80
,keyRangeHigh:127
,loopStart:535
,loopEnd:568
,coarseTune:0
,fineTune:80
,sampleRate:44100
,ahdsr:false
,file:'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjcyLjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAAErwDZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3Ljk2AAAAAAAAAAAAAAAAJASGAAAAAAAABK9j7Ot7AAAAAAD/+9DEAAAH2CtH9DGAJNJFar83skFYMhEQAClrt2+Tr8RCd3c/QAAwNxACBQH6gQMg+H/B8Hwcic/wfP4nD/BAMfBDlAxwf/wfD/+CAISgY//8oGJd1Y2IRAYNBAGFgu5pY5ZRqhMVAzdBogBzYjQ0RKAQG2xbIQhYYKGPjo6ZAUSBgkYWsmEi5nMGa6FtKPjPUIiNGRTMEAxEEJNKrssEYWGAZiQMYIMU7JL+BZsFIEdtGICgGQC/isF2C5G3sosY0pZAugYiFmGjZjoubCEhAS6GfJh1b83XtSxdEskc6zMw8JTVa/EHappbF7luKfBrbzzW3fctdjLEVFT3Wzy34plJZPlUlmVmnqw2/fMK67GcKCOW+ta9qTYb1hn23rlTkCbzwt4T+PNZPI/ksf9w3XhyUTkvt196vYbp89YdxzxznMqTlTDO9rnKmrOcrdT7F+o/EXjcjdiMXnbf/////////////////////Wv/97/X/+/w/9fz//v/3DDn///+sOZ552BA/BXM/dpQERCCVjuRJBR6ScgqRDS2i2i4s6dIKwnKQVhTqGgKzSJFGZmqqqOJAIBEUc////mZIkQCAUtNIoyCoLA0DTwVBoGgaBoGQVBV3+DQNAqCoKgqCx4GgaBoNf//LA0DQNAyCoKgqCodTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//tAxN0DzUB5bfzzACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='
,anchor:0.01231293
//_tone.Clarinet_7
}
]
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -0,0 +1,19 @@
console.log('load _drum_35_21_FluidR3_GM_sf2_file');
var _drum_35_21_FluidR3_GM_sf2_file={
zones:[
{
midi:128
,loopStart:0
,loopEnd:0
,keyRangeLow:35
,keyRangeHigh:35
,sampleRate:44100
,coarseTune:-1
,fineTune:0
,originalPitch:3500
,file:'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'
,anchor:0.00197279
//'808 Kick 1
}
]
};

Wyświetl plik

@ -0,0 +1,19 @@
console.log('load _drum_40_6_JCLive_sf2_file');
var _drum_40_6_JCLive_sf2_file={
zones:[
{
midi:128
,loopStart:0
,loopEnd:0
,keyRangeLow:40
,keyRangeHigh:40
,sampleRate:44100
,coarseTune:0
,fineTune:21
,originalPitch:5000
,file:'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/X//ZNHKj/WavNaxgoMgOnuRCT1uWAm8ej+PqRYP/StMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+3DE8wAZgacj7DDTwSwm4KQWCJCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'
,anchor:0.00117914
//'Snare 2
}
]
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -0,0 +1,19 @@
console.log('load _drum_69_6_JCLive_sf2_file');
var _drum_69_6_JCLive_sf2_file={
zones:[
{
midi:128
,loopStart:0
,loopEnd:0
,keyRangeLow:69
,keyRangeHigh:69
,sampleRate:44100
,coarseTune:0
,fineTune:16
,originalPitch:7700
,file:'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjQwLjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAAEAAALGwBubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm6mpqampqampqampqampqampqampqampqam39/f39/f39/f39/f39/f39/f39/f39/f3/////////////////////////////////8AAAAATGF2YzU2LjYwAAAAAAAAAAAAAAAAJAAAAAAAAAAACxvyvBFCAAAAAAD/++DEAAAKgRtP9BEAJxhIK/sxshBXVWeIeI+ZCAAApjGMYwAAAAAAAc5znP9CEb+hCEJ8538hG//Oc5/6EJ//IQhCEJ/5yEZTnP6nP8hCABAwUBAEJQH3xODnBAHwfB8P8Th9QIO+UB99OdLvW+27R6CwAAAABuZbwAqRUEDwMtJBeaCRJoO81sSfHTidAAYwpWtgepONVUy4SMCAlvIjozpxQqlMPEjAAGgnWuQ1LEglSPohpNqmTVhcYpazSn9q07kP05YOHX6FgcyAVNPNaemcBxIEjcalUEQ6ttfyY5gwCYGCqLGUESwr9rolNuNyungfdBB7XJTDRiziQtpmCoamCmYlBh6EJfrOJDD8onKeKzsXhV6tSSiKwLbqGSuRjwGa8LGCgAYxGPG5hqSYUoGKi8zQV4JQfp4chuIUjGGsNzoWOvBIptDRrrKFHAQKhxCY2/m3IRktOc+mHHwJNHmOCZ086DxoMAC06z5hK9sCmjntcfh84jI5+VUjLYWzRU7L3/uRmgfyzSwzLzVjM55aM4LDSF04V9McDgqMmOaQ9pG7lhn5macviFeBpSFF13FfvQuhk9ZyIcqRSHLj8Qp9J1xJ2Ls4dzl3C9Wll5x4xORZl7LI7Sz7lx2G6CWVbF+WRuMWbMorampbw2A3N9RTF0EwIYNIAjCyQ2gbM1LkuwcWGNDBtJiZcMmjhpghWIg4EghiIKYWJmSBBhp2YuJgkMY4ZkAGeJyA0wwK7e3+3eifmAAAFhxCZkIyZu6E5sCo2RqIsCazVak7nu6zwTpTkuG749rsOmhvUj1/BdKysy4ZmV4sTp3NX7fEjQY8e0sWDPW1IGG+TTC+hP2d/By7Q5kSraoV6yhTpwx3NWtD9gZcUQ2F1DEewEgr0ux5hsuoarktVduSLRmE4vQG40WiAhUJfZkWwn2fredxuopiMFMjoP45kUWA0D4VxezlNMuL5Ip4fJqnKcz4nAzG9VI5O0XKvT7LKp1OwODRhZc8UbY7560trI0vZVcnsuD5gZ47yO2tSreLpxgwH2IUSbDNDf7xWJHkZHlPD3inpEgya1SNNJuvpSmr5jUxu1586gfE+reW29/3zLJnV8Pab2Z39t3MYAAiJgmmfUYJYdQ6o8kmUgLMUYeCAKSkwAKs1UzlPrBjrrlZqmEoRhBOkEimQjQH1itGSefWHK1wtgNrZc2i3Tk9YRmK1hKDUslZYqOUyERoDsstI2akk1BUApZLhOLUQ8lAugigMCNEZpPhMV0yw1DIzSVc1a7eGkqnrkS09SkQl4qpEKhQ1YYZxIpLCSh0mU0FzBOxEuTlwcnAtyrZFknUSMLcxDGLs3p0wh3i6E/NhXppTn+oFtYVxbj5VBuwz9HCsqVkP1kP1TtiRPH/+7DE8oBiJj9v/YeAJQnIK32WPjhDkiyIUYRcVQW5pOZmXSOP5DDvNFKH8T1FVXA+SSn6X0xDKirtELo6j9aG9WxLLpgOYymLb5XPz0Pw4vGMJBumZaWycuMNDVCbyiJ08frJPUJsX1UMypO1wtCmnetz2AjlCpVTputJZmVy5ZW2A7VnnP38qUkAAASmIVzaRMgcMFMs4Clh4pgnrDMtKpqKaExkaRqWKXwoF4GALDMRhHMD1lIjyD1qio7E7UJdEfE1p5OSXbH2uCU4d4WSq42yeHxWHsfRvKt61m7thVKRMVINr07rqslrEo2VJIesN7eui7ikq4tqNP1nLaoHxumYJM8JrGWU6hCWVrkkRoDFc6o4aKTQwWI7WPZCTgGMkcOJVGEPdKuapOdvE9LixSinDPVJciQjEBzGQGELqLQoz9SrkZqnWWGC0tSDUpfjUFuS0VvQ0vyWQo5Txb1Cu4h+q1OODYU1ycshfjSO4uBviajhLIrhXSwMynUyWN0/GQvxgltYUNPoV4kTSb2SRGjEOk8cRVaXF8kG9vOV4XJFLZBTDI5yTuUy0Nh6s6pRRJjRisrYnkUfZwwYp1J+lZEOgn8j1CrdJ54hynRr5VX3Bqu79/apqgAIRwFYYlZMyYrQXBNxcwAzKAEKYFEGj0Uk6WgM6QgfgvRKhcy/niX+K9P5fU0R5hhTrxVH9Fw3RaPI6TkvGcrXpbUHwXKrLP3KCsPt7WasO2JgfeMvNMN47WDvV714+VSmZZp13Mrssq9HgsDqsGy8d0B8k9vXTnIwTMF2KBGYMr2FNhTJFwOdkP7w3mHM6TJN1wVqpUDnGf/7sMT3AGnaQT3Mse+EZsgm/rLwAJ3GEhh0ttLLzLIyLbepmeFCSCiYnsppMKaYGxCo6uhwVK5KesZDVar1SnVbWj+VsorpmRVMUtGLbBHgqpiOqE5LcPKhgTt2GqAdrU3K6ExYhs1mZgfKJcqVxyrasz7EVkfVgQmvzvY194r6WgwfbG811p9BjTWvisz3Sph8tspKpYpEVhcTQWAQAADxtE3zhIzPhACORzNS7NCkKGCljkSoqiDCqW6s2tVUEL4svR4q4F3iJCNiJQgaFGbq3moCoFNxAVW5wEHjKJlTSn7QSudi47pqsXsrQKhdNFFcrRl9wDCU4UiliMnkzTmxO6/6Zq7YZaUw5OUVUpU+aESliIDHxgLKYAWLIHuhjlxjLpO1H4hcjTwr3WiXemVbldMPkUDS6auPyy59H0a2l7KaJ9pVKWZOFC2Up+Izp8zkGkACqBT5eBfhQB5kHYpMwICSQy4SyUqoDiNS3q1V+rhjKlAXxgpoyt7UxwbdYYWSxFpbsrSch8WvTVh9FzpCLFmYxQSOIMpkLoxGcdp9pt6n2o6lbdat2CHd1DWLosPia12dtZUsiTK6COuO0CHIedm/A8Qbyag+GJVcd6xDDBpa8TYY46UjsQC8EDYT8trVblLcrWaGKf+MSlV2gmpdM5dxq4U2W+f//9bLdapMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//uAxPEALcpBKfmsAEAAAD/DgAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo='
,anchor:0.01902494
//'Cabasa
}
]
};

Wyświetl plik

@ -0,0 +1,440 @@
// play note function
var AudioContextFunc = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContextFunc();
// calculate midi pitches and frequencies
var tempMidiPitches = {}
var tempMidiFreqs = {}
let notes = [
"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"
]
for (var i = 0; i <= 127; i++) {
let note = notes[i % 12] + Math.floor((i-12)/12);
tempMidiPitches[note] = i;
tempMidiFreqs[note] = 440 * Math.pow(2, (i - 69)/12)
}
const _convertToSharp = (note) => {
const splitByFlat = note.split("b");
if (splitByFlat.length < 2) return note; // does not include a flat
const letter = splitByFlat[0];
const number = splitByFlat[1];
const indexOfLetter = notes.indexOf(letter);
if (indexOfLetter === -1) return note; // TODO: handle this error
let previousSharp;
if (indexOfLetter === 0) {
previousSharp = notes[notes.length - 1];
} else {
previousSharp = notes[indexOfLetter - 1];
}
return previousSharp + number;
}
window.parent.midiPitches = tempMidiPitches;
window.parent.midiFreqs = tempMidiFreqs;
window.playNote = (note, noteLength, instrumentName, volume) => {
if (note == "R" || note == "r") return;
note = _convertToSharp(note);
var player=new WebAudioFontPlayer();
instrumentName = instrumentName || window.parent.currentInstrumentName;
instrumentName = instrumentName.toLowerCase()
// console.log(instrumentName);
let currentInstrumentData = window.parent.instrumentData[instrumentName]
player.loader.decodeAfterLoading(audioContext, currentInstrumentData.name);
function play(){
const vol = volume || window.parent.instrumentVolumes[instrumentName] || window.parent.globalInstrumentVolume;
console.log(note, noteLength, instrumentName, vol)
player.queueWaveTable(audioContext, audioContext.destination
, window[currentInstrumentData.name], 0, window.parent.midiPitches[note], noteLength, vol
);
return false;
}
play();
}
window.timeSignatureToBeatsPerMeasure = {
"4/4": [4,1], // 4 beats per measure, Quarter note gets the beat
"3/4": [3,1],
"5/4": [5,1],
"7/4": [7,1],
"6/8": [6,0.5], // 6 beats per measure, Eighth note gets the beat
"9/8": [9,0.5],
"12/8": [12,0.5]
}
window.baseTempo = 60;
// converts note lengths (quarter, half, whole)
// to corresponding time value (1, 2, 4)
window.noteLengthToTimeValue = {
"dotted whole": 6,
"whole": 4,
"dotted half": 3,
"half": 2,
"dotted quarter": 1.5,
"quarter": 1,
"dotted eighth": 0.75,
"eighth": 0.5,
"dotted sixteenth": 0.375,
"sixteenth": 0.25,
"dotted thirtysecond": 0.1875,
"thirtysecond": 0.125,
"whole triplet": 2.667,
"half triplet": 1.333,
"quarter triplet": 0.667,
"eighth triplet": 0.333,
"sixteenth triplet": 0.167,
"thirtysecond triplet": 0.0417
}
// instrument data
window.parent.instrumentData = {
"accordion": {
path: "https://surikov.github.io/webaudiofontdata/sound/0230_Aspirin_sf2_file.js",
name: "_tone_0230_Aspirin_sf2_file"
},
"bass, acoustic": {
path: "https://surikov.github.io/webaudiofontdata/sound/0320_GeneralUserGS_sf2_file.js",
name: "_tone_0320_GeneralUserGS_sf2_file"
},
"bass, electric (finger)": {
path: "https://surikov.github.io/webaudiofontdata/sound/0350_JCLive_sf2_file.js",
name: "_tone_0350_JCLive_sf2_file"
},
"guitar, acoustic": {
path: "https://surikov.github.io/webaudiofontdata/sound/0241_JCLive_sf2_file.js",
name: "_tone_0241_JCLive_sf2_file"
},
"guitar, electric": {
path: "https://surikov.github.io/webaudiofontdata/sound/0260_JCLive_sf2_file.js",
name: "_tone_0260_JCLive_sf2_file"
},
"piano": {
path: "https://surikov.github.io/webaudiofontdata/sound/0020_JCLive_sf2_file.js",
name: "_tone_0020_JCLive_sf2_file"
},
"organ": {
path: "https://surikov.github.io/webaudiofontdata/sound/0180_Chaos_sf2_file.js",
name: "_tone_0180_Chaos_sf2_file"
},
"banjo": {
path: "https://surikov.github.io/webaudiofontdata/sound/1050_FluidR3_GM_sf2_file.js",
name: "_tone_1050_FluidR3_GM_sf2_file"
},
"saxophone": {
path: "https://surikov.github.io/webaudiofontdata/sound/0650_FluidR3_GM_sf2_file.js",
name: "_tone_0650_FluidR3_GM_sf2_file"
},
"shakuhachi": {
path: "https://surikov.github.io/webaudiofontdata/sound/0770_SBLive_sf2.js",
name: "_tone_0770_SBLive_sf2"
},
"sitar": {
path: "https://surikov.github.io/webaudiofontdata/sound/1040_Aspirin_sf2_file.js",
name: "_tone_1040_Aspirin_sf2_file"
},
"bassoon": {
path: "https://surikov.github.io/webaudiofontdata/sound/0700_FluidR3_GM_sf2_file.js",
name: "_tone_0700_FluidR3_GM_sf2_file"
},
"bass": {
path: "https://surikov.github.io/webaudiofontdata/sound/0350_JCLive_sf2_file.js",
name: "_tone_0350_JCLive_sf2_file"
},
"violin": {
path: "https://surikov.github.io/webaudiofontdata/sound/0400_JCLive_sf2_file.js",
name: "_tone_0400_JCLive_sf2_file"
},
"cello": {
path: "https://surikov.github.io/webaudiofontdata/sound/0420_JCLive_sf2_file.js",
name: "_tone_0420_JCLive_sf2_file"
},
"clarinet": {
path: "https://surikov.github.io/webaudiofontdata/sound/0710_Chaos_sf2_file.js",
name: "_tone_0710_Chaos_sf2_file"
},
"flute": {
path: "https://surikov.github.io/webaudiofontdata/sound/0730_JCLive_sf2_file.js",
name: "_tone_0730_JCLive_sf2_file"
},
"french horn": {
path: "https://surikov.github.io/webaudiofontdata/sound/0600_GeneralUserGS_sf2_file.js",
name: "_tone_0600_GeneralUserGS_sf2_file"
},
"harp": {
path: "https://surikov.github.io/webaudiofontdata/sound/0460_GeneralUserGS_sf2_file.js",
name: "_tone_0460_GeneralUserGS_sf2_file"
},
"koto": {
path: "https://surikov.github.io/webaudiofontdata/sound/1070_FluidR3_GM_sf2_file.js",
name: "_tone_1070_FluidR3_GM_sf2_file"
},
"marimba": {
path: "https://surikov.github.io/webaudiofontdata/sound/0121_FluidR3_GM_sf2_file.js",
name: "_tone_0121_FluidR3_GM_sf2_file"
},
"oboe": {
path: "https://surikov.github.io/webaudiofontdata/sound/0680_JCLive_sf2_file.js",
name: "_tone_0680_JCLive_sf2_file"
},
"trumpet": {
path: "https://surikov.github.io/webaudiofontdata/sound/0560_GeneralUserGS_sf2_file.js",
name: "_tone_0560_GeneralUserGS_sf2_file"
},
"tuba": {
path: "https://surikov.github.io/webaudiofontdata/sound/0580_GeneralUserGS_sf2_file.js",
name: "_tone_0580_GeneralUserGS_sf2_file"
},
// drums
"cabasa": {
path: "https://surikov.github.io/webaudiofontdata/sound/12869_6_JCLive_sf2_file.js",
name: "_drum_69_6_JCLive_sf2_file"
},
"snare drum": {
path: "https://surikov.github.io/webaudiofontdata/sound/12840_6_JCLive_sf2_file.js",
name: "_drum_40_6_JCLive_sf2_file"
},
"bass drum": {
path: "https://surikov.github.io/webaudiofontdata/sound/12835_21_FluidR3_GM_sf2_file.js",
name: "_drum_35_21_FluidR3_GM_sf2_file"
},
"closed hi-hat": {
path: "https://surikov.github.io/webaudiofontdata/sound/12842_0_FluidR3_GM_sf2_file.js",
name: "_drum_42_0_FluidR3_GM_sf2_file"
},
"open hi-hat": {
path: "https://surikov.github.io/webaudiofontdata/sound/12846_0_FluidR3_GM_sf2_file.js",
name: "_drum_46_0_FluidR3_GM_sf2_file"
},
"mid tom": {
path: "https://surikov.github.io/webaudiofontdata/sound/12847_21_FluidR3_GM_sf2_file.js",
name: "_drum_47_21_FluidR3_GM_sf2_file"
},
"high tom": {
path: "https://surikov.github.io/webaudiofontdata/sound/12848_21_FluidR3_GM_sf2_file.js",
name: "_drum_48_21_FluidR3_GM_sf2_file"
},
"crash cymbal": {
path: "https://surikov.github.io/webaudiofontdata/sound/12849_21_FluidR3_GM_sf2_file.js",
name: "_drum_49_21_FluidR3_GM_sf2_file"
},
}
// load all instruments
let instrumentNames = Object.keys(window.parent.instrumentData);
window.parent.currentInstrumentName = "piano";
// initialize volumes
window.parent.instrumentVolumes = {}
window.parent.globalInstrumentVolume = 0.5;
// tones
class Tone {
constructor(id) {
this.id = id;
this.on = false;
const thisPlayer = new Object;
thisPlayer.context = new AudioContext();
thisPlayer.oscillator = thisPlayer.context.createOscillator();
thisPlayer.gainobj = thisPlayer.context.createGain();
thisPlayer.oscillator.frequency.value = 100;
thisPlayer.gainobj.gain.value = 1;
thisPlayer.oscillator.connect(thisPlayer.gainobj);
thisPlayer.gainobj.connect(thisPlayer.context.destination);
this.player = thisPlayer;
}
dBFS2gain = (dbfs) => {
//return Math.pow(10, dbfs / 20);
return (dbfs / 100).toFixed(2);
}
setFreq = (freq) => {
this.freq = freq;
this.player.oscillator.frequency.value = Math.max(freq, 0);
}
setAmpl = (ampl) => {
this.ampl = ampl;
this.player.gainobj.gain.value = this.dBFS2gain(parseInt(ampl));
}
turnOn = () => {
console.log("on");
if (this.on) return;
console.log("turning on");
if (!this.started) {
this.player.oscillator.start(0);
this.started = true;
} else {
this.player.context.resume();
}
this.on = true;
}
turnOff = () => {
console.log("off");
if (!this.on) return;
console.log("turning off");
this.player.context.suspend();
this.on = false;
}
}
window.Tone = Tone;
window.tones = {};
/* Auxillary Functions */
// repeats an array n times
// similar to [1,2,3] * 2 = [1,2,3,1,2,3] in Python
window.multiplyArray = (arr, length) =>
Array.from({ length }, () => arr).flat()
/*
Queue.js
A function to represent a queue
Created by Kate Morley - http://code.iamkate.com/ - and released under the terms
of the CC0 1.0 Universal legal code:
http://creativecommons.org/publicdomain/zero/1.0/legalcode
*/
/**
* Creates a new queue. A queue is a first-in-first-out (FIFO) data structure -
* items are added to the end of the queue and removed from the front.
*/
function Queue() {
// initialise the queue and offset
var queue = [];
var offset = 0;
// Returns the length of the queue.
this.getLength = function () {
return (queue.length - offset);
}
// Returns true if the queue is empty, and false otherwise.
this.isEmpty = function () {
return (queue.length === 0);
}
/* Enqueues the specified item. The parameter is:
*
* item - the item to enqueue
*/
this.enqueue = function (item) {
queue.push(item);
}
/* Dequeues an item and returns it. If the queue is empty, the value
* 'undefined' is returned.
*/
this.dequeue = function () {
// if the queue is empty, return immediately
if (queue.length === 0) return undefined;
// store the item at the front of the queue
var item = queue[offset];
// increment the offset and remove the free space if necessary
if (++offset * 2 >= queue.length) {
queue = queue.slice(offset);
offset = 0;
}
// return the dequeued item
return item;
}
/* Returns the item at the front of the queue (without dequeuing it). If the
* queue is empty then undefined is returned.
*/
this.peek = function () {
return (queue.length > 0 ? queue[offset] : undefined);
}
}
window.Queue = Queue;
/**
* Converts all elements in a nested array (2D, 3D, etc) to lowercase
* @param {*} arr
*/
function toLowerCaseRecursive(array) {
//check for arrays and recurse
if (Array.isArray(array)) {
for (var i = 0; i < array.length; i++) {
array[i] = toLowerCaseRecursive(array[i]);
}
return array;
}
//check for string vs non-strings
if (typeof array === "string") {
if (!hasNumber(array)) { //contains no numbers, so it isn't a note value
return array.toLowerCase();
} else { //case with note values, which contain numbers
//capitalize the first character in the string
return array[0].toUpperCase() + array.slice(1);
}
} else {
return array;
}
}
window.toLowerCaseRecursive = toLowerCaseRecursive;
function convertListToArrayRecursive(list) {
let temp = []
// need to do more testing for chords and nested lists
if (!(list.contents === undefined)) {
for (var i = 0; i < list.contents.length; i++) {
temp[i] = convertListToArrayRecursive(list.contents[i]);
}
return temp;
} else {
return list;
}
}
window.convertListToArrayRecursive = convertListToArrayRecursive;
function hasNumber(myString) {
return /\d/.test(myString);
}
window.hasNumber = hasNumber;
function deep_copy(array) {
return JSON.parse(JSON.stringify(array));
}
window.deep_copy = deep_copy;
// play dummy sound to initialize
setTimeout(() => {
console.log("playing initialization sound")
for (let i = 0; i < instrumentNames.length; i++) {
let instrumentName = instrumentNames[i];
if (instrumentName === "shakuhachi") return;
window.playNote("C4", 1, instrumentName, 0);
}
}, 1000 * 3);
// set loaded to true
setTimeout(() => {
console.log("TuneScope Loaded")
window.parent.loadedTuneScope = true;
}, 1000 * 4)

Wyświetl plik

@ -0,0 +1,351 @@
SnapExtensions.primitives.set(
'ts_setinst(name)',
function (name) {
window.parent.currentInstrumentName = name.toLowerCase();
}
);
SnapExtensions.primitives.set(
'ts_setvol(percent)',
function (percent) {
window.parent.globalInstrumentVolume = percent/100;
}
);
SnapExtensions.primitives.set(
'ts_setinstvol(name, percent)',
function (instrumentName, percent) {
window.parent.instrumentVolumes[instrumentName] = percent/100;
}
);
SnapExtensions.primitives.set(
'ts_playnote(note, duration)',
function (note, noteLength) {
window.playNote(note, noteLength);
}
);
SnapExtensions.primitives.set(
'ts_playtracks(tracklist, timesignature)',
function (tracksList, timeSignature, tempo) {
const multiplyArray = (arr, length) =>
Array.from({ length }, () => arr).flat()
const wait = (duration) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, duration)
})
}
const playTrackMeasure = async (currTrack, measureIndex, beatsPerMeasure, tempo, instrument) => {
var beat = 0;
const beatEndIndex = beatsPerMeasure[0];
while (beat < beatEndIndex) {
const note = currTrack[measureIndex][0];
const noteLength = currTrack[measureIndex][1];
measureIndex++; //increment for the next index in the track
const durationInSeconds = noteLength * (window.baseTempo / tempo);
// play the note and wait
await window.playNote(note, durationInSeconds, instrument);
await wait(durationInSeconds * 1000)
// we increment i with respect to the number of beats the current note occupies in a measure
beat += noteLength * beatsPerMeasure[1];
}
}
const playTracks = async (tracksList, timeSignature, tempo) => {
// verify inputs
if (!tracksList.contents) return;
const beatsPerMeasure = window.timeSignatureToBeatsPerMeasure[timeSignature];
var tracks = window.convertListToArrayRecursive(tracksList);
// convert all elements in the track to lowercase
tracks = window.toLowerCaseRecursive(tracks);
// check to make sure we have an actual melody/chord track rather than just a loop
// this ensures that we have a definitive track length
let haveSetTrackLength = false
let definitiveTrackIndex = 0 //index of valid melody/chord track
// check to make sure we have an actual melody/chord track rather than just a loop
// this ensures that we have a deinitive track length
for (let i = 0; i < tracks.length; i++) {
let currTrack = tracks[i];
if (currTrack[0][0] === "melody" || currTrack[0][0] === "chords") {
definitiveTrackIndex = i;
haveSetTrackLength = true;
break;
}
}
if (!haveSetTrackLength) {
console.error("No Melody or Chord track provided, only Chord/Drum Loop")
return;
}
/*
first, add up all the note values in the track
to determine the total number of beats
then, calculate the number of measures by considering the time signature
and the total number of beats in the track list
*/
// converts the strings of note length in each track to their respective duration values
for (let i = 0; i < tracks.length; i++) {
let currTrack = tracks[i];
for (let j = 1; j < currTrack.length; j++) { //index from 1 to avoid the header
//Reassign the durations list to numerical duration values from strings
//jth (Note, Duration) pair
currTrack[j][1] = window.noteLengthToTimeValue[currTrack[j][1]]
}
}
// properly encodes drum tracks
for (let i = 0; i < tracks.length; i++) {
let currTrack = tracks[i];
// check each track's header to see whether it is a drum track
// Header: (Instrument, Type)
if (currTrack[0][0] === "loop-drums") {
var isBassDrum = (currTrack[0][1] === "bass drum");
for (let j = 1; j < currTrack.length; j++) {
if (currTrack[j][0] === "x") { // ("x", duration) encode a note
//check if the instrument is a bass drum
if (isBassDrum) {
currTrack[j][0] = "C2";
} else {
currTrack[j][0] = "C4";
}
} else { //(" ", duration) encode a rest
currTrack[j][0] = "R";
}
//converting the duration length to the appropriate value based on the timesignature
// If eighth notes get the beat, subdivide drum tracks into sixteenth notes
if (beatsPerMeasure[1] == 0.5) {
currTrack[j][1] = 0.25;
}
}
}
}
// calculates the total number of beats in the song
var totalBeats = 0;
var defTrack = tracks[definitiveTrackIndex];
for (let j = 1; j < defTrack.length; j++) {
totalBeats += parseFloat(defTrack[j][1]);
}
// length of measure = total number of beats (w.r.t which note gets the beat) / beats per measure
const totalMeasures = (totalBeats) / (beatsPerMeasure[0] * beatsPerMeasure[1]);
//convert any melody/chord/drum loop to a regular track
// done by repeatedly appending the array to itself
for (let i = 0; i < tracks.length; i++) {
let currTrack = tracks[i];
//check if the current track is a loop
if (currTrack[0][0] === "loop-melody" || currTrack[0][0] === "loop-chords" || currTrack[0][0] === "loop-drums") {
let beatsInLoop = 0;
for (let j = 1; j < currTrack.length; j++) {
beatsInLoop += parseFloat(currTrack[j][1]);
}
let loopCount = parseInt(totalBeats / beatsInLoop);
//appending the track to itself
//we don't repeat the header
let header = currTrack[0];
let newTrack = multiplyArray(currTrack.slice(1), loopCount);
newTrack.unshift(header)
if (header[0] === "loop-chords") {
newTrack[0][0] = "chords";
} else {
newTrack[0][0] = "melody";
}
//push the multiplied track to the tracks list
//and remove the original loop
tracks.push(newTrack)
tracks.splice(i,1)
i--;
}
}
for (let i = 0; i < tracks.length; i++) {
let currTrack = tracks[i];
//find which elements of the track list are embedded chords
if (currTrack[0][0] === "chords") {
let chordInstrument = currTrack[0][1];
let maxChordLen = 0;
for (let j = 1; j < currTrack.length; j++) {
// iterate through each chord in the track to find the largest chord (most # of notes)
maxChordLen = Math.max(maxChordLen, currTrack[j][0].length);
}
//splits the notes of chords into separate tracks
for(let k = 0; k < maxChordLen; k++) {
// the new track will have the same instrument, but be encoded as a melody line
let newTrack = [["melody", chordInstrument]];
for (let j = 1; j < currTrack.length; j++) {
let currChord = currTrack[j][0];
// if the chord is large enough, add the kth note of the chord to the melody line
//otherwise, the melody will rest for that note in the track
if (k < currChord.length) {
// kth note of the chord, keep the duration of the chord
newTrack.push([currChord[k], currTrack[j][1]]);
}else {
newTrack.push(["r", currTrack[j][1]]);
}
}
//add this new track to the overarching tracklist
tracks.push(newTrack);
}
// delete original chord track from tracks
tracks.splice(i, 1);
i--;
}
}
// Play Measures track by track
for (let i = 0; i < totalMeasures; i++) {
console.log("Playing measure " + (i + 1));
const measureResults = [];
// count for the number of beats that have passed since the last measure
// e.g. in 4/4, measure 3 will have 2*4 = 8 beats elapsed. Next measure starts
// on beat 8 (0 indexed)
let elapsedBeats = i * beatsPerMeasure[0];
//per track
for (let j = 0; j < tracks.length; j++) {
let currTrack = tracks[j];
let instrument = currTrack[0][1];
let measureIndex = 0;
let elapsedSum = 0;
// identifying where in the track array to begin the measure
// since different tracks have different array lengths, but
// the same amount of beats, they will align at each measure
// beat-wise, but have different starting indices measure-wise
for (let k = 1; k < currTrack.length; k++) {
if (elapsedSum >= elapsedBeats) {
measureIndex = k;
break;
} else {
// add the value of the kth duration
elapsedSum += parseFloat(currTrack[k][1]);
}
}
measureResults.push(new Promise((resolve, reject) => {
playTrackMeasure(currTrack, measureIndex, beatsPerMeasure, tempo, instrument).then(() => {
resolve();
}).catch((err) => {
reject(err);
})
}));
}
await Promise.all(measureResults);
}
}
playTracks(tracksList, timeSignature, tempo);
}
);
SnapExtensions.primitives.set(
'ts_playMIDI(controller, instrument)',
function (controller_name, instrument) {
var current_controller = controller_name;
var midi_instrument = instrument;
function onEnabled() {
let synth = window.WebMidi.getInputByName(current_controller);
let keyboard = synth.channels[1];
// Listener for the keyboard, prints midi note number
keyboard.addListener("noteon", e => {
window.playNote(e.note.identifier, 0.5, midi_instrument);
});
}
const playMidiController = async (controller, instrument) => {
if(controller === null || controller === "") return;
current_controller = controller;
//enables the webmidi controller, doesn't record notes
window.WebMidi.enable((err) => {
if (err) {
alert(err);
} else {
onEnabled();
}
});
}
playMidiController(controller_name, instrument);
}
);
SnapExtensions.primitives.set(
'ts_settone(id, frequency, amplitude)',
function (id, freq, ampl) {
var created = false;
if (!window.tones[id]) {
window.tones[id] = new window.Tone(id);
created = true;
}
window.tones[id].setFreq(freq);
window.tones[id].setAmpl(ampl * 100);
created && window.tones[id].turnOn();
}
);
SnapExtensions.primitives.set(
'ts_turntoneon(id, bool)',
function (id, on) {
if (!window.tones[id]) {
return;
}
if (on) {
window.tones[id].turnOn();
} else {
window.tones[id].turnOff();
}
}
);
SnapExtensions.primitives.set(
'ts_stoptones()',
function () {
const vals = Object.values(window.tones);
for (let i = 0; i < vals.length; i++) {
const currTone = vals[i];
currTone.turnOff();
}
}
);
SnapExtensions.primitives.set(
'ts_loaded()',
function () {
return window.parent.loadedTuneScope === true;
}
);

File diff suppressed because one or more lines are too long

Plik diff jest za duży Load Diff

44
sw.js
Wyświetl plik

@ -1,4 +1,4 @@
var snapVersion = '8.0.0-dev-220719',
var snapVersion = '8.0.0-dev-220720',
cacheName = 'snap-pwa',
filesToCache = [
'snap.html',
@ -109,6 +109,48 @@ var snapVersion = '8.0.0-dev-220719',
'libraries/schemeNumber.js',
'libraries/SciSnapExtensions.js',
'libraries/SciSnap!2Blocks.xml',
'libraries/TuneScope.xml',
// TuneScope dependencies
'libraries/TuneScope/TuneScope.js',
'libraries/TuneScope/TS_init.js',
'libraries/TuneScope/webmidi.iife.js',
'libraries/TuneScope/WebAudioFontPlayer.js',
// TuneScope instruments
'libraries/TuneScope/12849_21_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/12848_21_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/12847_21_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/12846_0_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/12842_0_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/12835_21_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/12840_6_JCLive_sf2_file.js',
'libraries/TuneScope/12869_6_JCLive_sf2_file.js',
'libraries/TuneScope/0580_GeneralUserGS_sf2_file.js',
'libraries/TuneScope/0560_GeneralUserGS_sf2_file.js',
'libraries/TuneScope/0680_JCLive_sf2_file.js',
'libraries/TuneScope/0121_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/1070_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/0460_GeneralUserGS_sf2_file.js',
'libraries/TuneScope/0600_GeneralUserGS_sf2_file.js',
'libraries/TuneScope/0730_JCLive_sf2_file.js',
'libraries/TuneScope/0710_Chaos_sf2_file.js',
'libraries/TuneScope/0420_JCLive_sf2_file.js',
'libraries/TuneScope/0400_JCLive_sf2_file.js',
'libraries/TuneScope/0700_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/1040_Aspirin_sf2_file.js',
'libraries/TuneScope/0770_SBLive_sf2.js',
'libraries/TuneScope/0650_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/1050_FluidR3_GM_sf2_file.js',
'libraries/TuneScope/0180_Chaos_sf2_file.js',
'libraries/TuneScope/0020_JCLive_sf2_file.js',
'libraries/TuneScope/0260_JCLive_sf2_file.js',
'libraries/TuneScope/0241_JCLive_sf2_file.js',
'libraries/TuneScope/0350_JCLive_sf2_file.js',
'libraries/TuneScope/0320_GeneralUserGS_sf2_file.js',
'libraries/TuneScope/0230_Aspirin_sf2_file.js',
'libraries/serial_module.xml',
'libraries/signada.js',
'libraries/signada.xml',