diff --git a/Program Files/Explorer/Start/exec.html b/Program Files/Explorer/Start/exec.html
index 44adfb6..469a008 100644
--- a/Program Files/Explorer/Start/exec.html
+++ b/Program Files/Explorer/Start/exec.html
@@ -1,17 +1,12 @@
-
@@ -39,30 +33,30 @@
-
+
-
-
Soft Office Excel 2113
-
Optisocubes
-
Paint
-
Notepad
-
Don't Tag Me
-
Simple Cookieclicker
-
All Programs
+
+
Soft Office Excel 2113
+
Optisocubes
+
Paint
+
Notepad
+
Don't Tag Me
+
Simple Cookieclicker
+
All Programs
-
My Documents
-
My Computer
-
My Network Places
+
My Documents
+
My Computer
+
My Network Places
-
Turn Off Computer
+
Turn Off Computer
@@ -70,19 +64,16 @@
-
Startup
-
Colors
-
Notepad
-
Soft Office Excel 2113
-
Paint
-
Don't Tag Me
-
Optisocubes
-
Simple Cookieclicker
-
Hype Chat
+
Startup
+
Colors
+
Notepad
+
Soft Office Excel 2113
+
Paint
+
Don't Tag Me
+
Optisocubes
+
Simple Cookieclicker
+
Hype Chat
-
+
diff --git a/Program Files/Explorer/Start/startmenu.css b/Program Files/Explorer/Start/startmenu.css
index 3aad9e1..5068997 100644
--- a/Program Files/Explorer/Start/startmenu.css
+++ b/Program Files/Explorer/Start/startmenu.css
@@ -1,369 +1,391 @@
:root {
- --themecolor:#222;
- --background-color:#fff;
- --color:#000;
- --color-type-2:#fff;
- --background-color-type-2:#bbccff;
- --font:Sans-serif;
-
+ --background-color: #fff;
+ --color-type-2: #fff;
+ --background-color-type-2: #bcf;
+ --font: sans-serif;
}
body {
- overflow:hidden;
- background-color:transparent;
+ overflow: hidden;
+ background-color: transparent;
+ background: transparent !important;
}
-* {
- font-family: var(--font);
- color:#000;
- color:var(--color);
-}
#startbutton {
- background-color:transparent;
- position:absolute;
- height:0;
- width:0;
- border:none;
- display:inline;
- bottom:0px;
- left:0px;
- overflow:hidden;
+ background-color: transparent;
+ position: absolute;
+ height: 0;
+ width: 0;
+ border: none;
+ display: inline;
+ bottom: 0px;
+ left: 0px;
+ overflow: hidden;
}
#onout {
- position:absolute;
- top:0;
- left:0;
- width:100%;
- height:100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
}
#start {
- position:absolute;
- bottom:35px;
- left:0px;
- display:flex;
- height:500px;
- width:350px;
- border:2px solid #222;
- border:2px solid var(--themecolor);
- border-top-right-radius:4px;
- border-top-left-radius:4px;
- overflow:hidden;
- background-color:transparent;
- color:var(--color);
+ position: absolute;
+ bottom: 35px;
+ left: 0px;
+ display: flex;
+ height: 500px;
+ width: 350px;
+ border: 2px solid #222;
+ border: 2px solid var(--themecolor);
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ overflow: hidden;
+ background-color: transparent;
}
#start #top {
- background-color:#222;
- background-color: var(--themecolor);
- top:0;
- left:0;
- position:absolute;
- width:100%;
- height:70px;
+ background-color: #222;
+ background-color: var(--themecolor);
+ top: 0;
+ left: 0;
+ position: absolute;
+ width: 100%;
+ height: 70px;
}
#start #top #usericon {
- position:absolute;
- display:inline;
- top:5px;
- left:5px;
- height:54px;
- width:54px;
- background-color:green;
- border:3px solid white;
- border-radius: 3px;
+ position: absolute;
+ display: inline;
+ top: 5px;
+ left: 5px;
+ height: 54px;
+ width: 54px;
+ background-color: #080;
+ border: 3px solid #fff;
+ border-radius: 3px;
}
#username {
- position:absolute;
- color:var(--color-type-2);
- font-size:30px;
- font-weight:normal;
- letter-spacing: 1px;
- left:75px;
- top:-10px;
+ position: absolute;
+ color: var(--color-type-2);
+ font-size: 30px;
+ font-weight: normal;
+ letter-spacing: 1px;
+ left: 75px;
+ top: -10px;
}
#start #top hr {
- position:absolute;
- border:0;
- border-bottom:2px solid white;
- left:64px;
- top:25px;
- z-index:43223;
- height:20px;
- width:200px;
+ position: absolute;
+ border: 0;
+ border-bottom: 2px solid #fff;
+ left: 64px;
+ top: 25px;
+ z-index: 43223;
+ height: 20px;
+ width: 200px;
}
#start #top #usericon img {
- position: absolute;
- margin:0;
- height:100%;
- width:100%;
- object-fit:cover;
+ position: absolute;
+ margin: 0;
+ height: 100%;
+ width: 100%;
+ object-fit: cover;
}
#start #center {
- display:flex;
- position:absolute;
- top:70px;
- width:100%;
- height:calc(100% - 70px - 5px);
+ display: flex;
+ position: absolute;
+ top: 70px;
+ width: 100%;
+ height: calc(100% - 75px);
}
#start #center #left {
- background-color:#fff;
- background-color:var(--background-color);
- color:var(--color); display:flex;
- flex-direction:column;
- position:relative;
- height:calc(100% - 40px);
- width:55%;
- overflow:hidden;
- flex-wrap:wrap;
- align-content: flex-start;
- padding-bottom:40px;
+ background-color: #fff;
+ color: #000;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ height: calc(100% - 40px);
+ width: 55%;
+ overflow: hidden;
+ flex-wrap: wrap;
+ align-content: flex-start;
+ padding-bottom: 40px;
}
#start #center #left div {
- position:relative;
- display:flex;
- height:35px;
- width:100%;
- overflow:hidden;
- align-items: center;
+ position: relative;
+ display: flex;
+ height: 35px;
+ width: 100%;
+ overflow: hidden;
+ align-items: center;
}
#start #center #left div img {
- margin:2px;
- height:31px;
- width:31px;
- display:inline;
+ margin: 2px;
+ height: 31px;
+ width: 31px;
+ display: inline;
}
#start #center #left div p {
- position:relative;
- display:inline;
- font-size:.9em;
- left:3px;
- white-space:nowrap;
- width:calc(100% - 41px);
- overflow:hidden;
- text-overflow: ellipsis;
- bottom:1px;
- color:var(--color);
+ position: relative;
+ display: inline;
+ font-size: .9em;
+ left: 3px;
+ white-space: nowrap;
+ width: calc(100% - 41px);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ bottom: 1px;
+ color: #000;
+}
+
+#start #center #left div:hover, #start #center #right div:hover {
+ background-color: var(--hovercolor);
+ cursor:pointer;
}
-#start #center #left div:hover {
- background-color:rgba(0,40,255,0.4);
+#alleprogramme div:hover {
+ background-color: var(--hovercolornontransparent);
+ cursor:pointer;
+
}
#start #center #left #allprograms {
- border-top:1px solid orange;
- position:absolute;
- bottom:0;
+ border-top: 1px solid #f70;
+ position: absolute;
+ bottom: 0;
}
#start #center #right {
- position:relative;
- height:100%;
- width:45%;
- display:flex;
- flex-direction:column;
- position:relative;
- overflow:hidden;
- flex-wrap:wrap;
- align-content: flex-start;
- background-color:#bbccff;
- background-color:var(--background-color-type-2);
- color:var(--color);
+ position: relative;
+ height: 100%;
+ width: 45%;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ overflow: hidden;
+ flex-wrap: wrap;
+ align-content: flex-start;
+ background: #bcf;
+ background: var(--background-color-type-2);
+ color: var(--color);
}
#start #center #right div {
- position:relative;
- display:flex;
- height:30px;
- width:100%;
- overflow:hidden;
- align-items: center;
+ position: relative;
+ display: flex;
+ height: 30px;
+ width: 100%;
+ overflow: hidden;
+ align-items: center;
}
#start #center #right div img {
- margin:5px;
- height:24px;
- width:24px;
- display:inline;
+ margin: 5px;
+ height: 24px;
+ width: 24px;
+ display: inline;
}
#start #center #right div p {
- position:relative;
- display:inline;
- font-size:.8em;
- left:1px;
- white-space:nowrap;
- width:calc(100% - 41px);
- overflow:hidden;
- text-overflow: ellipsis;
- bottom:1px;
+ position: relative;
+ display: inline;
+ font-size: .8em;
+ left: 1px;
+ white-space: nowrap;
+ width: calc(100% - 41px);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ bottom: 1px;
}
-#start #center #right div:hover {
- background-color:rgba(0,40,255,0.4);
-}
#start #bottom {
- display:flex;
- justify-content: flex-end;
- background-color:#222;
- background-color:var(--themecolor) !important;
- bottom:0;
- left:0;
- position:absolute;
- width:100%;
- height:5px;
- padding-top:2px;
+ display: flex;
+ justify-content: flex-end;
+ background: #222;
+ background: var(--themecolor);
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ width: 100%;
+ height: 5px;
+ padding-top: 2px;
}
.bottomright {
- position:absolute;
- bottom:7px;
- right:0;
- overflow:hidden;
- margin:0;
- padding:0;
- width:44%;
- height:33px;
- background-color:var(--themecolor);
- border-top-left-radius:5px;
-
+ position: absolute;
+ bottom: 7px;
+ right: 0;
+ overflow: hidden;
+ margin: 0;
+ padding: 0;
+ width: 44%;
+ height: 33px;
+ background-color: var(--themecolor);
+ border-top-left-radius: 5px;
}
.bottomright div * {
- position:relative;
- display:inline-block;
- margin:0;
-
+ position: relative;
+ display: inline-block;
+ margin: 0;
}
.bottomright div {
- margin:0;
- padding:0 3px 3px 0;
- cursor:pointer;
+ margin: 0;
+ padding: 0 3px 3px 0;
+ cursor: pointer;
}
.bottomright div:hover {
- padding:1px 2px 2px 1px;
+ padding: 1px 2px 2px 1px;
}
.bottomright p {
- font-size:12px;
- left:10px;
- top:-3px;
- line-height:25px;
- color:#fff;
+ font-size: 12px;
+ left: 10px;
+ top: -3px;
+ line-height: 25px;
+ color: #fff;
}
.bottomright img {
- left:5px;
- top:5px;
- border:1.5px solid white;
- border-radius:2px;
- box-sizing: border-box;
- height:25px !important;
+ left: 5px;
+ top: 5px;
+ border: 1.5px solid #fff;
+ border-radius: 2px;
+ box-sizing: border-box;
+ height: 25px !important;
}
#alleprogrammeout {
- position:absolute;
- top:0;
- left:0;
- width:100%;
- height:100%;
- display:none;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: none;
}
#alleprogramme {
- opacity:0;
- transition:1s;
- position:absolute;
- bottom:7px;
- left:180px;
- max-height:97vh;
- max-width:80vw;
- width:0;
- overflow:hidden;
- display:flex;
- flex-direction:column;
- flex-wrap:wrap;
- align-content: flex-start;
- transform:rotate(100deg);
+ opacity: 0;
+ transition: 1s;
+ position: absolute;
+ bottom: 7px;
+ left: 180px;
+ max-height: 97vh;
+ max-width: 80vw;
+ width: 0;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ flex-wrap: wrap;
+ align-content: flex-start;
+ transform: rotate(100deg);
}
-
#alleprogramme div {
- position:relative;
- display:flex;
- height:20px;
- width:230px;
- overflow:hidden;
- align-items: center;
- border-right:1px solid black;
- max-width:28vw;
- background-color:#fff;
- background-color:var(--background-color);
+ position: relative;
+ display: flex;
+ height: 20px;
+ width: 230px;
+ overflow: hidden;
+ align-items: center;
+ border-right: 1px solid #000;
+ max-width: 28vw;
+ background-color: #fff;
+ background-color: var(--background-color);
}
-#alleprogramme div:hover {
- background-color:rgb(0,120,220);
- cursor:pointer;
-}
#alleprogramme div img {
- margin:2px;
- height:16px;
- width:16px;
- display:inline;
+ margin: 2px;
+ height: 16px;
+ width: 16px;
+ display: inline;
}
#alleprogramme div p {
- position:relative;
- display:inline;
- font-size:.7em;
- left:5px;
- white-space:nowrap;
- width:calc(100% - 41px);
- overflow:hidden;
- text-overflow: ellipsis;
- padding-right:35px;
+ position: relative;
+ display: inline;
+ font-size: .7em;
+ left: 5px;
+ white-space: nowrap;
+ width: calc(100% - 41px);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding-right: 35px;
}
@media screen and (max-width:500px) {
- #start {
- width:calc(100% - 4px);
- height:calc(100% - 39px);
- border-radius:0;
- }
- #alleprogramme {
- left:0;
- bottom:80px;
- transform:rotate(0deg) !important;
- }
- #alleprogramme div {
- width:50vw;
- max-width:none;
- height:30px;
- border:.5px solid black;
- }
-
-
+ #start {
+ width: calc(100% - 4px);
+ height: calc(100% - 39px);
+ border-radius: 0;
+ }
+
+ #alleprogramme {
+ left: 0;
+ bottom: 80px;
+ transform: rotate(0deg) !important;
+ }
+
+ #alleprogramme div {
+ width: 50vw;
+ max-width: none;
+ height: 30px;
+ border: .5px solid #000;
+ }
}
@media screen and (max-height:550px) {
- #start {
- height:calc(100% - 38px);
- }
+ #start {
+ height: calc(100% - 38px);
+ }
}
+
+@media (prefers-color-scheme:dark) {
+ #start #center #left {
+ background-color: var(--black);
+ }
+
+
+
+ #start #center #left div p {
+ color: #fff;
+ }
+
+
+ #start #center #right {
+ background: var(--black2);
+ color: #fff;
+ }
+
+ #start #center #right div {
+ position: relative;
+ display: flex;
+ height: 30px;
+ width: 100%;
+ overflow: hidden;
+ align-items: center;
+ }
+
+
+ #alleprogramme div {
+ background-color: #000;
+ color: #fff;
+ }
+}
\ No newline at end of file
diff --git a/Program Files/Explorer/Start/startmenu.min.css b/Program Files/Explorer/Start/startmenu.min.css
deleted file mode 100644
index 7e285c3..0000000
--- a/Program Files/Explorer/Start/startmenu.min.css
+++ /dev/null
@@ -1 +0,0 @@
-:root{--themecolor:#222;--background-color:#fff;--color:#000;--color-type-2:#fff;--background-color-type-2:#bcf;--font:Sans-serif}#startbutton,body{overflow:hidden;background-color:transparent}*{font-family:var(--font);color:#000;color:var(--color)}#startbutton{height:0;width:0;border:none;display:inline;bottom:0}#onout,#start,#startbutton{position:absolute;left:0}#onout{top:0;width:100%;height:100%}#start{bottom:35px;display:flex;height:500px;width:350px;border:2px solid #222;border:2px solid var(--themecolor);border-top-right-radius:4px;border-top-left-radius:4px;overflow:hidden;background-color:transparent;color:var(--color)}#start #center,#start #top,#start #top #usericon img,#start #top hr{position:absolute;width:100%}#start #top{background-color:#222;background-color:var(--themecolor);left:0;height:70px;top:0}#start #top #usericon{position:absolute;display:inline;top:5px;left:5px;height:54px;width:54px;background-color:green;border:3px solid #fff;border-radius:3px}#username{position:absolute;color:var(--color-type-2);font-size:30px;font-weight:400;letter-spacing:1px;left:75px;top:-10px}#start #top hr{border:0;border-bottom:2px solid #fff;left:64px;top:25px;z-index:43223;height:20px;width:200px}#start #top #usericon img{margin:0;height:100%;object-fit:cover}#start #center{display:flex;top:70px;height:calc(100% - 70px - 5px)}#start #center #left,#start #center #right{display:flex;flex-direction:column;position:relative;overflow:hidden;flex-wrap:wrap;align-content:flex-start;color:var(--color)}#start #center #left{height:calc(100% - 40px);padding-bottom:40px;background-color:#fff;background-color:var(--background-color);width:55%}#alleprogramme div,#start #center #left div,#start #center #right div{position:relative;display:flex;height:35px;width:100%;overflow:hidden;align-items:center}#alleprogramme div img,#start #center #left div img{margin:2px;height:31px;width:31px;display:inline}#start #center #left div p{font-size:.9em;left:3px;bottom:1px;color:var(--color)}#start #center #left div:hover,#start #center #right div:hover{background-color:rgba(0,40,255,.4)}#start #center #left #allprograms{border-top:1px solid orange;position:absolute;bottom:0}#start #center #right{height:100%;width:45%;background-color:#bcf;background-color:var(--background-color-type-2)}#alleprogramme div,#start #center #right div{height:30px}#start #center #right div img{margin:5px;height:24px;width:24px;display:inline}#alleprogramme div p,#start #center #left div p,#start #center #right div p{position:relative;display:inline;white-space:nowrap;width:calc(100% - 41px);overflow:hidden;text-overflow:ellipsis}#start #center #right div p{bottom:1px;font-size:.8em;left:1px}#alleprogrammeout,#start #bottom{position:absolute;left:0;width:100%}#start #bottom{display:flex;justify-content:flex-end;background-color:#222;background-color:var(--themecolor)!important;bottom:0;padding-top:2px;height:5px}#alleprogramme,.bottomright{position:absolute;bottom:7px;overflow:hidden}.bottomright{right:0;margin:0;padding:0;height:33px;background-color:var(--themecolor);border-top-left-radius:5px;width:44%}.bottomright div *{position:relative;display:inline-block;margin:0}.bottomright div{margin:0;padding:0 3px 3px 0;cursor:pointer}.bottomright div:hover{padding:1px 2px 2px 1px}.bottomright p{font-size:12px;left:10px;top:-3px;line-height:25px;color:#fff}.bottomright img{left:5px;top:5px;border:1.5px solid #fff;border-radius:2px;box-sizing:border-box;height:25px!important}#alleprogrammeout{top:0;height:100%;display:none}#alleprogramme{opacity:0;transition:1s;left:180px;max-height:97vh;max-width:80vw;width:0;display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-start;transform:rotate(100deg)}#alleprogramme div{height:20px;width:230px;border-right:1px solid #000;max-width:28vw;background-color:#fff;background-color:var(--background-color)}#alleprogramme div:hover{background-color:#0078dc;cursor:pointer}#alleprogramme div img{height:16px;width:16px}#alleprogramme div p{font-size:.7em;left:5px;padding-right:35px}@media screen and (max-width:500px){#start{width:calc(100% - 4px);height:calc(100% - 39px);border-radius:0}#alleprogramme{left:0;bottom:80px;transform:rotate(0deg)!important}#alleprogramme div{width:50vw;max-width:none;height:30px;border:.5px solid #000}}@media screen and (max-height:550px){#start{height:calc(100% - 38px)}}
\ No newline at end of file
diff --git a/Program Files/Explorer/inner/exec.html b/Program Files/Explorer/inner/exec.html
index 2bbe383..fb883ea 100644
--- a/Program Files/Explorer/inner/exec.html
+++ b/Program Files/Explorer/inner/exec.html
@@ -4,6 +4,7 @@
+
@@ -24,16 +25,16 @@
ߜ
-
+
-
+
Search
-
+
Folder
-
+
ߜ
@@ -41,70 +42,12 @@
-
-
-
-
-
+
diff --git a/Program Files/Explorer/inner/explorerstyle.css b/Program Files/Explorer/inner/explorerstyle.css
index 98aef26..aebd77f 100644
--- a/Program Files/Explorer/inner/explorerstyle.css
+++ b/Program Files/Explorer/inner/explorerstyle.css
@@ -1,422 +1,298 @@
:root {
- font:sans-serif;
+ font: sans-serif;
}
body {
- margin:0px;
- background-color:#eeeeee;
- overflow:hidden;
+ margin: 0px;
+ overflow: hidden;
}
* {
- transition:.28s;
- font-family:var(--font);
- font-size:.99em;
+ font-family: var(--font);
+ font-size: .99em;
}
#altbar {
- position:relative;
- background-color:#ddddbb;
- height:18px;
- overflow:hidden;
- width:100%;
- border-bottom:1px solid #999999;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
+ position: relative;
+ background: #ddb;
+ height: 18px;
+ overflow: hidden;
+ width: 100%;
+ border-bottom: 1px solid #999;
user-select: none;
}
#altbar a {
- text-decoration:none;
- position:relative;
- display:inline;
- left:2px;
- top:-1px;
- color:black;
- padding:2px 5px;
- margin:-1px;
- border-width:0;
+ text-decoration: none;
+ position: relative;
+ display: inline;
+ left: 2px;
+ top: -1px;
+ color: #000;
+ padding: 2px 5px;
+ margin: -1px;
+ border-width: 0;
}
#altbar a:hover {
- background-color:#bbbb99;
+ background-color: #bb9;
}
#altbar img {
- display:inline;
- position:absolute;
- right:0px;
- top:0px;
- background-color:white;
- padding-left:3px;
- padding-right:3px;
- height:calc(100% - 2px);
- border:2px solid #ccccaa;
+ display: inline;
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ background-color: #fff;
+ padding-left: 3px;
+ padding-right: 3px;
+ height: 100%;
}
#headbar1 {
- position:relative;
- top:0px;
- background-color:#ddddbb;
- height:auto;
- overflow:hidden;
- width:100%;
- border-bottom:1px solid #999999;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
+ position: relative;
+ top: 0px;
+ background-color: #ddb;
+ height: auto;
+ overflow: hidden;
+ width: 100%;
+ border-bottom: 1px solid #999;
user-select: none;
}
#headbar1 * {
- display:none !important;
+ display: none !important;
}
-#headbar1 .works, #headbar1 .works *{
- display:inline-block !important;
+#headbar1 .works,
+#headbar1 .works * {
+ display: inline-block !important;
}
#headbar1 a {
- height:40px;
- border-style:none;
- border-radius:6px;
- display:inline-flex;
- width:auto;
- text-decoration:none;
- color:black;
- padding:5px 10px;
+ height: 40px;
+ border-style: none;
+ border-radius: 6px;
+ display: inline-flex;
+ width: auto;
+ text-decoration: none;
+ color: #000;
+ padding: 5px 10px;
}
#headbar1 a p {
- display:inline;
- position:relative;
- padding:0px 2px;
- margin:auto;
- color:black;
- left:5px;
- font-size:20px;
+ display: inline;
+ position: relative;
+ padding: 0px 2px;
+ margin: auto;
+ color: #000;
+ left: 5px;
+ font-size: 20px;
}
#headbar1 img {
- margin:0;
- padding:0;
- height:40px;
- display:inline;
+ margin: 0;
+ padding: 0;
+ height: 40px;
+ display: inline;
}
#headbar1 a:hover {
- background-color:#bbbb99;
+ background-color: #bb9;
}
#headbar1 #slice {
- display:inline-flex;
- position:absolute;
- margin:auto;
- padding:0;
- height:50px;
- border:1px solid #999999;
+ display: inline-flex;
+ position: absolute;
+ margin: auto;
+ padding: 0;
+ height: 50px;
+ border: 1px solid #999;
}
#headbar2 {
- display:inline-flex;
- justify-content:space-between;
- position:relative;
- background-color:#ddddbb;
- height:20px;
- overflow:visible;
- width:100%;
- border-bottom:1px solid #999999;
+ display: inline-flex;
+ justify-content: space-between;
+ position: relative;
+ background-color: #ddb;
+ height: 22px;
+ overflow: visible;
+ width: 100%;
+ border-bottom: 1px solid #999;
}
#headbar2 div {
- margin:0 2px;
- display:inline;
- position:relative;
- height:100%;
+ margin: 0 2px;
+ display: inline;
+ position: relative;
+ height: 98%;
}
#headbar2 img {
- display:inline;
- position:relative;
- height:100%;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
+ display: inline;
+ position: relative;
+ height: 100%;
user-select: none;
}
-#headbar2 a, #headbar2 p {
- position:relative;
- display:inline;
- white-space:nowrap;
+#headbar2 a,
+#headbar2 p {
+ position: relative;
+ display: inline;
+ white-space: nowrap;
text-decoration: none;
- color:black;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
+ color: black;
user-select: none;
}
-#headbar2 #input {
- margin:0;
- padding:0;
- border:none;
- border-left: 1px solid #999999;
- border-right: 1px solid #999999;
-}
-
#headbar2 input {
- margin:0;
- padding:0;
- height:100%;
- width:100%;
- border:none;
+ background: transparent;
+ border: none;
+ border-left: 1px solid #999;
+ border-right: 1px solid #999;
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ width: 100%;
+ box-sizing: border-box;
+ line-height: 1;
}
#headbar2 #input img {
- position:absolute;
- right:1px;
- top:0px;
- margin:0;
- padding:0;
+ position: absolute;
+ right: 1px;
+ top: 0px;
+ margin: 0;
+ padding: 0;
}
#headbar2 #gotoa p {
- top:-4px;
- position:relative;
- margin:2px;
-}
-
-#content_sidebar {
- position:absolute;
- overflow:auto;
- background-color:#ababec;
- width:320px;
- height:100%;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-#content_sidebar div {
- background-color:#cdcdfd;
- overflow:hidden;
- border-top-left-radius:3px;
- border-top-right-radius:3px;
-}
-
-#content_sidebar div #content_sidebar_topbar {
- height:auto;
- background-color:#eeeeff;
- padding-left:8px;
- padding-top:2px;
-}
-
-#content_sidebar div #content_sidebar_content {
- padding:10px;
-}
-
-#content_sidebar div #content_sidebar_content img {
- height:23px;
-}
-
-#content_sidebar div #content_sidebar_content p {
- text-decoration:none;
- position:relative;
- top:-4px;
- margin-left:6px;
-}
-
-#content_sidebar div p {
- text-overflow:ellipsis;
- max-width:85%;
- overflow:hidden;
- white-space:nowrap;
- display:inline-block;
- margin:-1px;
-}
-
-#content_sidebar div #content_sidebar_topbar p {
- margin:3px;
- color:blue;
- font-weight:bolder;
-}
-
-#content_sidebar div #content_sidebar_topbar img:first-of-type {
- display:inline-block;
- margin:2px 6px;
- height:20px;
- position:relative;
- float:right;
-}
-#content_sidebar_1 {
- position:relative;
- top:20px;
- width:84%;
- margin:auto;
- height:auto;
- background-color:white;
-}
-
-#content_sidebar_2 {
- position:relative;
- width:84%;
- margin:40px auto;
- height:auto;
- background-color:white;
-}
-
-#content_sidebar_3 {
- position:relative;
- top:-20px;
- width:84%;
- margin:auto;
- height:auto;
- background-color:white;
-}
-
-#content_sidebar #content_sidebar_3 #content_sidebar_content {
- padding:0;
-}
-
-#content_sidebar #content_sidebar_3 #content_sidebar_content img {
- display:block;
- margin-left:auto;
- margin-right:auto;
- width:80%;
- height:auto;
- margin-bottom:20px;
- margin-top:20px;
+ top: -4px;
+ position: relative;
+ margin: 2px;
}
#content_files {
- padding:15px;
- position:absolute;
- overflow:scroll;
- width:calc(100% - 350px);
- right:0px;
- height:100%;
+ padding: 15px;
+ position: relative;
+ overflow: scroll;
+ overflow-x: hidden;
+ width: 100%;
+ left: 0;
+ height: calc(100vh - 90px);
+ box-sizing: border-box;
}
#content_files button {
- background-color:transparent;
- border:0;
- position:relative;
- margin:0px;
- overflow:hidden;
- width:64px;
- height:100px;
- display:inline-flex;
- justify-content: center;
- z-index:10;
- transition:0s;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
+ background-color: transparent;
+ border: 0;
+ position: relative;
+ margin: 0px;
+ overflow: hidden;
+ width: 64px;
+ height: 100px;
+ display: inline-flex;
+ justify-content: center;
+ z-index: 10;
user-select: none;
}
#content_files img {
- position:absolute;
- top:-2px;
- margin-top:2px;
- display:inline-block;
- height:64px;
+ position: absolute;
+ top: -2px;
+ margin-top: 2px;
+ display: inline-block;
+ height: 64px;
pointer-events: none;
}
#content_files p {
- font-size:0.85em;
+ font-size: .85em;
word-wrap: break-word;
- position:absolute;
- display:inline;
- left:0px;
- top:55px;
- width:100%;
+ position: absolute;
+ display: inline;
+ left: 0px;
+ top: 55px;
+ width: 100%;
text-align: center;
- transition:0s;
- padding-bottom:2px;
+ padding-bottom: 2px;
}
#content_files button:hover {
- background-color:#9999ee;
- overflow:visible;
- z-index:20;
- border-radius:1px;
-}
-
-#content_files button:hover p {
- background-color:#9999ee;
- border-radius:1px;
+ overflow: visible;
+ z-index: 20;
+ border-radius: 1px;
+ background-color: var(--hovercolor);
}
-@media screen and (max-width:650px) {
+
+@media (max-width:610px) {
#headbar1 {
- height:30px;
+ height: 30px;
}
+
#headbar1 a {
- height:20px;
+ height: 20px;
}
+
#headbar1 img {
- height:20px;
- display:inline;
+ height: 20px;
+ display: inline;
}
+
#headbar1 a p {
- color:black;
- left:5px;
- font-size:12px;
+ color: #000;
+ left: 5px;
+ font-size: 12px;
}
+
#headbar1 #slice {
- height:25px;
- border:1px solid #999999;
+ height: 25px;
+ border: 1px solid #999;
}
+
#headbar2 #go p {
- font-size:0;
+ font-size: 0;
+ }
+
+ p,
+ a {
+ font-size: .8em;
}
+
+ #content_files {
+ height: calc(100vh - 70px);
+ }
+
}
-@media screen and (max-width:610px) {
- p,a {
- font-size:.8em;
+@media (prefers-color-scheme:dark) {
+
+ #altbar {
+ background: var(--themecolor);
+ border: none;
+ }
+
+ #altbar a {
+ color: #fff;
}
- #content_sidebar{
- border-top:2px solid black;
- display:none;
- position:absolute;
- bottom:0px;
- width:100vw;
- height:200px;
- overflow:scroll;
+ #headbar1 {
+ background: var(--black2);
+ border: none;
}
- #content_sidebar div {
- display:block;
- width:100%;
+
+ #headbar2 {
+ background: var(--black3);
+ border: none;
}
- #content_files {
- display:block;
- position:absolute;
- overflow:auto;
- margin:0;
- padding:2px;
- width:100%;
- height:calc(100% - 77px);
- right:0px;
- z-index:99;
+
+ #headbar2 p {
+ color: #fff;
}
-}
+
+ #altbar img {
+ background-color: var(--themecolor);
+ }
+}
\ No newline at end of file
diff --git a/Program Files/Explorer/inner/innerexplorer.js b/Program Files/Explorer/inner/innerexplorer.js
index 4195265..63fc9db 100644
--- a/Program Files/Explorer/inner/innerexplorer.js
+++ b/Program Files/Explorer/inner/innerexplorer.js
@@ -1,5 +1,3 @@
-"use strict";
-
function explorerdo(nowpath) {
var currentpath;
var parentpath;
@@ -32,14 +30,14 @@ function explorerdo(nowpath) {
while (fscontentsnr < fscontents.length) {
var mycurrentfile = fscontents[fscontentsnr];
if (newparentpath == " /" && mycurrentfile.length == 3 && mycurrentfile.indexOf(":/") == 1) {
- contentfiles.innerHTML = contentfiles.innerHTML + "
";
+ contentfiles.innerHTML = contentfiles.innerHTML + "
";
} else {
//window.alert(mycurrentfile + ";" + mycurrentfile.indexOf(currentpath));
if ((mycurrentfile.match(/\//g) || []).length == (newparentpath.match(/\//g) || []).length && mycurrentfile.length > 3 && mycurrentfile.indexOf(newparentpath) > -1) {
if (mycurrentfile.indexOf(".") == mycurrentfile.length - 4) {
- contentfiles.innerHTML = contentfiles.innerHTML + "
";
+ contentfiles.innerHTML = contentfiles.innerHTML + "
";
} else {
- contentfiles.innerHTML = contentfiles.innerHTML + "
";
+ contentfiles.innerHTML = contentfiles.innerHTML + "
";
}
}
}
@@ -79,5 +77,3 @@ function explorerdo(nowpath) {
}
explorerdo(" ");
-
-document.documentElement.style.setProperty("--font", parent.setting.font)
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/1/app.js b/Program Files/Midi Media Player/1/app.js
deleted file mode 100644
index fef72e5..0000000
--- a/Program Files/Midi Media Player/1/app.js
+++ /dev/null
@@ -1,81 +0,0 @@
-var MidiPlayer = MidiPlayer;
-var loadSong, loadDataUri, Player;
-var AudioContext = window.AudioContext || window.webkitAudioContext || false;
-var ac = new AudioContext || new webkitAudioContext;
-
-var changeTempo = function(tempo) {
- Player.tempo = tempo;
-}
-
-var play = function() {
- Player.play();
-}
-
-var pause = function() {
- Player.pause();
-}
-
-var stop = function() {
- Player.stop();
-}
-
-var buildTracksHtml = function() {
- Player.tracks.forEach(function(item, index) {
- var trackDiv = document.createElement('div');
- trackDiv.id = 'track-' + (index + 1);
- var h5 = document.createElement('h5');
- h5.innerHTML = 'Track ' + (index + 1);
- var code = document.createElement('code');
- trackDiv.appendChild(h5);
- trackDiv.appendChild(code);
- eventsDiv.appendChild(trackDiv);
- });
-}
-
-Soundfont.instrument(ac, 'soundfont.js').then(function(instrument) {
-
- loadSong = function(file) {
- var file = document.querySelector('input[type=file]').files[0];
- console.log(file);
- var reader = new FileReader();
- if (file) reader.readAsArrayBuffer(file);
-
-
- reader.addEventListener("load", function() {
- Player = new MidiPlayer.Player(function(event) {
- if (event.name == 'Note on') {
- instrument.play(event.noteName, ac.currentTime, {
- gain: event.velocity / 100
- });
- }
-
- });
-
- Player.loadArrayBuffer(reader.result);
-
-
- //buildTracksHtml();
- play();
- }, false);
- }
-
- loadDataUri = function(dataUri) {
- Player = new MidiPlayer.Player(function(event) {
- if (event.name == 'Note on' && event.velocity > 0) {
- instrument.play(event.noteName, ac.currentTime, {
- gain: event.velocity / 100
- });
- //document.querySelector('#track-' + event.track + ' code').innerHTML = JSON.stringify(event);
- //console.log(event);
- }
- });
-
- Player.loadDataUri(dataUri);
-
- }
-
-
-
-
-
-});
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/1/app.min.js b/Program Files/Midi Media Player/1/app.min.js
deleted file mode 100644
index d57bf7d..0000000
--- a/Program Files/Midi Media Player/1/app.min.js
+++ /dev/null
@@ -1 +0,0 @@
-var MidiPlayer=MidiPlayer,loadSong,loadDataUri,Player,AudioContext=window.AudioContext||window.webkitAudioContext||!1,ac=new AudioContext||new webkitAudioContext,changeTempo=function(e){Player.tempo=e},play=function(){Player.play()},pause=function(){Player.pause()},stop=function(){Player.stop()},buildTracksHtml=function(){Player.tracks.forEach(function(e,n){var a=document.createElement("div");a.id="track-"+(n+1);var t=document.createElement("h5");t.innerHTML="Track "+(n+1);var o=document.createElement("code");a.appendChild(t),a.appendChild(o),eventsDiv.appendChild(a)})};Soundfont.instrument(ac,"soundfont.js").then(function(e){loadSong=function(n){var n=document.querySelector("input[type=file]").files[0];console.log(n);var a=new FileReader;n&&a.readAsArrayBuffer(n),a.addEventListener("load",function(){Player=new MidiPlayer.Player(function(n){"Note on"==n.name&&e.play(n.noteName,ac.currentTime,{gain:n.velocity/100})}),Player.loadArrayBuffer(a.result),play()},!1)},loadDataUri=function(n){Player=new MidiPlayer.Player(function(n){"Note on"==n.name&&n.velocity>0&&e.play(n.noteName,ac.currentTime,{gain:n.velocity/100})}),Player.loadDataUri(n)}});
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/1/exec.html b/Program Files/Midi Media Player/1/exec.html
deleted file mode 100644
index da2045f..0000000
--- a/Program Files/Midi Media Player/1/exec.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Program Files/Midi Media Player/1/midiplayer.js b/Program Files/Midi Media Player/1/midiplayer.js
deleted file mode 100644
index 4d1a7f4..0000000
--- a/Program Files/Midi Media Player/1/midiplayer.js
+++ /dev/null
@@ -1,1313 +0,0 @@
-! function(t) {
- if ("object" == typeof exports && "undefined" != typeof module) module.exports = t();
- else if ("function" == typeof define && define.amd) define([], t);
- else {
- ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).MidiPlayer = t()
- }
-}(function() {
- return function() {
- return function t(e, r, n) {
- function i(a, o) {
- if (!r[a]) {
- if (!e[a]) {
- var u = "function" == typeof require && require;
- if (!o && u) return u(a, !0);
- if (s) return s(a, !0);
- var h = new Error("Cannot find module '" + a + "'");
- throw h.code = "MODULE_NOT_FOUND", h
- }
- var f = r[a] = {
- exports: {}
- };
- e[a][0].call(f.exports, function(t) {
- var r = e[a][1][t];
- return i(r || t)
- }, f, f.exports, t, e, r, n)
- }
- return r[a].exports
- }
- for (var s = "function" == typeof require && require, a = 0; a < n.length; a++) i(n[a]);
- return i
- }
- }()({
- 1: [function(t, e, r) {
- "use strict";
- r.byteLength = function(t) {
- return 3 * t.length / 4 - h(t)
- }, r.toByteArray = function(t) {
- var e, r, n, a, o, u = t.length;
- a = h(t), o = new s(3 * u / 4 - a), r = a > 0 ? u - 4 : u;
- var f = 0;
- for (e = 0; e < r; e += 4) n = i[t.charCodeAt(e)] << 18 | i[t.charCodeAt(e + 1)] << 12 | i[t.charCodeAt(e + 2)] << 6 | i[t.charCodeAt(e + 3)], o[f++] = n >> 16 & 255, o[f++] = n >> 8 & 255, o[f++] = 255 & n;
- 2 === a ? (n = i[t.charCodeAt(e)] << 2 | i[t.charCodeAt(e + 1)] >> 4, o[f++] = 255 & n) : 1 === a && (n = i[t.charCodeAt(e)] << 10 | i[t.charCodeAt(e + 1)] << 4 | i[t.charCodeAt(e + 2)] >> 2, o[f++] = n >> 8 & 255, o[f++] = 255 & n);
- return o
- }, r.fromByteArray = function(t) {
- for (var e, r = t.length, i = r % 3, s = "", a = [], o = 16383, u = 0, h = r - i; u < h; u += o) a.push(f(t, u, u + o > h ? h : u + o));
- 1 === i ? (e = t[r - 1], s += n[e >> 2], s += n[e << 4 & 63], s += "==") : 2 === i && (e = (t[r - 2] << 8) + t[r - 1], s += n[e >> 10], s += n[e >> 4 & 63], s += n[e << 2 & 63], s += "=");
- return a.push(s), a.join("")
- };
- for (var n = [], i = [], s = "undefined" != typeof Uint8Array ? Uint8Array : Array, a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", o = 0, u = a.length; o < u; ++o) n[o] = a[o], i[a.charCodeAt(o)] = o;
-
- function h(t) {
- var e = t.length;
- if (e % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4");
- return "=" === t[e - 2] ? 2 : "=" === t[e - 1] ? 1 : 0
- }
-
- function f(t, e, r) {
- for (var i, s, a = [], o = e; o < r; o += 3) i = (t[o] << 16) + (t[o + 1] << 8) + t[o + 2], a.push(n[(s = i) >> 18 & 63] + n[s >> 12 & 63] + n[s >> 6 & 63] + n[63 & s]);
- return a.join("")
- }
- i["-".charCodeAt(0)] = 62, i["_".charCodeAt(0)] = 63
- }, {}],
- 2: [function(t, e, r) {
- "use strict";
- var n = t("base64-js"),
- i = t("ieee754");
- r.Buffer = o, r.SlowBuffer = function(t) {
- +t != t && (t = 0);
- return o.alloc(+t)
- }, r.INSPECT_MAX_BYTES = 50;
- var s = 2147483647;
-
- function a(t) {
- if (t > s) throw new RangeError("Invalid typed array length");
- var e = new Uint8Array(t);
- return e.__proto__ = o.prototype, e
- }
-
- function o(t, e, r) {
- if ("number" == typeof t) {
- if ("string" == typeof e) throw new Error("If encoding is specified then the first argument must be a string");
- return f(t)
- }
- return u(t, e, r)
- }
-
- function u(t, e, r) {
- if ("number" == typeof t) throw new TypeError('"value" argument must not be a number');
- return D(t) ? function(t, e, r) {
- if (e < 0 || t.byteLength < e) throw new RangeError("'offset' is out of bounds");
- if (t.byteLength < e + (r || 0)) throw new RangeError("'length' is out of bounds");
- var n;
- n = void 0 === e && void 0 === r ? new Uint8Array(t) : void 0 === r ? new Uint8Array(t, e) : new Uint8Array(t, e, r);
- return n.__proto__ = o.prototype, n
- }(t, e, r) : "string" == typeof t ? function(t, e) {
- "string" == typeof e && "" !== e || (e = "utf8");
- if (!o.isEncoding(e)) throw new TypeError('"encoding" must be a valid string encoding');
- var r = 0 | p(t, e),
- n = a(r),
- i = n.write(t, e);
- i !== r && (n = n.slice(0, i));
- return n
- }(t, e) : function(t) {
- if (o.isBuffer(t)) {
- var e = 0 | l(t.length),
- r = a(e);
- return 0 === r.length ? r : (t.copy(r, 0, 0, e), r)
- }
- if (t) {
- if (O(t) || "length" in t) return "number" != typeof t.length || R(t.length) ? a(0) : c(t);
- if ("Buffer" === t.type && Array.isArray(t.data)) return c(t.data)
- }
- throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")
- }(t)
- }
-
- function h(t) {
- if ("number" != typeof t) throw new TypeError('"size" argument must be a number');
- if (t < 0) throw new RangeError('"size" argument must not be negative')
- }
-
- function f(t) {
- return h(t), a(t < 0 ? 0 : 0 | l(t))
- }
-
- function c(t) {
- for (var e = t.length < 0 ? 0 : 0 | l(t.length), r = a(e), n = 0; n < e; n += 1) r[n] = 255 & t[n];
- return r
- }
-
- function l(t) {
- if (t >= s) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + s.toString(16) + " bytes");
- return 0 | t
- }
-
- function p(t, e) {
- if (o.isBuffer(t)) return t.length;
- if (O(t) || D(t)) return t.byteLength;
- "string" != typeof t && (t = "" + t);
- var r = t.length;
- if (0 === r) return 0;
- for (var n = !1;;) switch (e) {
- case "ascii":
- case "latin1":
- case "binary":
- return r;
- case "utf8":
- case "utf-8":
- case void 0:
- return _(t).length;
- case "ucs2":
- case "ucs-2":
- case "utf16le":
- case "utf-16le":
- return 2 * r;
- case "hex":
- return r >>> 1;
- case "base64":
- return P(t).length;
- default:
- if (n) return _(t).length;
- e = ("" + e).toLowerCase(), n = !0
- }
- }
-
- function y(t, e, r) {
- var n = t[e];
- t[e] = t[r], t[r] = n
- }
-
- function g(t, e, r, n, i) {
- if (0 === t.length) return -1;
- if ("string" == typeof r ? (n = r, r = 0) : r > 2147483647 ? r = 2147483647 : r < -2147483648 && (r = -2147483648), R(r = +r) && (r = i ? 0 : t.length - 1), r < 0 && (r = t.length + r), r >= t.length) {
- if (i) return -1;
- r = t.length - 1
- } else if (r < 0) {
- if (!i) return -1;
- r = 0
- }
- if ("string" == typeof e && (e = o.from(e, n)), o.isBuffer(e)) return 0 === e.length ? -1 : d(t, e, r, n, i);
- if ("number" == typeof e) return e &= 255, "function" == typeof Uint8Array.prototype.indexOf ? i ? Uint8Array.prototype.indexOf.call(t, e, r) : Uint8Array.prototype.lastIndexOf.call(t, e, r) : d(t, [e], r, n, i);
- throw new TypeError("val must be string, number or Buffer")
- }
-
- function d(t, e, r, n, i) {
- var s, a = 1,
- o = t.length,
- u = e.length;
- if (void 0 !== n && ("ucs2" === (n = String(n).toLowerCase()) || "ucs-2" === n || "utf16le" === n || "utf-16le" === n)) {
- if (t.length < 2 || e.length < 2) return -1;
- a = 2, o /= 2, u /= 2, r /= 2
- }
-
- function h(t, e) {
- return 1 === a ? t[e] : t.readUInt16BE(e * a)
- }
- if (i) {
- var f = -1;
- for (s = r; s < o; s++)
- if (h(t, s) === h(e, -1 === f ? 0 : s - f)) {
- if (-1 === f && (f = s), s - f + 1 === u) return f * a
- } else -1 !== f && (s -= s - f), f = -1
- } else
- for (r + u > o && (r = o - u), s = r; s >= 0; s--) {
- for (var c = !0, l = 0; l < u; l++)
- if (h(t, s + l) !== h(e, l)) {
- c = !1;
- break
- } if (c) return s
- }
- return -1
- }
-
- function v(t, e, r, n) {
- r = Number(r) || 0;
- var i = t.length - r;
- n ? (n = Number(n)) > i && (n = i) : n = i;
- var s = e.length;
- if (s % 2 != 0) throw new TypeError("Invalid hex string");
- n > s / 2 && (n = s / 2);
- for (var a = 0; a < n; ++a) {
- var o = parseInt(e.substr(2 * a, 2), 16);
- if (R(o)) return a;
- t[r + a] = o
- }
- return a
- }
-
- function b(t, e, r, n) {
- return N(function(t) {
- for (var e = [], r = 0; r < t.length; ++r) e.push(255 & t.charCodeAt(r));
- return e
- }(e), t, r, n)
- }
-
- function m(t, e, r) {
- return 0 === e && r === t.length ? n.fromByteArray(t) : n.fromByteArray(t.slice(e, r))
- }
-
- function w(t, e, r) {
- r = Math.min(t.length, r);
- for (var n = [], i = e; i < r;) {
- var s, a, o, u, h = t[i],
- f = null,
- c = h > 239 ? 4 : h > 223 ? 3 : h > 191 ? 2 : 1;
- if (i + c <= r) switch (c) {
- case 1:
- h < 128 && (f = h);
- break;
- case 2:
- 128 == (192 & (s = t[i + 1])) && (u = (31 & h) << 6 | 63 & s) > 127 && (f = u);
- break;
- case 3:
- s = t[i + 1], a = t[i + 2], 128 == (192 & s) && 128 == (192 & a) && (u = (15 & h) << 12 | (63 & s) << 6 | 63 & a) > 2047 && (u < 55296 || u > 57343) && (f = u);
- break;
- case 4:
- s = t[i + 1], a = t[i + 2], o = t[i + 3], 128 == (192 & s) && 128 == (192 & a) && 128 == (192 & o) && (u = (15 & h) << 18 | (63 & s) << 12 | (63 & a) << 6 | 63 & o) > 65535 && u < 1114112 && (f = u)
- }
- null === f ? (f = 65533, c = 1) : f > 65535 && (f -= 65536, n.push(f >>> 10 & 1023 | 55296), f = 56320 | 1023 & f), n.push(f), i += c
- }
- return function(t) {
- var e = t.length;
- if (e <= k) return String.fromCharCode.apply(String, t);
- var r = "",
- n = 0;
- for (; n < e;) r += String.fromCharCode.apply(String, t.slice(n, n += k));
- return r
- }(n)
- }
- r.kMaxLength = s, o.TYPED_ARRAY_SUPPORT = function() {
- try {
- var t = new Uint8Array(1);
- return t.__proto__ = {
- __proto__: Uint8Array.prototype,
- foo: function() {
- return 42
- }
- }, 42 === t.foo()
- } catch (t) {
- return !1
- }
- }(), o.TYPED_ARRAY_SUPPORT || "undefined" == typeof console || "function" != typeof console.error || console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."), "undefined" != typeof Symbol && Symbol.species && o[Symbol.species] === o && Object.defineProperty(o, Symbol.species, {
- value: null,
- configurable: !0,
- enumerable: !1,
- writable: !1
- }), o.poolSize = 8192, o.from = function(t, e, r) {
- return u(t, e, r)
- }, o.prototype.__proto__ = Uint8Array.prototype, o.__proto__ = Uint8Array, o.alloc = function(t, e, r) {
- return i = e, s = r, h(n = t), n <= 0 ? a(n) : void 0 !== i ? "string" == typeof s ? a(n).fill(i, s) : a(n).fill(i) : a(n);
- var n, i, s
- }, o.allocUnsafe = function(t) {
- return f(t)
- }, o.allocUnsafeSlow = function(t) {
- return f(t)
- }, o.isBuffer = function(t) {
- return null != t && !0 === t._isBuffer
- }, o.compare = function(t, e) {
- if (!o.isBuffer(t) || !o.isBuffer(e)) throw new TypeError("Arguments must be Buffers");
- if (t === e) return 0;
- for (var r = t.length, n = e.length, i = 0, s = Math.min(r, n); i < s; ++i)
- if (t[i] !== e[i]) {
- r = t[i], n = e[i];
- break
- } return r < n ? -1 : n < r ? 1 : 0
- }, o.isEncoding = function(t) {
- switch (String(t).toLowerCase()) {
- case "hex":
- case "utf8":
- case "utf-8":
- case "ascii":
- case "latin1":
- case "binary":
- case "base64":
- case "ucs2":
- case "ucs-2":
- case "utf16le":
- case "utf-16le":
- return !0;
- default:
- return !1
- }
- }, o.concat = function(t, e) {
- if (!Array.isArray(t)) throw new TypeError('"list" argument must be an Array of Buffers');
- if (0 === t.length) return o.alloc(0);
- var r;
- if (void 0 === e)
- for (e = 0, r = 0; r < t.length; ++r) e += t[r].length;
- var n = o.allocUnsafe(e),
- i = 0;
- for (r = 0; r < t.length; ++r) {
- var s = t[r];
- if (!o.isBuffer(s)) throw new TypeError('"list" argument must be an Array of Buffers');
- s.copy(n, i), i += s.length
- }
- return n
- }, o.byteLength = p, o.prototype._isBuffer = !0, o.prototype.swap16 = function() {
- var t = this.length;
- if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits");
- for (var e = 0; e < t; e += 2) y(this, e, e + 1);
- return this
- }, o.prototype.swap32 = function() {
- var t = this.length;
- if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits");
- for (var e = 0; e < t; e += 4) y(this, e, e + 3), y(this, e + 1, e + 2);
- return this
- }, o.prototype.swap64 = function() {
- var t = this.length;
- if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits");
- for (var e = 0; e < t; e += 8) y(this, e, e + 7), y(this, e + 1, e + 6), y(this, e + 2, e + 5), y(this, e + 3, e + 4);
- return this
- }, o.prototype.toString = function() {
- var t = this.length;
- return 0 === t ? "" : 0 === arguments.length ? w(this, 0, t) : function(t, e, r) {
- var n = !1;
- if ((void 0 === e || e < 0) && (e = 0), e > this.length) return "";
- if ((void 0 === r || r > this.length) && (r = this.length), r <= 0) return "";
- if ((r >>>= 0) <= (e >>>= 0)) return "";
- for (t || (t = "utf8");;) switch (t) {
- case "hex":
- return S(this, e, r);
- case "utf8":
- case "utf-8":
- return w(this, e, r);
- case "ascii":
- return E(this, e, r);
- case "latin1":
- case "binary":
- return T(this, e, r);
- case "base64":
- return m(this, e, r);
- case "ucs2":
- case "ucs-2":
- case "utf16le":
- case "utf-16le":
- return I(this, e, r);
- default:
- if (n) throw new TypeError("Unknown encoding: " + t);
- t = (t + "").toLowerCase(), n = !0
- }
- }.apply(this, arguments)
- }, o.prototype.equals = function(t) {
- if (!o.isBuffer(t)) throw new TypeError("Argument must be a Buffer");
- return this === t || 0 === o.compare(this, t)
- }, o.prototype.inspect = function() {
- var t = "",
- e = r.INSPECT_MAX_BYTES;
- return this.length > 0 && (t = this.toString("hex", 0, e).match(/.{2}/g).join(" "), this.length > e && (t += " ... ")), "
"
- }, o.prototype.compare = function(t, e, r, n, i) {
- if (!o.isBuffer(t)) throw new TypeError("Argument must be a Buffer");
- if (void 0 === e && (e = 0), void 0 === r && (r = t ? t.length : 0), void 0 === n && (n = 0), void 0 === i && (i = this.length), e < 0 || r > t.length || n < 0 || i > this.length) throw new RangeError("out of range index");
- if (n >= i && e >= r) return 0;
- if (n >= i) return -1;
- if (e >= r) return 1;
- if (this === t) return 0;
- for (var s = (i >>>= 0) - (n >>>= 0), a = (r >>>= 0) - (e >>>= 0), u = Math.min(s, a), h = this.slice(n, i), f = t.slice(e, r), c = 0; c < u; ++c)
- if (h[c] !== f[c]) {
- s = h[c], a = f[c];
- break
- } return s < a ? -1 : a < s ? 1 : 0
- }, o.prototype.includes = function(t, e, r) {
- return -1 !== this.indexOf(t, e, r)
- }, o.prototype.indexOf = function(t, e, r) {
- return g(this, t, e, r, !0)
- }, o.prototype.lastIndexOf = function(t, e, r) {
- return g(this, t, e, r, !1)
- }, o.prototype.write = function(t, e, r, n) {
- if (void 0 === e) n = "utf8", r = this.length, e = 0;
- else if (void 0 === r && "string" == typeof e) n = e, r = this.length, e = 0;
- else {
- if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");
- e >>>= 0, isFinite(r) ? (r >>>= 0, void 0 === n && (n = "utf8")) : (n = r, r = void 0)
- }
- var i = this.length - e;
- if ((void 0 === r || r > i) && (r = i), t.length > 0 && (r < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds");
- n || (n = "utf8");
- for (var s, a, o, u, h, f, c, l, p, y = !1;;) switch (n) {
- case "hex":
- return v(this, t, e, r);
- case "utf8":
- case "utf-8":
- return l = e, p = r, N(_(t, (c = this).length - l), c, l, p);
- case "ascii":
- return b(this, t, e, r);
- case "latin1":
- case "binary":
- return b(this, t, e, r);
- case "base64":
- return u = this, h = e, f = r, N(P(t), u, h, f);
- case "ucs2":
- case "ucs-2":
- case "utf16le":
- case "utf-16le":
- return a = e, o = r, N(function(t, e) {
- for (var r, n, i, s = [], a = 0; a < t.length && !((e -= 2) < 0); ++a) r = t.charCodeAt(a), n = r >> 8, i = r % 256, s.push(i), s.push(n);
- return s
- }(t, (s = this).length - a), s, a, o);
- default:
- if (y) throw new TypeError("Unknown encoding: " + n);
- n = ("" + n).toLowerCase(), y = !0
- }
- }, o.prototype.toJSON = function() {
- return {
- type: "Buffer",
- data: Array.prototype.slice.call(this._arr || this, 0)
- }
- };
- var k = 4096;
-
- function E(t, e, r) {
- var n = "";
- r = Math.min(t.length, r);
- for (var i = e; i < r; ++i) n += String.fromCharCode(127 & t[i]);
- return n
- }
-
- function T(t, e, r) {
- var n = "";
- r = Math.min(t.length, r);
- for (var i = e; i < r; ++i) n += String.fromCharCode(t[i]);
- return n
- }
-
- function S(t, e, r) {
- var n = t.length;
- (!e || e < 0) && (e = 0), (!r || r < 0 || r > n) && (r = n);
- for (var i = "", s = e; s < r; ++s) i += M(t[s]);
- return i
- }
-
- function I(t, e, r) {
- for (var n = t.slice(e, r), i = "", s = 0; s < n.length; s += 2) i += String.fromCharCode(n[s] + 256 * n[s + 1]);
- return i
- }
-
- function A(t, e, r) {
- if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint");
- if (t + e > r) throw new RangeError("Trying to access beyond buffer length")
- }
-
- function B(t, e, r, n, i, s) {
- if (!o.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance');
- if (e > i || e < s) throw new RangeError('"value" argument is out of bounds');
- if (r + n > t.length) throw new RangeError("Index out of range")
- }
-
- function C(t, e, r, n, i, s) {
- if (r + n > t.length) throw new RangeError("Index out of range");
- if (r < 0) throw new RangeError("Index out of range")
- }
-
- function L(t, e, r, n, s) {
- return e = +e, r >>>= 0, s || C(t, 0, r, 4), i.write(t, e, r, n, 23, 4), r + 4
- }
-
- function x(t, e, r, n, s) {
- return e = +e, r >>>= 0, s || C(t, 0, r, 8), i.write(t, e, r, n, 52, 8), r + 8
- }
- o.prototype.slice = function(t, e) {
- var r = this.length;
- (t = ~~t) < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r), (e = void 0 === e ? r : ~~e) < 0 ? (e += r) < 0 && (e = 0) : e > r && (e = r), e < t && (e = t);
- var n = this.subarray(t, e);
- return n.__proto__ = o.prototype, n
- }, o.prototype.readUIntLE = function(t, e, r) {
- t >>>= 0, e >>>= 0, r || A(t, e, this.length);
- for (var n = this[t], i = 1, s = 0; ++s < e && (i *= 256);) n += this[t + s] * i;
- return n
- }, o.prototype.readUIntBE = function(t, e, r) {
- t >>>= 0, e >>>= 0, r || A(t, e, this.length);
- for (var n = this[t + --e], i = 1; e > 0 && (i *= 256);) n += this[t + --e] * i;
- return n
- }, o.prototype.readUInt8 = function(t, e) {
- return t >>>= 0, e || A(t, 1, this.length), this[t]
- }, o.prototype.readUInt16LE = function(t, e) {
- return t >>>= 0, e || A(t, 2, this.length), this[t] | this[t + 1] << 8
- }, o.prototype.readUInt16BE = function(t, e) {
- return t >>>= 0, e || A(t, 2, this.length), this[t] << 8 | this[t + 1]
- }, o.prototype.readUInt32LE = function(t, e) {
- return t >>>= 0, e || A(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3]
- }, o.prototype.readUInt32BE = function(t, e) {
- return t >>>= 0, e || A(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3])
- }, o.prototype.readIntLE = function(t, e, r) {
- t >>>= 0, e >>>= 0, r || A(t, e, this.length);
- for (var n = this[t], i = 1, s = 0; ++s < e && (i *= 256);) n += this[t + s] * i;
- return n >= (i *= 128) && (n -= Math.pow(2, 8 * e)), n
- }, o.prototype.readIntBE = function(t, e, r) {
- t >>>= 0, e >>>= 0, r || A(t, e, this.length);
- for (var n = e, i = 1, s = this[t + --n]; n > 0 && (i *= 256);) s += this[t + --n] * i;
- return s >= (i *= 128) && (s -= Math.pow(2, 8 * e)), s
- }, o.prototype.readInt8 = function(t, e) {
- return t >>>= 0, e || A(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t]
- }, o.prototype.readInt16LE = function(t, e) {
- t >>>= 0, e || A(t, 2, this.length);
- var r = this[t] | this[t + 1] << 8;
- return 32768 & r ? 4294901760 | r : r
- }, o.prototype.readInt16BE = function(t, e) {
- t >>>= 0, e || A(t, 2, this.length);
- var r = this[t + 1] | this[t] << 8;
- return 32768 & r ? 4294901760 | r : r
- }, o.prototype.readInt32LE = function(t, e) {
- return t >>>= 0, e || A(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24
- }, o.prototype.readInt32BE = function(t, e) {
- return t >>>= 0, e || A(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]
- }, o.prototype.readFloatLE = function(t, e) {
- return t >>>= 0, e || A(t, 4, this.length), i.read(this, t, !0, 23, 4)
- }, o.prototype.readFloatBE = function(t, e) {
- return t >>>= 0, e || A(t, 4, this.length), i.read(this, t, !1, 23, 4)
- }, o.prototype.readDoubleLE = function(t, e) {
- return t >>>= 0, e || A(t, 8, this.length), i.read(this, t, !0, 52, 8)
- }, o.prototype.readDoubleBE = function(t, e) {
- return t >>>= 0, e || A(t, 8, this.length), i.read(this, t, !1, 52, 8)
- }, o.prototype.writeUIntLE = function(t, e, r, n) {
- (t = +t, e >>>= 0, r >>>= 0, n) || B(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
- var i = 1,
- s = 0;
- for (this[e] = 255 & t; ++s < r && (i *= 256);) this[e + s] = t / i & 255;
- return e + r
- }, o.prototype.writeUIntBE = function(t, e, r, n) {
- (t = +t, e >>>= 0, r >>>= 0, n) || B(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
- var i = r - 1,
- s = 1;
- for (this[e + i] = 255 & t; --i >= 0 && (s *= 256);) this[e + i] = t / s & 255;
- return e + r
- }, o.prototype.writeUInt8 = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 1, 255, 0), this[e] = 255 & t, e + 1
- }, o.prototype.writeUInt16LE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 2, 65535, 0), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2
- }, o.prototype.writeUInt16BE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 2, 65535, 0), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2
- }, o.prototype.writeUInt32LE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 4, 4294967295, 0), this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t, e + 4
- }, o.prototype.writeUInt32BE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 4, 4294967295, 0), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4
- }, o.prototype.writeIntLE = function(t, e, r, n) {
- if (t = +t, e >>>= 0, !n) {
- var i = Math.pow(2, 8 * r - 1);
- B(this, t, e, r, i - 1, -i)
- }
- var s = 0,
- a = 1,
- o = 0;
- for (this[e] = 255 & t; ++s < r && (a *= 256);) t < 0 && 0 === o && 0 !== this[e + s - 1] && (o = 1), this[e + s] = (t / a >> 0) - o & 255;
- return e + r
- }, o.prototype.writeIntBE = function(t, e, r, n) {
- if (t = +t, e >>>= 0, !n) {
- var i = Math.pow(2, 8 * r - 1);
- B(this, t, e, r, i - 1, -i)
- }
- var s = r - 1,
- a = 1,
- o = 0;
- for (this[e + s] = 255 & t; --s >= 0 && (a *= 256);) t < 0 && 0 === o && 0 !== this[e + s + 1] && (o = 1), this[e + s] = (t / a >> 0) - o & 255;
- return e + r
- }, o.prototype.writeInt8 = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 1, 127, -128), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1
- }, o.prototype.writeInt16LE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 2, 32767, -32768), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2
- }, o.prototype.writeInt16BE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 2, 32767, -32768), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2
- }, o.prototype.writeInt32LE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 4, 2147483647, -2147483648), this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24, e + 4
- }, o.prototype.writeInt32BE = function(t, e, r) {
- return t = +t, e >>>= 0, r || B(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4
- }, o.prototype.writeFloatLE = function(t, e, r) {
- return L(this, t, e, !0, r)
- }, o.prototype.writeFloatBE = function(t, e, r) {
- return L(this, t, e, !1, r)
- }, o.prototype.writeDoubleLE = function(t, e, r) {
- return x(this, t, e, !0, r)
- }, o.prototype.writeDoubleBE = function(t, e, r) {
- return x(this, t, e, !1, r)
- }, o.prototype.copy = function(t, e, r, n) {
- if (r || (r = 0), n || 0 === n || (n = this.length), e >= t.length && (e = t.length), e || (e = 0), n > 0 && n < r && (n = r), n === r) return 0;
- if (0 === t.length || 0 === this.length) return 0;
- if (e < 0) throw new RangeError("targetStart out of bounds");
- if (r < 0 || r >= this.length) throw new RangeError("sourceStart out of bounds");
- if (n < 0) throw new RangeError("sourceEnd out of bounds");
- n > this.length && (n = this.length), t.length - e < n - r && (n = t.length - e + r);
- var i, s = n - r;
- if (this === t && r < e && e < n)
- for (i = s - 1; i >= 0; --i) t[i + e] = this[i + r];
- else if (s < 1e3)
- for (i = 0; i < s; ++i) t[i + e] = this[i + r];
- else Uint8Array.prototype.set.call(t, this.subarray(r, r + s), e);
- return s
- }, o.prototype.fill = function(t, e, r, n) {
- if ("string" == typeof t) {
- if ("string" == typeof e ? (n = e, e = 0, r = this.length) : "string" == typeof r && (n = r, r = this.length), 1 === t.length) {
- var i = t.charCodeAt(0);
- i < 256 && (t = i)
- }
- if (void 0 !== n && "string" != typeof n) throw new TypeError("encoding must be a string");
- if ("string" == typeof n && !o.isEncoding(n)) throw new TypeError("Unknown encoding: " + n)
- } else "number" == typeof t && (t &= 255);
- if (e < 0 || this.length < e || this.length < r) throw new RangeError("Out of range index");
- if (r <= e) return this;
- var s;
- if (e >>>= 0, r = void 0 === r ? this.length : r >>> 0, t || (t = 0), "number" == typeof t)
- for (s = e; s < r; ++s) this[s] = t;
- else {
- var a = o.isBuffer(t) ? t : new o(t, n),
- u = a.length;
- for (s = 0; s < r - e; ++s) this[s + e] = a[s % u]
- }
- return this
- };
- var U = /[^+/0-9A-Za-z-_]/g;
-
- function M(t) {
- return t < 16 ? "0" + t.toString(16) : t.toString(16)
- }
-
- function _(t, e) {
- var r;
- e = e || 1 / 0;
- for (var n = t.length, i = null, s = [], a = 0; a < n; ++a) {
- if ((r = t.charCodeAt(a)) > 55295 && r < 57344) {
- if (!i) {
- if (r > 56319) {
- (e -= 3) > -1 && s.push(239, 191, 189);
- continue
- }
- if (a + 1 === n) {
- (e -= 3) > -1 && s.push(239, 191, 189);
- continue
- }
- i = r;
- continue
- }
- if (r < 56320) {
- (e -= 3) > -1 && s.push(239, 191, 189), i = r;
- continue
- }
- r = 65536 + (i - 55296 << 10 | r - 56320)
- } else i && (e -= 3) > -1 && s.push(239, 191, 189);
- if (i = null, r < 128) {
- if ((e -= 1) < 0) break;
- s.push(r)
- } else if (r < 2048) {
- if ((e -= 2) < 0) break;
- s.push(r >> 6 | 192, 63 & r | 128)
- } else if (r < 65536) {
- if ((e -= 3) < 0) break;
- s.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128)
- } else {
- if (!(r < 1114112)) throw new Error("Invalid code point");
- if ((e -= 4) < 0) break;
- s.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128)
- }
- }
- return s
- }
-
- function P(t) {
- return n.toByteArray(function(t) {
- if ((t = t.trim().replace(U, "")).length < 2) return "";
- for (; t.length % 4 != 0;) t += "=";
- return t
- }(t))
- }
-
- function N(t, e, r, n) {
- for (var i = 0; i < n && !(i + r >= e.length || i >= t.length); ++i) e[i + r] = t[i];
- return i
- }
-
- function D(t) {
- return t instanceof ArrayBuffer || null != t && null != t.constructor && "ArrayBuffer" === t.constructor.name && "number" == typeof t.byteLength
- }
-
- function O(t) {
- return "function" == typeof ArrayBuffer.isView && ArrayBuffer.isView(t)
- }
-
- function R(t) {
- return t != t
- }
- }, {
- "base64-js": 1,
- ieee754: 3
- }],
- 3: [function(t, e, r) {
- r.read = function(t, e, r, n, i) {
- var s, a, o = 8 * i - n - 1,
- u = (1 << o) - 1,
- h = u >> 1,
- f = -7,
- c = r ? i - 1 : 0,
- l = r ? -1 : 1,
- p = t[e + c];
- for (c += l, s = p & (1 << -f) - 1, p >>= -f, f += o; f > 0; s = 256 * s + t[e + c], c += l, f -= 8);
- for (a = s & (1 << -f) - 1, s >>= -f, f += n; f > 0; a = 256 * a + t[e + c], c += l, f -= 8);
- if (0 === s) s = 1 - h;
- else {
- if (s === u) return a ? NaN : 1 / 0 * (p ? -1 : 1);
- a += Math.pow(2, n), s -= h
- }
- return (p ? -1 : 1) * a * Math.pow(2, s - n)
- }, r.write = function(t, e, r, n, i, s) {
- var a, o, u, h = 8 * s - i - 1,
- f = (1 << h) - 1,
- c = f >> 1,
- l = 23 === i ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
- p = n ? 0 : s - 1,
- y = n ? 1 : -1,
- g = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0;
- for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (o = isNaN(e) ? 1 : 0, a = f) : (a = Math.floor(Math.log(e) / Math.LN2), e * (u = Math.pow(2, -a)) < 1 && (a--, u *= 2), (e += a + c >= 1 ? l / u : l * Math.pow(2, 1 - c)) * u >= 2 && (a++, u /= 2), a + c >= f ? (o = 0, a = f) : a + c >= 1 ? (o = (e * u - 1) * Math.pow(2, i), a += c) : (o = e * Math.pow(2, c - 1) * Math.pow(2, i), a = 0)); i >= 8; t[r + p] = 255 & o, p += y, o /= 256, i -= 8);
- for (a = a << i | o, h += i; h > 0; t[r + p] = 255 & a, p += y, a /= 256, h -= 8);
- t[r + p - y] |= 128 * g
- }
- }, {}],
- 4: [function(t, e, r) {
- "use strict";
- for (var n = {
- VERSION: "2.0.5",
- NOTES: [],
- CIRCLE_OF_FOURTHS: ["C", "F", "Bb", "Eb", "Ab", "Db", "Gb", "Cb", "Fb", "Bbb", "Ebb", "Abb"],
- CIRCLE_OF_FIFTHS: ["C", "G", "D", "A", "E", "B", "F#", "C#", "G#", "D#", "A#", "E#"]
- }, i = [
- ["C"],
- ["C#", "Db"],
- ["D"],
- ["D#", "Eb"],
- ["E"],
- ["F"],
- ["F#", "Gb"],
- ["G"],
- ["G#", "Ab"],
- ["A"],
- ["A#", "Bb"],
- ["B"]
- ], s = 0, a = function(t) {
- i.forEach(function(e) {
- e.forEach(function(e) {
- return n.NOTES[s] = e + t
- }), s++
- })
- }, o = -1; o <= 9; o++) a(o);
- r.Constants = n
- }, {}],
- 5: [function(t, e, r) {
- "use strict";
- var n = t("./player"),
- i = t("./utils"),
- s = t("./constants");
- e.exports = {
- Player: n.Player,
- Utils: i.Utils,
- Constants: s.Constants
- }
- }, {
- "./constants": 4,
- "./player": 6,
- "./utils": 8
- }],
- 6: [function(t, e, r) {
- "use strict";
- var n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
- return typeof t
- } : function(t) {
- return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
- },
- i = function() {
- function t(t, e) {
- for (var r = 0; r < e.length; r++) {
- var n = e[r];
- n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
- }
- }
- return function(e, r, n) {
- return r && t(e.prototype, r), n && t(e, n), e
- }
- }();
- var s = t("./utils").Utils,
- a = t("./track").Track;
- Uint8Array.prototype.forEach || Object.defineProperty(Uint8Array.prototype, "forEach", {
- value: Array.prototype.forEach
- });
- var o = function() {
- function e(t, r) {
- ! function(t, e) {
- if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
- }(this, e), this.sampleRate = 5, this.startTime = 0, this.buffer = r || null, this.division, this.format, this.setIntervalId = !1, this.tracks = [], this.instruments = [], this.defaultTempo = 120, this.tempo = null, this.startTick = 0, this.tick = 0, this.lastTick = null, this.inLoop = !1, this.totalTicks = 0, this.events = [], this.totalEvents = 0, this.eventListeners = {}, "function" == typeof t && this.on("midiEvent", t)
- }
- return i(e, [{
- key: "loadSong",
- value: function(e) {
- var r = t("fs");
- return this.buffer = r.readFileSync(e), this.fileLoaded()
- }
- }, {
- key: "loadArrayBuffer",
- value: function(t) {
- return this.buffer = new Uint8Array(t), this.fileLoaded()
- }
- }, {
- key: "loadDataUri",
- value: function(t) {
- for (var e = s.atob(t.split(",")[1]), r = new Uint8Array(e.length), n = 0; n < e.length; n++) r[n] = e.charCodeAt(n);
- return this.buffer = r, this.fileLoaded()
- }
- }, {
- key: "getFilesize",
- value: function() {
- return this.buffer ? this.buffer.length : 0
- }
- }, {
- key: "fileLoaded",
- value: function() {
- if (!this.validate()) throw "Invalid MIDI file; should start with MThd";
- return this.setTempo(this.defaultTempo).getDivision().getFormat().getTracks().dryRun()
- }
- }, {
- key: "validate",
- value: function() {
- return "MThd" === s.bytesToLetters(this.buffer.subarray(0, 4))
- }
- }, {
- key: "getFormat",
- value: function() {
- return this.format = s.bytesToNumber(this.buffer.subarray(8, 10)), this
- }
- }, {
- key: "getTracks",
- value: function() {
- this.tracks = [];
- for (var t = 0; t < this.buffer.length;) {
- if ("MTrk" == s.bytesToLetters(this.buffer.subarray(t, t + 4))) {
- var e = s.bytesToNumber(this.buffer.subarray(t + 4, t + 8));
- this.tracks.push(new a(this.tracks.length, this.buffer.subarray(t + 8, t + 8 + e)))
- }
- t += s.bytesToNumber(this.buffer.subarray(t + 4, t + 8)) + 8
- }
- return this
- }
- }, {
- key: "enableTrack",
- value: function(t) {
- return this.tracks[t - 1].enable(), this
- }
- }, {
- key: "disableTrack",
- value: function(t) {
- return this.tracks[t - 1].disable(), this
- }
- }, {
- key: "getDivision",
- value: function() {
- return this.division = s.bytesToNumber(this.buffer.subarray(12, 14)), this
- }
- }, {
- key: "playLoop",
- value: function(t) {
- this.inLoop || (this.inLoop = !0, this.tick = this.getCurrentTick(), this.tracks.forEach(function(e) {
- if (!t && this.endOfFile()) this.triggerPlayerEvent("endOfFile"), this.stop();
- else {
- var r = e.handleEvent(this.tick, t);
- t && r ? (r.hasOwnProperty("name") && "Set Tempo" === r.name && (this.defaultTempo = r.data, this.setTempo(r.data)), r.hasOwnProperty("name") && "Program Change" === r.name && (this.instruments.includes(r.value) || this.instruments.push(r.value))) : r && this.emitEvent(r)
- }
- }, this), t || this.triggerPlayerEvent("playing", {
- tick: this.tick
- }), this.inLoop = !1)
- }
- }, {
- key: "setTempo",
- value: function(t) {
- return this.tempo = t, this
- }
- }, {
- key: "setStartTime",
- value: function(t) {
- this.startTime = t
- }
- }, {
- key: "play",
- value: function() {
- if (this.isPlaying()) throw "Already playing...";
- return this.startTime || (this.startTime = (new Date).getTime()), this.setIntervalId = setInterval(this.playLoop.bind(this), this.sampleRate), this
- }
- }, {
- key: "pause",
- value: function() {
- return clearInterval(this.setIntervalId), this.setIntervalId = !1, this.startTick = this.tick, this.startTime = 0, this
- }
- }, {
- key: "stop",
- value: function() {
- return clearInterval(this.setIntervalId), this.setIntervalId = !1, this.startTick = 0, this.startTime = 0, this.resetTracks(), this
- }
- }, {
- key: "skipToTick",
- value: function(t) {
- return this.stop(), this.startTick = t, this.tracks.forEach(function(e) {
- e.setEventIndexByTick(t)
- }), this
- }
- }, {
- key: "skipToPercent",
- value: function(t) {
- if (t < 0 || t > 100) throw "Percent must be number between 1 and 100.";
- return this.skipToTick(Math.round(t / 100 * this.totalTicks)), this
- }
- }, {
- key: "skipToSeconds",
- value: function(t) {
- var e = this.getSongTime();
- if (t < 0 || t > e) throw t + " seconds not within song time of " + e;
- return this.skipToPercent(t / e * 100), this
- }
- }, {
- key: "isPlaying",
- value: function() {
- return this.setIntervalId > 0 || "object" === n(this.setIntervalId)
- }
- }, {
- key: "dryRun",
- value: function() {
- for (this.resetTracks(); !this.endOfFile();) this.playLoop(!0);
- return this.events = this.getEvents(), this.totalEvents = this.getTotalEvents(), this.totalTicks = this.getTotalTicks(), this.startTick = 0, this.startTime = 0, this.resetTracks(), this.triggerPlayerEvent("fileLoaded", this), this
- }
- }, {
- key: "resetTracks",
- value: function() {
- return this.tracks.forEach(function(t) {
- return t.reset()
- }), this
- }
- }, {
- key: "getEvents",
- value: function() {
- return this.tracks.map(function(t) {
- return t.events
- })
- }
- }, {
- key: "getTotalTicks",
- value: function() {
- return Math.max.apply(null, this.tracks.map(function(t) {
- return t.delta
- }))
- }
- }, {
- key: "getTotalEvents",
- value: function() {
- return this.tracks.reduce(function(t, e) {
- return {
- events: {
- length: t.events.length + e.events.length
- }
- }
- }, {
- events: {
- length: 0
- }
- }).events.length
- }
- }, {
- key: "getSongTime",
- value: function() {
- return this.totalTicks / this.division / this.tempo * 60
- }
- }, {
- key: "getSongTimeRemaining",
- value: function() {
- return Math.round((this.totalTicks - this.getCurrentTick()) / this.division / this.tempo * 60)
- }
- }, {
- key: "getSongPercentRemaining",
- value: function() {
- return Math.round(this.getSongTimeRemaining() / this.getSongTime() * 100)
- }
- }, {
- key: "bytesProcessed",
- value: function() {
- return 14 + 8 * this.tracks.length + this.tracks.reduce(function(t, e) {
- return {
- pointer: t.pointer + e.pointer
- }
- }, {
- pointer: 0
- }).pointer
- }
- }, {
- key: "eventsPlayed",
- value: function() {
- return this.tracks.reduce(function(t, e) {
- return {
- eventIndex: t.eventIndex + e.eventIndex
- }
- }, {
- eventIndex: 0
- }).eventIndex
- }
- }, {
- key: "endOfFile",
- value: function() {
- return this.isPlaying() ? this.totalTicks - this.tick <= 0 : this.bytesProcessed() == this.buffer.length
- }
- }, {
- key: "getCurrentTick",
- value: function() {
- return !this.startTime && this.tick ? this.startTick : this.startTime ? Math.round(((new Date).getTime() - this.startTime) / 1e3 * (this.division * (this.tempo / 60))) + this.startTick : 0
- }
- }, {
- key: "emitEvent",
- value: function(t) {
- return this.triggerPlayerEvent("midiEvent", t), this
- }
- }, {
- key: "on",
- value: function(t, e) {
- return this.eventListeners.hasOwnProperty(t) || (this.eventListeners[t] = []), this.eventListeners[t].push(e), this
- }
- }, {
- key: "triggerPlayerEvent",
- value: function(t, e) {
- return this.eventListeners.hasOwnProperty(t) && this.eventListeners[t].forEach(function(t) {
- return t(e || {})
- }), this
- }
- }]), e
- }();
- r.Player = o
- }, {
- "./track": 7,
- "./utils": 8,
- fs: "fs"
- }],
- 7: [function(t, e, r) {
- "use strict";
- var n = function() {
- function t(t, e) {
- for (var r = 0; r < e.length; r++) {
- var n = e[r];
- n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
- }
- }
- return function(e, r, n) {
- return r && t(e.prototype, r), n && t(e, n), e
- }
- }();
- var i = t("./constants").Constants,
- s = t("./utils").Utils,
- a = function() {
- function t(e, r) {
- ! function(t, e) {
- if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
- }(this, t), this.enabled = !0, this.eventIndex = 0, this.pointer = 0, this.lastTick = 0, this.lastStatus = null, this.index = e, this.data = r, this.delta = 0, this.runningDelta = 0, this.events = []
- }
- return n(t, [{
- key: "reset",
- value: function() {
- return this.enabled = !0, this.eventIndex = 0, this.pointer = 0, this.lastTick = 0, this.lastStatus = null, this.delta = 0, this.runningDelta = 0, this
- }
- }, {
- key: "enable",
- value: function() {
- return this.enabled = !0, this
- }
- }, {
- key: "disable",
- value: function() {
- return this.enabled = !1, this
- }
- }, {
- key: "setEventIndexByTick",
- value: function(t) {
- for (var e in t = t || 0, this.events)
- if (this.events[e].tick >= t) return this.eventIndex = e, this
- }
- }, {
- key: "getCurrentByte",
- value: function() {
- return this.data[this.pointer]
- }
- }, {
- key: "getDeltaByteCount",
- value: function() {
- for (var t = this.getCurrentByte(), e = 1; t >= 128;) t = this.data[this.pointer + e], e++;
- return e
- }
- }, {
- key: "getDelta",
- value: function() {
- return s.readVarInt(this.data.subarray(this.pointer, this.pointer + this.getDeltaByteCount()))
- }
- }, {
- key: "handleEvent",
- value: function(t, e) {
- if (e = e || !1) {
- var r = t - this.lastTick >= this.getDelta();
- if (this.pointer < this.data.length && (e || r)) {
- var n = this.parseEvent();
- if (this.enabled) return n
- }
- } else if (this.events[this.eventIndex] && this.events[this.eventIndex].tick <= t && (this.eventIndex++, this.enabled)) return this.events[this.eventIndex - 1];
- return null
- }
- }, {
- key: "getStringData",
- value: function(t) {
- this.pointer;
- var e = s.readVarInt(this.data.subarray(t + 2, t + 2 + 1));
- return s.bytesToLetters(this.data.subarray(t + 1 + 2, t + 1 + e + 2))
- }
- }, {
- key: "parseEvent",
- value: function() {
- var t = this.pointer + this.getDeltaByteCount(),
- e = {},
- r = this.getDeltaByteCount();
- if (e.track = this.index + 1, e.delta = this.getDelta(), this.lastTick = this.lastTick + e.delta, this.runningDelta += e.delta, e.tick = this.runningDelta, e.byteIndex = this.pointer, 255 == this.data[t]) {
- switch (this.data[t + 1]) {
- case 0:
- e.name = "Sequence Number";
- break;
- case 1:
- e.name = "Text Event", e.string = this.getStringData(t);
- break;
- case 2:
- e.name = "Copyright Notice";
- break;
- case 3:
- e.name = "Sequence/Track Name", e.string = this.getStringData(t);
- break;
- case 4:
- e.name = "Instrument Name", e.string = this.getStringData(t);
- break;
- case 5:
- e.name = "Lyric", e.string = this.getStringData(t);
- break;
- case 6:
- e.name = "Marker";
- break;
- case 7:
- e.name = "Cue Point", e.string = this.getStringData(t);
- break;
- case 9:
- e.name = "Device Name", e.string = this.getStringData(t);
- break;
- case 32:
- e.name = "MIDI Channel Prefix";
- break;
- case 33:
- e.name = "MIDI Port", e.data = s.bytesToNumber([this.data[t + 3]]);
- break;
- case 47:
- e.name = "End of Track";
- break;
- case 81:
- e.name = "Set Tempo", e.data = Math.round(6e7 / s.bytesToNumber(this.data.subarray(t + 3, t + 6))), this.tempo = e.data;
- break;
- case 84:
- e.name = "SMTPE Offset";
- break;
- case 88:
- e.name = "Time Signature", e.data = this.data.subarray(t + 3, t + 7), e.timeSignature = e.data[0] + "/" + Math.pow(2, e.data[1]);
- break;
- case 89:
- e.name = "Key Signature", e.data = this.data.subarray(t + 3, t + 5), e.data[0] >= 0 ? e.keySignature = i.CIRCLE_OF_FIFTHS[e.data[0]] : e.data[0] < 0 && (e.keySignature = i.CIRCLE_OF_FOURTHS[Math.abs(e.data[0])]), 0 == e.data[1] ? e.keySignature += " Major" : 1 == e.data[1] && (e.keySignature += " Minor");
- break;
- case 127:
- e.name = "Sequencer-Specific Meta-event";
- break;
- default:
- e.name = "Unknown: " + this.data[t + 1].toString(16)
- }
- var n = this.data[this.pointer + r + 2];
- this.pointer += r + 3 + n
- } else if (240 == this.data[t]) {
- e.name = "Sysex";
- n = this.data[this.pointer + r + 1];
- this.pointer += r + 2 + n
- } else this.data[t] < 128 ? (e.running = !0, e.noteNumber = this.data[t], e.noteName = i.NOTES[this.data[t]], e.velocity = this.data[t + 1], this.lastStatus <= 143 ? (e.name = "Note off", e.channel = this.lastStatus - 128 + 1) : this.lastStatus <= 159 && (e.name = "Note on", e.channel = this.lastStatus - 144 + 1), this.pointer += r + 2) : (this.lastStatus = this.data[t], this.data[t] <= 143 ? (e.name = "Note off", e.channel = this.lastStatus - 128 + 1, e.noteNumber = this.data[t + 1], e.noteName = i.NOTES[this.data[t + 1]], e.velocity = Math.round(this.data[t + 2] / 127 * 100), this.pointer += r + 3) : this.data[t] <= 159 ? (e.name = "Note on", e.channel = this.lastStatus - 144 + 1, e.noteNumber = this.data[t + 1], e.noteName = i.NOTES[this.data[t + 1]], e.velocity = Math.round(this.data[t + 2] / 127 * 100), this.pointer += r + 3) : this.data[t] <= 175 ? (e.name = "Polyphonic Key Pressure", e.channel = this.lastStatus - 160 + 1, e.note = i.NOTES[this.data[t + 1]], e.pressure = event[2], this.pointer += r + 3) : this.data[t] <= 191 ? (e.name = "Controller Change", e.channel = this.lastStatus - 176 + 1, e.number = this.data[t + 1], e.value = this.data[t + 2], this.pointer += r + 3) : this.data[t] <= 207 ? (e.name = "Program Change", e.channel = this.lastStatus - 192 + 1, e.value = this.data[t + 1], this.pointer += r + 2) : this.data[t] <= 223 ? (e.name = "Channel Key Pressure", e.channel = this.lastStatus - 208 + 1, this.pointer += r + 2) : this.data[t] <= 239 ? (e.name = "Pitch Bend", e.channel = this.lastStatus - 224 + 1, this.pointer += r + 3) : e.name = "Unknown. Pointer: " + this.pointer.toString() + " " + t.toString() + " " + this.data.length);
- return this.delta += e.delta, this.events.push(e), e
- }
- }, {
- key: "endOfTrack",
- value: function() {
- return 255 == this.data[this.pointer + 1] && 47 == this.data[this.pointer + 2] && 0 == this.data[this.pointer + 3]
- }
- }]), t
- }();
- e.exports.Track = a
- }, {
- "./constants": 4,
- "./utils": 8
- }],
- 8: [function(t, e, r) {
- (function(t) {
- "use strict";
- var e = function() {
- function t(t, e) {
- for (var r = 0; r < e.length; r++) {
- var n = e[r];
- n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
- }
- }
- return function(e, r, n) {
- return r && t(e.prototype, r), n && t(e, n), e
- }
- }();
- var n = function() {
- function r() {
- ! function(t, e) {
- if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
- }(this, r)
- }
- return e(r, null, [{
- key: "byteToHex",
- value: function(t) {
- return ("0" + t.toString(16)).slice(-2)
- }
- }, {
- key: "bytesToHex",
- value: function(t) {
- var e = [];
- return t.forEach(function(t) {
- return e.push(r.byteToHex(t))
- }), e.join("")
- }
- }, {
- key: "hexToNumber",
- value: function(t) {
- return parseInt(t, 16)
- }
- }, {
- key: "bytesToNumber",
- value: function(t) {
- return r.hexToNumber(r.bytesToHex(t))
- }
- }, {
- key: "bytesToLetters",
- value: function(t) {
- var e = [];
- return t.forEach(function(t) {
- return e.push(String.fromCharCode(t))
- }), e.join("")
- }
- }, {
- key: "decToBinary",
- value: function(t) {
- return (t >>> 0).toString(2)
- }
- }, {
- key: "readVarInt",
- value: function(t) {
- var e = 0;
- return t.forEach(function(t) {
- 128 & t ? (e += 127 & t, e <<= 7) : e += t
- }), e
- }
- }, {
- key: "atob",
- value: function(t) {
- function e(e) {
- return t.apply(this, arguments)
- }
- return e.toString = function() {
- return t.toString()
- }, e
- }(function(e) {
- return "function" == typeof atob ? atob(e) : new t(e, "base64").toString("binary")
- })
- }]), r
- }();
- r.Utils = n
- }).call(this, t("buffer").Buffer)
- }, {
- buffer: 2
- }]
- }, {}, [5])(5)
-});
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/1/midiplayer.min.js b/Program Files/Midi Media Player/1/midiplayer.min.js
deleted file mode 100644
index cc386cf..0000000
--- a/Program Files/Midi Media Player/1/midiplayer.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).MidiPlayer=t()}(function(){return function(){return function t(e,r,n){function i(o,a){if(!r[o]){if(!e[o]){var u="function"==typeof require&&require;if(!a&&u)return u(o,!0);if(s)return s(o,!0);var h=new Error("Cannot find module '"+o+"'");throw h.code="MODULE_NOT_FOUND",h}var f=r[o]={exports:{}};e[o][0].call(f.exports,function(t){return i(e[o][1][t]||t)},f,f.exports,t,e,r,n)}return r[o].exports}for(var s="function"==typeof require&&require,o=0;o0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t,e,r){for(var n,i,o=[],a=e;a>18&63]+s[i>>12&63]+s[i>>6&63]+s[63&i]);return o.join("")}r.byteLength=function(t){return 3*t.length/4-n(t)},r.toByteArray=function(t){var e,r,i,s,u,h=t.length;s=n(t),u=new a(3*h/4-s),r=s>0?h-4:h;var f=0;for(e=0;e>16&255,u[f++]=i>>8&255,u[f++]=255&i;return 2===s?(i=o[t.charCodeAt(e)]<<2|o[t.charCodeAt(e+1)]>>4,u[f++]=255&i):1===s&&(i=o[t.charCodeAt(e)]<<10|o[t.charCodeAt(e+1)]<<4|o[t.charCodeAt(e+2)]>>2,u[f++]=i>>8&255,u[f++]=255&i),u},r.fromByteArray=function(t){for(var e,r=t.length,n=r%3,o="",a=[],u=16383,h=0,f=r-n;hf?f:h+u));return 1===n?(e=t[r-1],o+=s[e>>2],o+=s[e<<4&63],o+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],o+=s[e>>10],o+=s[e>>4&63],o+=s[e<<2&63],o+="="),a.push(o),a.join("")};for(var s=[],o=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,f=u.length;hD)throw new RangeError("Invalid typed array length");var e=new Uint8Array(t);return e.__proto__=i.prototype,e}function i(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return a(t)}return s(t,e,r)}function s(t,e,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return U(t)?function(t,e,r){if(e<0||t.byteLength=D)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+D.toString(16)+" bytes");return 0|t}function f(t,e){if(i.isBuffer(t))return t.length;if(M(t)||U(t))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return C(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return L(t).length;default:if(n)return C(t).length;e=(""+e).toLowerCase(),n=!0}}function c(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function l(t,e,r,n,s){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),_(r=+r)&&(r=s?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(s)return-1;r=t.length-1}else if(r<0){if(!s)return-1;r=0}if("string"==typeof e&&(e=i.from(e,n)),i.isBuffer(e))return 0===e.length?-1:p(t,e,r,n,s);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):p(t,[e],r,n,s);throw new TypeError("val must be string, number or Buffer")}function p(t,e,r,n,i){function s(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var o,a=1,u=t.length,h=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,u/=2,h/=2,r/=2}if(i){var f=-1;for(o=r;ou&&(r=u-h),o=r;o>=0;o--){for(var c=!0,l=0;li&&(n=i):n=i;var s=e.length;if(s%2!=0)throw new TypeError("Invalid hex string");n>s/2&&(n=s/2);for(var o=0;o239?4:h>223?3:h>191?2:1;if(i+c<=r)switch(c){case 1:h<128&&(f=h);break;case 2:128==(192&(s=t[i+1]))&&(u=(31&h)<<6|63&s)>127&&(f=u);break;case 3:s=t[i+1],o=t[i+2],128==(192&s)&&128==(192&o)&&(u=(15&h)<<12|(63&s)<<6|63&o)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:s=t[i+1],o=t[i+2],a=t[i+3],128==(192&s)&&128==(192&o)&&128==(192&a)&&(u=(15&h)<<18|(63&s)<<12|(63&o)<<6|63&a)>65535&&u<1114112&&(f=u)}null===f?(f=65533,c=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),i+=c}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r="",n=0;nn)&&(r=n);for(var i="",s=e;sr)throw new RangeError("Trying to access beyond buffer length")}function T(t,e,r,n,s,o){if(!i.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>s||et.length)throw new RangeError("Index out of range")}function S(t,e,r,n,i,s){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function I(t,e,r,n,i){return e=+e,r>>>=0,i||S(t,0,r,4),N.write(t,e,r,n,23,4),r+4}function A(t,e,r,n,i){return e=+e,r>>>=0,i||S(t,0,r,8),N.write(t,e,r,n,52,8),r+8}function B(t){return t<16?"0"+t.toString(16):t.toString(16)}function C(t,e){var r;e=e||1/0;for(var n=t.length,i=null,s=[],o=0;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&s.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;s.push(r)}else if(r<2048){if((e-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function L(t){return P.toByteArray(function(t){if((t=t.trim().replace(R,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function x(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function U(t){return t instanceof ArrayBuffer||null!=t&&null!=t.constructor&&"ArrayBuffer"===t.constructor.name&&"number"==typeof t.byteLength}function M(t){return"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(t)}function _(t){return t!=t}var P=t("base64-js"),N=t("ieee754");r.Buffer=i,r.SlowBuffer=function(t){return+t!=t&&(t=0),i.alloc(+t)},r.INSPECT_MAX_BYTES=50;var D=2147483647;r.kMaxLength=D,i.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),i.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),i.poolSize=8192,i.from=function(t,e,r){return s(t,e,r)},i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,i.alloc=function(t,e,r){return s=e,a=r,o(i=t),i<=0?n(i):void 0!==s?"string"==typeof a?n(i).fill(s,a):n(i).fill(s):n(i);var i,s,a},i.allocUnsafe=function(t){return a(t)},i.allocUnsafeSlow=function(t){return a(t)},i.isBuffer=function(t){return null!=t&&!0===t._isBuffer},i.compare=function(t,e){if(!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,s=0,o=Math.min(r,n);sthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return w(this,e,r);case"utf8":case"utf-8":return v(this,e,r);case"ascii":return b(this,e,r);case"latin1":case"binary":return m(this,e,r);case"base64":return d(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},i.prototype.equals=function(t){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===i.compare(this,t)},i.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},i.prototype.compare=function(t,e,r,n,s){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===s&&(s=this.length),e<0||r>t.length||n<0||s>this.length)throw new RangeError("out of range index");if(n>=s&&e>=r)return 0;if(n>=s)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(s>>>=0)-(n>>>=0),a=(r>>>=0)-(e>>>=0),u=Math.min(o,a),h=this.slice(n,s),f=t.slice(e,r),c=0;c>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s,o,a,u,h,f,c,l,p,d=!1;;)switch(n){case"hex":return y(this,t,e,r);case"utf8":case"utf-8":return l=e,p=r,x(C(t,(c=this).length-l),c,l,p);case"ascii":return g(this,t,e,r);case"latin1":case"binary":return g(this,t,e,r);case"base64":return u=this,h=e,f=r,x(L(t),u,h,f);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return o=e,a=r,x(function(t,e){for(var r,n,i,s=[],o=0;o>8,i=r%256,s.push(i),s.push(n);return s}(t,(s=this).length-o),s,o,a);default:if(d)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),d=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;i.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||E(t,e,this.length);for(var n=this[t],i=1,s=0;++s>>=0,e>>>=0,r||E(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},i.prototype.readUInt8=function(t,e){return t>>>=0,e||E(t,1,this.length),this[t]},i.prototype.readUInt16LE=function(t,e){return t>>>=0,e||E(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUInt16BE=function(t,e){return t>>>=0,e||E(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUInt32LE=function(t,e){return t>>>=0,e||E(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},i.prototype.readUInt32BE=function(t,e){return t>>>=0,e||E(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||E(t,e,this.length);for(var n=this[t],i=1,s=0;++s=(i*=128)&&(n-=Math.pow(2,8*e)),n},i.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||E(t,e,this.length);for(var n=e,i=1,s=this[t+--n];n>0&&(i*=256);)s+=this[t+--n]*i;return s>=(i*=128)&&(s-=Math.pow(2,8*e)),s},i.prototype.readInt8=function(t,e){return t>>>=0,e||E(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},i.prototype.readInt16LE=function(t,e){t>>>=0,e||E(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt16BE=function(t,e){t>>>=0,e||E(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt32LE=function(t,e){return t>>>=0,e||E(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return t>>>=0,e||E(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readFloatLE=function(t,e){return t>>>=0,e||E(t,4,this.length),N.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return t>>>=0,e||E(t,4,this.length),N.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return t>>>=0,e||E(t,8,this.length),N.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return t>>>=0,e||E(t,8,this.length),N.read(this,t,!1,52,8)},i.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||T(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,s=0;for(this[e]=255&t;++s>>=0,r>>>=0,n||T(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,s=1;for(this[e+i]=255&t;--i>=0&&(s*=256);)this[e+i]=t/s&255;return e+r},i.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,1,255,0),this[e]=255&t,e+1},i.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},i.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},i.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},i.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},i.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);T(this,t,e,r,i-1,-i)}var s=0,o=1,a=0;for(this[e]=255&t;++s>0)-a&255;return e+r},i.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);T(this,t,e,r,i-1,-i)}var s=r-1,o=1,a=0;for(this[e+s]=255&t;--s>=0&&(o*=256);)t<0&&0===a&&0!==this[e+s+1]&&(a=1),this[e+s]=(t/o>>0)-a&255;return e+r},i.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},i.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},i.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},i.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},i.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||T(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},i.prototype.writeFloatLE=function(t,e,r){return I(this,t,e,!0,r)},i.prototype.writeFloatBE=function(t,e,r){return I(this,t,e,!1,r)},i.prototype.writeDoubleLE=function(t,e,r){return A(this,t,e,!0,r)},i.prototype.writeDoubleBE=function(t,e,r){return A(this,t,e,!1,r)},i.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(s<1e3)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o>1,f=-7,c=r?i-1:0,l=r?-1:1,p=t[e+c];for(c+=l,s=p&(1<<-f)-1,p>>=-f,f+=a;f>0;s=256*s+t[e+c],c+=l,f-=8);for(o=s&(1<<-f)-1,s>>=-f,f+=n;f>0;o=256*o+t[e+c],c+=l,f-=8);if(0===s)s=1-h;else{if(s===u)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),s-=h}return(p?-1:1)*o*Math.pow(2,s-n)},r.write=function(t,e,r,n,i,s){var o,a,u,h=8*s-i-1,f=(1<>1,l=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:s-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,o=f):(o=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-o))<1&&(o--,u*=2),(e+=o+c>=1?l/u:l*Math.pow(2,1-c))*u>=2&&(o++,u/=2),o+c>=f?(a=0,o=f):o+c>=1?(a=(e*u-1)*Math.pow(2,i),o+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&a,p+=y,a/=256,i-=8);for(o=o<0;t[r+p]=255&o,p+=y,o/=256,h-=8);t[r+p-y]|=128*g}},{}],4:[function(t,e,r){"use strict";for(var n={VERSION:"2.0.5",NOTES:[],CIRCLE_OF_FOURTHS:["C","F","Bb","Eb","Ab","Db","Gb","Cb","Fb","Bbb","Ebb","Abb"],CIRCLE_OF_FIFTHS:["C","G","D","A","E","B","F#","C#","G#","D#","A#","E#"]},i=[["C"],["C#","Db"],["D"],["D#","Eb"],["E"],["F"],["F#","Gb"],["G"],["G#","Ab"],["A"],["A#","Bb"],["B"]],s=0,o=-1;o<=9;o++)!function(t){i.forEach(function(e){e.forEach(function(e){return n.NOTES[s]=e+t}),s++})}(o);r.Constants=n},{}],5:[function(t,e,r){"use strict";var n=t("./player"),i=t("./utils"),s=t("./constants");e.exports={Player:n.Player,Utils:i.Utils,Constants:s.Constants}},{"./constants":4,"./player":6,"./utils":8}],6:[function(t,e,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var r=0;r100)throw"Percent must be number between 1 and 100.";return this.skipToTick(Math.round(t/100*this.totalTicks)),this}},{key:"skipToSeconds",value:function(t){var e=this.getSongTime();if(t<0||t>e)throw t+" seconds not within song time of "+e;return this.skipToPercent(t/e*100),this}},{key:"isPlaying",value:function(){return this.setIntervalId>0||"object"===n(this.setIntervalId)}},{key:"dryRun",value:function(){for(this.resetTracks();!this.endOfFile();)this.playLoop(!0);return this.events=this.getEvents(),this.totalEvents=this.getTotalEvents(),this.totalTicks=this.getTotalTicks(),this.startTick=0,this.startTime=0,this.resetTracks(),this.triggerPlayerEvent("fileLoaded",this),this}},{key:"resetTracks",value:function(){return this.tracks.forEach(function(t){return t.reset()}),this}},{key:"getEvents",value:function(){return this.tracks.map(function(t){return t.events})}},{key:"getTotalTicks",value:function(){return Math.max.apply(null,this.tracks.map(function(t){return t.delta}))}},{key:"getTotalEvents",value:function(){return this.tracks.reduce(function(t,e){return{events:{length:t.events.length+e.events.length}}},{events:{length:0}}).events.length}},{key:"getSongTime",value:function(){return this.totalTicks/this.division/this.tempo*60}},{key:"getSongTimeRemaining",value:function(){return Math.round((this.totalTicks-this.getCurrentTick())/this.division/this.tempo*60)}},{key:"getSongPercentRemaining",value:function(){return Math.round(this.getSongTimeRemaining()/this.getSongTime()*100)}},{key:"bytesProcessed",value:function(){return 14+8*this.tracks.length+this.tracks.reduce(function(t,e){return{pointer:t.pointer+e.pointer}},{pointer:0}).pointer}},{key:"eventsPlayed",value:function(){return this.tracks.reduce(function(t,e){return{eventIndex:t.eventIndex+e.eventIndex}},{eventIndex:0}).eventIndex}},{key:"endOfFile",value:function(){return this.isPlaying()?this.totalTicks-this.tick<=0:this.bytesProcessed()==this.buffer.length}},{key:"getCurrentTick",value:function(){return!this.startTime&&this.tick?this.startTick:this.startTime?Math.round(((new Date).getTime()-this.startTime)/1e3*(this.division*(this.tempo/60)))+this.startTick:0}},{key:"emitEvent",value:function(t){return this.triggerPlayerEvent("midiEvent",t),this}},{key:"on",value:function(t,e){return this.eventListeners.hasOwnProperty(t)||(this.eventListeners[t]=[]),this.eventListeners[t].push(e),this}},{key:"triggerPlayerEvent",value:function(t,e){return this.eventListeners.hasOwnProperty(t)&&this.eventListeners[t].forEach(function(t){return t(e||{})}),this}}]),e}();r.Player=a},{"./track":7,"./utils":8,fs:"fs"}],7:[function(t,e,r){"use strict";var n=function(){function t(t,e){for(var r=0;r=t)return this.eventIndex=e,this}},{key:"getCurrentByte",value:function(){return this.data[this.pointer]}},{key:"getDeltaByteCount",value:function(){for(var t=this.getCurrentByte(),e=1;t>=128;)t=this.data[this.pointer+e],e++;return e}},{key:"getDelta",value:function(){return s.readVarInt(this.data.subarray(this.pointer,this.pointer+this.getDeltaByteCount()))}},{key:"handleEvent",value:function(t,e){if(e=e||!1){var r=t-this.lastTick>=this.getDelta();if(this.pointer=0?e.keySignature=i.CIRCLE_OF_FIFTHS[e.data[0]]:e.data[0]<0&&(e.keySignature=i.CIRCLE_OF_FOURTHS[Math.abs(e.data[0])]),0==e.data[1]?e.keySignature+=" Major":1==e.data[1]&&(e.keySignature+=" Minor");break;case 127:e.name="Sequencer-Specific Meta-event";break;default:e.name="Unknown: "+this.data[t+1].toString(16)}var n=this.data[this.pointer+r+2];this.pointer+=r+3+n}else 240==this.data[t]?(e.name="Sysex",n=this.data[this.pointer+r+1],this.pointer+=r+2+n):this.data[t]<128?(e.running=!0,e.noteNumber=this.data[t],e.noteName=i.NOTES[this.data[t]],e.velocity=this.data[t+1],this.lastStatus<=143?(e.name="Note off",e.channel=this.lastStatus-128+1):this.lastStatus<=159&&(e.name="Note on",e.channel=this.lastStatus-144+1),this.pointer+=r+2):(this.lastStatus=this.data[t],this.data[t]<=143?(e.name="Note off",e.channel=this.lastStatus-128+1,e.noteNumber=this.data[t+1],e.noteName=i.NOTES[this.data[t+1]],e.velocity=Math.round(this.data[t+2]/127*100),this.pointer+=r+3):this.data[t]<=159?(e.name="Note on",e.channel=this.lastStatus-144+1,e.noteNumber=this.data[t+1],e.noteName=i.NOTES[this.data[t+1]],e.velocity=Math.round(this.data[t+2]/127*100),this.pointer+=r+3):this.data[t]<=175?(e.name="Polyphonic Key Pressure",e.channel=this.lastStatus-160+1,e.note=i.NOTES[this.data[t+1]],e.pressure=event[2],this.pointer+=r+3):this.data[t]<=191?(e.name="Controller Change",e.channel=this.lastStatus-176+1,e.number=this.data[t+1],e.value=this.data[t+2],this.pointer+=r+3):this.data[t]<=207?(e.name="Program Change",e.channel=this.lastStatus-192+1,e.value=this.data[t+1],this.pointer+=r+2):this.data[t]<=223?(e.name="Channel Key Pressure",e.channel=this.lastStatus-208+1,this.pointer+=r+2):this.data[t]<=239?(e.name="Pitch Bend",e.channel=this.lastStatus-224+1,this.pointer+=r+3):e.name="Unknown. Pointer: "+this.pointer.toString()+" "+t.toString()+" "+this.data.length);return this.delta+=e.delta,this.events.push(e),e}},{key:"endOfTrack",value:function(){return 255==this.data[this.pointer+1]&&47==this.data[this.pointer+2]&&0==this.data[this.pointer+3]}}]),t}();e.exports.Track=o},{"./constants":4,"./utils":8}],8:[function(t,e,r){(function(t){"use strict";var e=function(){function t(t,e){for(var r=0;r>>0).toString(2)}},{key:"readVarInt",value:function(t){var e=0;return t.forEach(function(t){128&t?(e+=127&t,e<<=7):e+=t}),e}},{key:"atob",value:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(e){return"function"==typeof atob?atob(e):new t(e,"base64").toString("binary")})}]),r}();r.Utils=n}).call(this,t("buffer").Buffer)},{buffer:2}]},{},[5])(5)});
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/1/scripts.js b/Program Files/Midi Media Player/1/scripts.js
deleted file mode 100644
index c9ba721..0000000
--- a/Program Files/Midi Media Player/1/scripts.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var path = window.parent.attr;
-
-if (path) {
- console.log(path);
- Player.loadSong(parent.loadfile(path));
-}
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/1/scripts.min.js b/Program Files/Midi Media Player/1/scripts.min.js
deleted file mode 100644
index 567f255..0000000
--- a/Program Files/Midi Media Player/1/scripts.min.js
+++ /dev/null
@@ -1 +0,0 @@
-var path=window.parent.attr;path&&(console.log(path),Player.loadSong(parent.loadfile(path)));
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/1/soundfont-player.min.js b/Program Files/Midi Media Player/1/soundfont-player.min.js
deleted file mode 100644
index f2b3125..0000000
--- a/Program Files/Midi Media Player/1/soundfont-player.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o0&¬e<129?+note:parser.midi(note);var freq=midi?parser.midiToFreq(midi,440):null;if(!freq)return;duration=duration||.2;options=options||{};var destination=options.destination||defaultOptions.destination||ctx.destination;var vcoType=options.vcoType||defaultOptions.vcoType||"sine";var gain=options.gain||defaultOptions.gain||.4;var vco=ctx.createOscillator();vco.type=vcoType;vco.frequency.value=freq;var vca=ctx.createGain();vca.gain.value=gain;vco.connect(vca);vca.connect(destination);vco.start(time);if(duration>0)vco.stop(time+duration);return vco}}Soundfont.noteToMidi=parser.midi;module.exports=Soundfont},{"note-parser":6}],3:[function(require,module,exports){"use strict";function b64ToUint6(nChr){return nChr>64&&nChr<91?nChr-65:nChr>96&&nChr<123?nChr-71:nChr>47&&nChr<58?nChr+4:nChr===43?62:nChr===47?63:0}function decode(sBase64,nBlocksSize){var sB64Enc=sBase64.replace(/[^A-Za-z0-9\+\/]/g,"");var nInLen=sB64Enc.length;var nOutLen=nBlocksSize?Math.ceil((nInLen*3+1>>2)/nBlocksSize)*nBlocksSize:nInLen*3+1>>2;var taBytes=new Uint8Array(nOutLen);for(var nMod3,nMod4,nUint24=0,nOutIdx=0,nInIdx=0;nInIdx>>(16>>>nMod3&24)&255}nUint24=0}}return taBytes}module.exports={decode:decode}},{}],4:[function(require,module,exports){"use strict";module.exports=function(url,type){return new Promise(function(done,reject){var req=new XMLHttpRequest;if(type)req.responseType=type;req.open("GET",url);req.onload=function(){req.status===200?done(req.response):reject(Error(req.statusText))};req.onerror=function(){reject(Error("Network Error"))};req.send()})}},{}],5:[function(require,module,exports){"use strict";var base64=require("./base64");var fetch=require("./fetch");function fromRegex(r){return function(o){return typeof o==="string"&&r.test(o)}}function prefix(pre,name){return typeof pre==="string"?pre+name:typeof pre==="function"?pre(name):name}function load(ac,source,options,defVal){var loader=isArrayBuffer(source)?loadArrayBuffer:isAudioFileName(source)?loadAudioFile:isPromise(source)?loadPromise:isArray(source)?loadArrayData:isObject(source)?loadObjectData:isJsonFileName(source)?loadJsonFile:isBase64Audio(source)?loadBase64Audio:isJsFileName(source)?loadMidiJSFile:null;var opts=options||{};return loader?loader(ac,source,opts):defVal?Promise.resolve(defVal):Promise.reject("Source not valid ("+source+")")}load.fetch=fetch;function isArrayBuffer(o){return o instanceof ArrayBuffer}function loadArrayBuffer(ac,array,options){return new Promise(function(done,reject){ac.decodeAudioData(array,function(buffer){done(buffer)},function(){reject("Can't decode audio data ("+array.slice(0,30)+"...)")})})}var isAudioFileName=fromRegex(/\.(mp3|wav|ogg)(\?.*)?$/i);function loadAudioFile(ac,name,options){var url=prefix(options.from,name);return load(ac,load.fetch(url,"arraybuffer"),options)}function isPromise(o){return o&&typeof o.then==="function"}function loadPromise(ac,promise,options){return promise.then(function(value){return load(ac,value,options)})}var isArray=Array.isArray;function loadArrayData(ac,array,options){return Promise.all(array.map(function(data){return load(ac,data,options,data)}))}function isObject(o){return o&&typeof o==="object"}function loadObjectData(ac,obj,options){var dest={};var promises=Object.keys(obj).map(function(key){if(options.only&&options.only.indexOf(key)===-1)return null;var value=obj[key];return load(ac,value,options,value).then(function(audio){dest[key]=audio})});return Promise.all(promises).then(function(){return dest})}var isJsonFileName=fromRegex(/\.json(\?.*)?$/i);function loadJsonFile(ac,name,options){var url=prefix(options.from,name);return load(ac,load.fetch(url,"text").then(JSON.parse),options)}var isBase64Audio=fromRegex(/^data:audio/);function loadBase64Audio(ac,source,options){var i=source.indexOf(",");return load(ac,base64.decode(source.slice(i+1)).buffer,options)}var isJsFileName=fromRegex(/\.js(\?.*)?$/i);function loadMidiJSFile(ac,name,options){var url=prefix(options.from,name);return load(ac,load.fetch(url,"text").then(midiJsToJson),options)}function midiJsToJson(data){var begin=data.indexOf("MIDI.Soundfont.");if(begin<0)throw Error("Invalid MIDI.js Soundfont format");begin=data.indexOf("=",begin)+2;var end=data.lastIndexOf(",");return JSON.parse(data.slice(begin,end)+"}")}if(typeof module==="object"&&module.exports)module.exports=load;if(typeof window!=="undefined")window.loadAudio=load},{"./base64":3,"./fetch":4}],6:[function(require,module,exports){"use strict";function fillStr(s,num){return Array(num+1).join(s)}function isNum(x){return typeof x==="number"}function isStr(x){return typeof x==="string"}function isDef(x){return typeof x!=="undefined"}function midiToFreq(midi,tuning){return Math.pow(2,(midi-69)/12)*(tuning||440)}var REGEX=/^([a-gA-G])(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)\s*$/;function regex(){return REGEX}var SEMITONES=[0,2,4,5,7,9,11];function parse(str,isTonic,tuning){if(typeof str!=="string")return null;var m=REGEX.exec(str);if(!m||!isTonic&&m[4])return null;var p={letter:m[1].toUpperCase(),acc:m[2].replace(/x/g,"##")};p.pc=p.letter+p.acc;p.step=(p.letter.charCodeAt(0)+3)%7;p.alt=p.acc[0]==="b"?-p.acc.length:p.acc.length;var pos=SEMITONES[p.step]+p.alt;p.chroma=pos<0?12+pos:pos%12;if(m[3]){p.oct=+m[3];p.midi=pos+12*(p.oct+1);p.freq=midiToFreq(p.midi,tuning)}if(isTonic)p.tonicOf=m[4];return p}var LETTERS="CDEFGAB";function acc(n){return!isNum(n)?"":n<0?fillStr("b",-n):fillStr("#",n)}function oct(n){return!isNum(n)?"":""+n}function build(s,a,o){if(s===null||typeof s==="undefined")return null;if(s.step)return build(s.step,s.alt,s.oct);if(s<0||s>6)return null;return LETTERS.charAt(s)+acc(a)+oct(o)}function midi(note){if((isNum(note)||isStr(note))&¬e>=0&¬e<128)return+note;var p=parse(note);return p&&isDef(p.midi)?p.midi:null}function freq(note,tuning){var m=midi(note);return m===null?null:midiToFreq(m,tuning)}var parser={parse:parse,build:build,regex:regex,midi:midi,freq:freq};var FNS=["letter","acc","pc","step","alt","chroma","oct"];FNS.forEach(function(name){parser[name]=function(src){var p=parse(src);return p&&isDef(p[name])?p[name]:null}});module.exports=parser},{}],7:[function(require,module,exports){module.exports=function(player){player.on=function(event,cb){if(arguments.length===1&&typeof event==="function")return player.on("event",event);var prop="on"+event;var old=player[prop];player[prop]=old?chain(old,cb):cb;return player};return player};function chain(fn1,fn2){return function(a,b,c,d){fn1(a,b,c,d);fn2(a,b,c,d)}}},{}],8:[function(require,module,exports){"use strict";var player=require("./player");var events=require("./events");var notes=require("./notes");var scheduler=require("./scheduler");var midi=require("./midi");function SamplePlayer(ac,source,options){return midi(scheduler(notes(events(player(ac,source,options)))))}if(typeof module==="object"&&module.exports)module.exports=SamplePlayer;if(typeof window!=="undefined")window.SamplePlayer=SamplePlayer},{"./events":7,"./midi":9,"./notes":10,"./player":11,"./scheduler":12}],9:[function(require,module,exports){var midimessage=require("midimessage");module.exports=function(player){player.listenToMidi=function(input,options){var started={};var opts=options||{};var gain=opts.gain||function(vel){return vel/127};input.onmidimessage=function(msg){var mm=msg.messageType?msg:midimessage(msg);if(mm.messageType==="noteon"&&mm.velocity===0){mm.messageType="noteoff"}if(opts.channel&&mm.channel!==opts.channel)return;switch(mm.messageType){case"noteon":started[mm.key]=player.play(mm.key,0,{gain:gain(mm.velocity)});break;case"noteoff":if(started[mm.key]){started[mm.key].stop();delete started[mm.key]}break}};return player};return player}},{midimessage:14}],10:[function(require,module,exports){"use strict";var note=require("note-parser");var isMidi=function(n){return n!==null&&n!==[]&&n>=0&&n<129};var toMidi=function(n){return isMidi(n)?+n:note.midi(n)};module.exports=function(player){if(player.buffers){var map=player.opts.map;var toKey=typeof map==="function"?map:toMidi;var mapper=function(name){return name?toKey(name)||name:null};player.buffers=mapBuffers(player.buffers,mapper);var start=player.start;player.start=function(name,when,options){var key=mapper(name);var dec=key%1;if(dec){key=Math.floor(key);options=Object.assign(options||{},{cents:Math.floor(dec*100)})}return start(key,when,options)}}return player};function mapBuffers(buffers,toKey){return Object.keys(buffers).reduce(function(mapped,name){mapped[toKey(name)]=buffers[name];return mapped},{})}},{"note-parser":15}],11:[function(require,module,exports){"use strict";var ADSR=require("adsr");var EMPTY={};var DEFAULTS={gain:1,attack:.01,decay:.1,sustain:.9,release:.3,loop:false,cents:0,loopStart:0,loopEnd:0};function SamplePlayer(ac,source,options){var connected=false;var nextId=0;var tracked={};var out=ac.createGain();out.gain.value=1;var opts=Object.assign({},DEFAULTS,options);var player={context:ac,out:out,opts:opts};if(source instanceof AudioBuffer)player.buffer=source;else player.buffers=source;player.start=function(name,when,options){if(player.buffer&&name!==null)return player.start(null,name,when);var buffer=name?player.buffers[name]:player.buffer;if(!buffer){console.warn("Buffer "+name+" not found.");return}else if(!connected){console.warn("SamplePlayer not connected to any node.");return}var opts=options||EMPTY;when=Math.max(ac.currentTime,when||0);player.emit("start",when,name,opts);var node=createNode(name,buffer,opts);node.id=track(name,node);node.env.start(when);node.source.start(when);player.emit("started",when,node.id,node);if(opts.duration)node.stop(when+opts.duration);return node};player.play=function(name,when,options){return player.start(name,when,options)};player.stop=function(when,ids){var node;ids=ids||Object.keys(tracked);return ids.map(function(id){node=tracked[id];if(!node)return null;node.stop(when);return node.id})};player.connect=function(dest){connected=true;out.connect(dest);return player};player.emit=function(event,when,obj,opts){if(player.onevent)player.onevent(event,when,obj,opts);var fn=player["on"+event];if(fn)fn(when,obj,opts)};return player;function track(name,node){node.id=nextId++;tracked[node.id]=node;node.source.onended=function(){var now=ac.currentTime;node.source.disconnect();node.env.disconnect();node.disconnect();player.emit("ended",now,node.id,node)};return node.id}function createNode(name,buffer,options){var node=ac.createGain();node.gain.value=0;node.connect(out);node.env=envelope(ac,options,opts);node.env.connect(node.gain);node.source=ac.createBufferSource();node.source.buffer=buffer;node.source.connect(node);node.source.loop=options.loop||opts.loop;node.source.playbackRate.value=centsToRate(options.cents||opts.cents);node.source.loopStart=options.loopStart||opts.loopStart;node.source.loopEnd=options.loopEnd||opts.loopEnd;node.stop=function(when){var time=when||ac.currentTime;player.emit("stop",time,name);var stopAt=node.env.stop(time);node.source.stop(stopAt)};return node}}function isNum(x){return typeof x==="number"}var PARAMS=["attack","decay","sustain","release"];function envelope(ac,options,opts){var env=ADSR(ac);var adsr=options.adsr||opts.adsr;PARAMS.forEach(function(name,i){if(adsr)env[name]=adsr[i];else env[name]=options[name]||opts[name]});env.value.value=isNum(options.gain)?options.gain:isNum(opts.gain)?opts.gain:1;return env}function centsToRate(cents){return cents?Math.pow(2,cents/1200):1}module.exports=SamplePlayer},{adsr:13}],12:[function(require,module,exports){"use strict";var isArr=Array.isArray;var isObj=function(o){return o&&typeof o==="object"};var OPTS={};module.exports=function(player){player.schedule=function(time,events){var now=player.context.currentTime;var when=time=end){value=end}return value}},{}],14:[function(require,module,exports){(function(global){(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.midimessage=e()}})(function(){var e,t,s;return function o(e,t,s){function a(n,i){if(!t[n]){if(!e[n]){var l=typeof require=="function"&&require;if(!i&&l)return l(n,!0);if(r)return r(n,!0);var h=new Error("Cannot find module '"+n+"'");throw h.code="MODULE_NOT_FOUND",h}var c=t[n]={exports:{}};e[n][0].call(c.exports,function(t){var s=e[n][1][t];return a(s?s:t)},c,c.exports,o,e,t,s)}return t[n].exports}var r=typeof require=="function"&&require;for(var n=0;n byteLength) {
- if (strict) {
- throw Error('Index ' + byteOffset + ': Found a ' + charLength +
- ' bytes encoded char declaration but only ' +
- (byteLength - byteOffset) + ' bytes are available.');
- }
- } else {
- chars.push(String.fromCodePoint(
- UTF8.getCharCode(bytes, byteOffset, charLength, strict)));
- }
- byteOffset += charLength - 1;
- }
- return chars.join('');
- },
- // UTF8 encoding functions
- 'getBytesForCharCode': function(charCode) {
- if (charCode < 128) {
- return 1;
- } else if (charCode < 2048) {
- return 2;
- } else if (charCode < 65536) {
- return 3;
- } else if (charCode < 2097152) {
- return 4;
- }
- throw new Error('CharCode ' + charCode + ' cannot be encoded with UTF8.');
- },
- 'setBytesFromCharCode': function(charCode, bytes, byteOffset, neededBytes) {
- charCode = charCode | 0;
- bytes = bytes || [];
- byteOffset = byteOffset | 0;
- neededBytes = neededBytes || UTF8.getBytesForCharCode(charCode);
- // Setting the charCode as it to bytes if the byte length is 1
- if (1 == neededBytes) {
- bytes[byteOffset] = charCode;
- } else {
- // Computing the first byte
- bytes[byteOffset++] =
- (parseInt('1111'.slice(0, neededBytes), 2) << 8 - neededBytes) +
- (charCode >>> ((--neededBytes) * 6));
- // Computing next bytes
- for (; neededBytes > 0;) {
- bytes[byteOffset++] = ((charCode >>> ((--neededBytes) * 6)) & 0x3F) | 0x80;
- }
- }
- return bytes;
- },
- 'setBytesFromString': function(string, bytes, byteOffset, byteLength, strict) {
- string = string || '';
- bytes = bytes || [];
- byteOffset = byteOffset | 0;
- byteLength = ('number' === typeof byteLength ?
- byteLength :
- bytes.byteLength || Infinity);
- for (var i = 0, j = string.length; i < j; i++) {
- var neededBytes = UTF8.getBytesForCharCode(string[i].codePointAt(0));
- if (strict && byteOffset + neededBytes > byteLength) {
- throw new Error('Not enought bytes to encode the char "' + string[i] +
- '" at the offset "' + byteOffset + '".');
- }
- UTF8.setBytesFromCharCode(string[i].codePointAt(0),
- bytes, byteOffset, neededBytes, strict);
- byteOffset += neededBytes;
- }
- return bytes;
- }
-};
-
-///..................................................................
-
-// MIDIEvents : Read and edit events from various sources (ArrayBuffer, Stream)
-function MIDIEvents() {
- throw new Error('MIDIEvents function not intended to be run.');
-}
-
-// Static constants
-// Event types
-MIDIEvents.EVENT_META = 0xFF;
-MIDIEvents.EVENT_SYSEX = 0xF0;
-MIDIEvents.EVENT_DIVSYSEX = 0xF7;
-MIDIEvents.EVENT_MIDI = 0x8;
-// Meta event types
-MIDIEvents.EVENT_META_SEQUENCE_NUMBER = 0x00;
-MIDIEvents.EVENT_META_TEXT = 0x01;
-MIDIEvents.EVENT_META_COPYRIGHT_NOTICE = 0x02;
-MIDIEvents.EVENT_META_TRACK_NAME = 0x03;
-MIDIEvents.EVENT_META_INSTRUMENT_NAME = 0x04;
-MIDIEvents.EVENT_META_LYRICS = 0x05;
-MIDIEvents.EVENT_META_MARKER = 0x06;
-MIDIEvents.EVENT_META_CUE_POINT = 0x07;
-MIDIEvents.EVENT_META_MIDI_CHANNEL_PREFIX = 0x20;
-MIDIEvents.EVENT_META_END_OF_TRACK = 0x2F;
-MIDIEvents.EVENT_META_SET_TEMPO = 0x51;
-MIDIEvents.EVENT_META_SMTPE_OFFSET = 0x54;
-MIDIEvents.EVENT_META_TIME_SIGNATURE = 0x58;
-MIDIEvents.EVENT_META_KEY_SIGNATURE = 0x59;
-MIDIEvents.EVENT_META_SEQUENCER_SPECIFIC = 0x7F;
-// MIDI event types
-MIDIEvents.EVENT_MIDI_NOTE_OFF = 0x8;
-MIDIEvents.EVENT_MIDI_NOTE_ON = 0x9;
-MIDIEvents.EVENT_MIDI_NOTE_AFTERTOUCH = 0xA;
-MIDIEvents.EVENT_MIDI_CONTROLLER = 0xB;
-MIDIEvents.EVENT_MIDI_PROGRAM_CHANGE = 0xC;
-MIDIEvents.EVENT_MIDI_CHANNEL_AFTERTOUCH = 0xD;
-MIDIEvents.EVENT_MIDI_PITCH_BEND = 0xE;
-// MIDI event sizes
-MIDIEvents.MIDI_1PARAM_EVENTS = [
- MIDIEvents.EVENT_MIDI_PROGRAM_CHANGE,
- MIDIEvents.EVENT_MIDI_CHANNEL_AFTERTOUCH,
-];
-MIDIEvents.MIDI_2PARAMS_EVENTS = [
- MIDIEvents.EVENT_MIDI_NOTE_OFF,
- MIDIEvents.EVENT_MIDI_NOTE_ON,
- MIDIEvents.EVENT_MIDI_NOTE_AFTERTOUCH,
- MIDIEvents.EVENT_MIDI_CONTROLLER,
- MIDIEvents.EVENT_MIDI_PITCH_BEND,
-];
-
-// Create an event stream parser
-MIDIEvents.createParser = function midiEventsCreateParser(stream, startAt, strictMode) {
- // Private vars
- // Common vars
- var eventTypeByte;
- var event;
- // MIDI events vars
- var MIDIEventType;
- var MIDIEventChannel;
- var MIDIEventParam1;
-
- // Wrap DataView into a data stream
- if (stream instanceof DataView) {
- stream = {
- position: startAt || 0,
- buffer: stream,
- readUint8: function() {
- return this.buffer.getUint8(this.position++);
- },
- readUint16: function() {
- var v = this.buffer.getUint16(this.position);
- this.position = this.position + 2;
- return v;
- },
- readUint32: function() {
- var v = this.buffer.getUint16(this.position);
- this.position = this.position + 2;
- return v;
- },
- readVarInt: function() {
- var v = 0;
- var i = 0;
- var b;
- while (4 > i++) {
- b = this.readUint8();
-
- if (b & 0x80) {
- v += (b & 0x7f);
- v <<= 7;
- } else {
- return v + b;
- }
- }
- throw new Error('0x' + this.position.toString(16) + ':' +
- ' Variable integer length cannot exceed 4 bytes');
- },
- readBytes: function(length) {
- var bytes = [];
-
- for (; 0 < length; length--) {
- bytes.push(this.readUint8());
- }
- return bytes;
- },
- pos: function() {
- return '0x' + (this.buffer.byteOffset + this.position).toString(16);
- },
- end: function() {
- return this.position === this.buffer.byteLength;
- },
- };
- startAt = 0;
- }
- // Consume stream till not at start index
- if (0 < startAt) {
- while (startAt--) {
- stream.readUint8();
- }
- }
- // creating the parser object
- return {
- // Read the next event
- next: function() {
- // Check available datas
- if (stream.end()) {
- return null;
- }
- // Creating the event
- event = {
- // Memoize the event index
- index: stream.pos(),
- // Read the delta time
- delta: stream.readVarInt(),
- };
- // Read the eventTypeByte
- eventTypeByte = stream.readUint8();
- if (0xF0 === (eventTypeByte & 0xF0)) {
- // Meta events
- if (eventTypeByte === MIDIEvents.EVENT_META) {
- event.type = MIDIEvents.EVENT_META;
- event.subtype = stream.readUint8();
- event.length = stream.readVarInt();
- switch (event.subtype) {
- case MIDIEvents.EVENT_META_SEQUENCE_NUMBER:
- if (strictMode && 2 !== event.length) {
- throw new Error(stream.pos() + ' Bad metaevent length.');
- }
- event.msb = stream.readUint8();
- event.lsb = stream.readUint8();
- return event;
- case MIDIEvents.EVENT_META_TEXT:
- case MIDIEvents.EVENT_META_COPYRIGHT_NOTICE:
- case MIDIEvents.EVENT_META_TRACK_NAME:
- case MIDIEvents.EVENT_META_INSTRUMENT_NAME:
- case MIDIEvents.EVENT_META_LYRICS:
- case MIDIEvents.EVENT_META_MARKER:
- case MIDIEvents.EVENT_META_CUE_POINT:
- event.data = stream.readBytes(event.length);
- return event;
- case MIDIEvents.EVENT_META_MIDI_CHANNEL_PREFIX:
- if (strictMode && 1 !== event.length) {
- throw new Error(stream.pos() + ' Bad metaevent length.');
- }
- event.prefix = stream.readUint8();
- return event;
- case MIDIEvents.EVENT_META_END_OF_TRACK:
- if (strictMode && 0 !== event.length) {
- throw new Error(stream.pos() + ' Bad metaevent length.');
- }
- return event;
- case MIDIEvents.EVENT_META_SET_TEMPO:
- if (strictMode && 3 !== event.length) {
- throw new Error(stream.pos() + ' Tempo meta event length must be 3.');
- }
- event.tempo = (
- (stream.readUint8() << 16) +
- (stream.readUint8() << 8) +
- stream.readUint8());
- event.tempoBPM = 60000000 / event.tempo;
- return event;
- case MIDIEvents.EVENT_META_SMTPE_OFFSET:
- if (strictMode && 5 !== event.length) {
- throw new Error(stream.pos() + ' Bad metaevent length.');
- }
- event.hour = stream.readUint8();
- if (strictMode && 23 < event.hour) {
- throw new Error(stream.pos() + ' SMTPE offset hour value must' +
- ' be part of 0-23.');
- }
- event.minutes = stream.readUint8();
- if (strictMode && 59 < event.minutes) {
- throw new Error(stream.pos() + ' SMTPE offset minutes value' +
- ' must be part of 0-59.');
- }
- event.seconds = stream.readUint8();
- if (strictMode && 59 < event.seconds) {
- throw new Error(stream.pos() + ' SMTPE offset seconds value' +
- ' must be part of 0-59.');
- }
- event.frames = stream.readUint8();
- if (strictMode && 30 < event.frames) {
- throw new Error(stream.pos() + ' SMTPE offset frames value must' +
- ' be part of 0-30.');
- }
- event.subframes = stream.readUint8();
- if (strictMode && 99 < event.subframes) {
- throw new Error(stream.pos() + ' SMTPE offset subframes value' +
- ' must be part of 0-99.');
- }
- return event;
- case MIDIEvents.EVENT_META_KEY_SIGNATURE:
- if (strictMode && 2 !== event.length) {
- throw new Error(stream.pos() + ' Bad metaevent length.');
- }
- event.key = stream.readUint8();
- if (strictMode && (-7 > event.key || 7 < event.key)) {
- throw new Error(stream.pos() + ' Bad metaevent length.');
- }
- event.scale = stream.readUint8();
- if (strictMode && 0 !== event.scale && 1 !== event.scale) {
- throw new Error(stream.pos() + ' Key signature scale value must' +
- ' be 0 or 1.');
- }
- return event;
- case MIDIEvents.EVENT_META_TIME_SIGNATURE:
- if (strictMode && 4 !== event.length) {
- throw new Error(stream.pos() + ' Bad metaevent length.');
- }
- event.data = stream.readBytes(event.length);
- event.param1 = event.data[0];
- event.param2 = event.data[1];
- event.param3 = event.data[2];
- event.param4 = event.data[3];
- return event;
- case MIDIEvents.EVENT_META_SEQUENCER_SPECIFIC:
- event.data = stream.readBytes(event.length);
- return event;
- default:
- if (strictMode) {
- throw new Error(stream.pos() + ' Unknown meta event type ' +
- '(' + event.subtype.toString(16) + ').');
- }
- event.data = stream.readBytes(event.length);
- return event;
- }
- // System events
- } else if (eventTypeByte === MIDIEvents.EVENT_SYSEX ||
- eventTypeByte === MIDIEvents.EVENT_DIVSYSEX) {
- event.type = eventTypeByte;
- event.length = stream.readVarInt();
- event.data = stream.readBytes(event.length);
- return event;
- // Unknown event, assuming it's system like event
- } else {
- if (strictMode) {
- throw new Error(stream.pos() + ' Unknown event type ' +
- eventTypeByte.toString(16) + ', Delta: ' + event.delta + '.');
- }
- event.type = eventTypeByte;
- event.badsubtype = stream.readVarInt();
- event.length = stream.readUint8();
- event.data = stream.readBytes(event.length);
- return event;
- }
- // MIDI eventsdestination[index++]
- } else {
- // running status
- if (0 === (eventTypeByte & 0x80)) {
- if (!(MIDIEventType)) {
- throw new Error(stream.pos() + ' Running status without previous event');
- }
- MIDIEventParam1 = eventTypeByte;
- } else {
- MIDIEventType = eventTypeByte >> 4;
- MIDIEventChannel = eventTypeByte & 0x0F;
- MIDIEventParam1 = stream.readUint8();
- }
- event.type = MIDIEvents.EVENT_MIDI;
- event.subtype = MIDIEventType;
- event.channel = MIDIEventChannel;
- event.param1 = MIDIEventParam1;
- switch (MIDIEventType) {
- case MIDIEvents.EVENT_MIDI_NOTE_OFF:
- event.param2 = stream.readUint8();
- return event;
- case MIDIEvents.EVENT_MIDI_NOTE_ON:
- event.param2 = stream.readUint8();
-
- // If velocity is 0, it's a note off event in fact
- if (!event.param2) {
- event.subtype = MIDIEvents.EVENT_MIDI_NOTE_OFF;
- event.param2 = 127; // Find a standard telling what to do here
- }
- return event;
- case MIDIEvents.EVENT_MIDI_NOTE_AFTERTOUCH:
- event.param2 = stream.readUint8();
- return event;
- case MIDIEvents.EVENT_MIDI_CONTROLLER:
- event.param2 = stream.readUint8();
- return event;
- case MIDIEvents.EVENT_MIDI_PROGRAM_CHANGE:
- return event;
- case MIDIEvents.EVENT_MIDI_CHANNEL_AFTERTOUCH:
- return event;
- case MIDIEvents.EVENT_MIDI_PITCH_BEND:
- event.param2 = stream.readUint8();
- return event;
- default:
- if (strictMode) {
- throw new Error(stream.pos() + ' Unknown MIDI event type ' +
- '(' + MIDIEventType.toString(16) + ').');
- }
- return event;
- }
- }
- },
- };
-};
-
-// Return the buffer length needed to encode the given events
-MIDIEvents.writeToTrack = function midiEventsWriteToTrack(events, destination, strictMode) {
- var index = 0;
- var i;
- var j;
- var k;
- var l;
-
- // Converting each event to binary MIDI datas
- for (i = 0, j = events.length; i < j; i++) {
- // Writing delta value
- if (events[i].delta >>> 28) {
- throw Error('Event #' + i + ': Maximum delta time value reached (' +
- events[i].delta + '/134217728 max)');
- }
- if (events[i].delta >>> 21) {
- destination[index++] = ((events[i].delta >>> 21) & 0x7F) | 0x80;
- }
- if (events[i].delta >>> 14) {
- destination[index++] = ((events[i].delta >>> 14) & 0x7F) | 0x80;
- }
- if (events[i].delta >>> 7) {
- destination[index++] = ((events[i].delta >>> 7) & 0x7F) | 0x80;
- }
- destination[index++] = (events[i].delta & 0x7F);
- // MIDI Events encoding
- if (events[i].type === MIDIEvents.EVENT_MIDI) {
- // Adding the byte of subtype + channel
- destination[index++] = (events[i].subtype << 4) + events[i].channel;
- // Adding the byte of the first params
- destination[index++] = events[i].param1;
- // Adding a byte for the optionnal second param
- if (-1 !== MIDIEvents.MIDI_2PARAMS_EVENTS.indexOf(events[i].subtype)) {
- destination[index++] = events[i].param2;
- }
- // META / SYSEX events encoding
- } else {
- // Adding the event type byte
- destination[index++] = events[i].type;
- // Adding the META event subtype byte
- if (events[i].type === MIDIEvents.EVENT_META) {
- destination[index++] = events[i].subtype;
- }
- // Writing the event length bytes
- if (events[i].length >>> 28) {
- throw Error('Event #' + i + ': Maximum length reached (' +
- events[i].length + '/134217728 max)');
- }
- if (events[i].length >>> 21) {
- destination[index++] = ((events[i].length >>> 21) & 0x7F) | 0x80;
- }
- if (events[i].length >>> 14) {
- destination[index++] = ((events[i].length >>> 14) & 0x7F) | 0x80;
- }
- if (events[i].length >>> 7) {
- destination[index++] = ((events[i].length >>> 7) & 0x7F) | 0x80;
- }
- destination[index++] = (events[i].length & 0x7F);
- if (events[i].type === MIDIEvents.EVENT_META) {
- switch (events[i].subtype) {
- case MIDIEvents.EVENT_META_SEQUENCE_NUMBER:
- destination[index++] = events[i].msb;
- destination[index++] = events[i].lsb;
- break;
- case MIDIEvents.EVENT_META_TEXT:
- case MIDIEvents.EVENT_META_COPYRIGHT_NOTICE:
- case MIDIEvents.EVENT_META_TRACK_NAME:
- case MIDIEvents.EVENT_META_INSTRUMENT_NAME:
- case MIDIEvents.EVENT_META_LYRICS:
- case MIDIEvents.EVENT_META_MARKER:
- case MIDIEvents.EVENT_META_CUE_POINT:
- for (k = 0, l = events[i].length; k < l; k++) {
- destination[index++] = events[i].data[k];
- }
- break;
- case MIDIEvents.EVENT_META_MIDI_CHANNEL_PREFIX:
- destination[index++] = events[i].prefix;
- break;
- case MIDIEvents.EVENT_META_END_OF_TRACK:
- break;
- case MIDIEvents.EVENT_META_SET_TEMPO:
- destination[index++] = (events[i].tempo >> 16);
- destination[index++] = (events[i].tempo >> 8) & 0xFF;
- destination[index++] = events[i].tempo & 0xFF;
- break;
- case MIDIEvents.EVENT_META_SMTPE_OFFSET:
- if (strictMode && 23 < events[i].hour) {
- throw new Error('Event #' + i + ': SMTPE offset hour value must be' +
- ' part of 0-23.');
- }
- destination[index++] = events[i].hour;
- if (strictMode && 59 < events[i].minutes) {
- throw new Error('Event #' + i + ': SMTPE offset minutes value must' +
- ' be part of 0-59.');
- }
- destination[index++] = events[i].minutes;
- if (strictMode && 59 < events[i].seconds) {
- throw new Error('Event #' + i + ': SMTPE offset seconds value must' +
- ' be part of 0-59.');
- }
- destination[index++] = events[i].seconds;
- if (strictMode && 30 < events[i].frames) {
- throw new Error('Event #' + i + ': SMTPE offset frames amount must' +
- ' be part of 0-30.');
- }
- destination[index++] = events[i].frames;
- if (strictMode && 99 < events[i].subframes) {
- throw new Error('Event #' + i + ': SMTPE offset subframes amount' +
- ' must be part of 0-99.');
- }
- destination[index++] = events[i].subframes;
- break;
- case MIDIEvents.EVENT_META_KEY_SIGNATURE:
- if ('number' != typeof events[i].key || -7 > events[i].key ||
- 7 < events[i].scale) {
- throw new Error('Event #' + i + ':The key signature key must be' +
- ' between -7 and 7');
- }
- if ('number' !== typeof events[i].scale ||
- 0 > events[i].scale || 1 < events[i].scale) {
- throw new Error('Event #' + i + ':' +
- 'The key signature scale must be 0 or 1');
- }
- destination[index++] = events[i].key;
- destination[index++] = events[i].scale;
- break;
- // Not implemented
- case MIDIEvents.EVENT_META_TIME_SIGNATURE:
- case MIDIEvents.EVENT_META_SEQUENCER_SPECIFIC:
- default:
- for (k = 0, l = events[i].length; k < l; k++) {
- destination[index++] = events[i].data[k];
- }
- break;
- }
- // Adding bytes corresponding to the sysex event datas
- } else {
- for (k = 0, l = events[i].length; k < l; k++) {
- destination[index++] = events[i].data[k];
- }
- }
- }
- }
-};
-
-// Return the buffer length needed to encode the given events
-MIDIEvents.getRequiredBufferLength = function(events) {
- var bufferLength = 0;
- var i = 0;
- var j;
-
- // Calculating the track size by adding events lengths
- for (i = 0, j = events.length; i < j; i++) {
- // Computing necessary bytes to encode the delta value
- bufferLength +=
- events[i].delta >>> 21 ? 4 :
- events[i].delta >>> 14 ? 3 :
- events[i].delta >>> 7 ? 2 : 1;
- // MIDI Events have various fixed lengths
- if (events[i].type === MIDIEvents.EVENT_MIDI) {
- // Adding a byte for subtype + channel
- bufferLength++;
- // Adding a byte for the first params
- bufferLength++;
- // Adding a byte for the optionnal second param
- if (-1 !== MIDIEvents.MIDI_2PARAMS_EVENTS.indexOf(events[i].subtype)) {
- bufferLength++;
- }
- // META / SYSEX events lengths are self defined
- } else {
- // Adding a byte for the event type
- bufferLength++;
- // Adding a byte for META events subtype
- if (events[i].type === MIDIEvents.EVENT_META) {
- bufferLength++;
- }
- // Adding necessary bytes to encode the length
- bufferLength +=
- events[i].length >>> 21 ? 4 :
- events[i].length >>> 14 ? 3 :
- events[i].length >>> 7 ? 2 : 1;
- // Adding bytes corresponding to the event length
- bufferLength += events[i].length;
- }
- }
- return bufferLength;
-};
-
-///...........................................
-
-// MIDIFileHeader : Read and edit a MIDI header chunk in a given ArrayBuffer
-function MIDIFileHeader(buffer) {
- let a;
- // No buffer creating him
- if (!buffer) {
- a = new Uint8Array(MIDIFileHeader.HEADER_LENGTH);
- // Adding the header id (MThd)
- a[0] = 0x4D;
- a[1] = 0x54;
- a[2] = 0x68;
- a[3] = 0x64;
- // Adding the header chunk size
- a[4] = 0x00;
- a[5] = 0x00;
- a[6] = 0x00;
- a[7] = 0x06;
- // Adding the file format (1 here cause it's the most commonly used)
- a[8] = 0x00;
- a[9] = 0x01;
- // Adding the track count (1 cause it's a new file)
- a[10] = 0x00;
- a[11] = 0x01;
- // Adding the time division (192 ticks per beat)
- a[12] = 0x00;
- a[13] = 0xC0;
- // saving the buffer
- this.datas = new DataView(a.buffer, 0, MIDIFileHeader.HEADER_LENGTH);
- // Parsing the given buffer
- } else {
- if (!(buffer instanceof ArrayBuffer)) {
- throw Error('Invalid buffer received.');
- }
- this.datas = new DataView(buffer, 0, MIDIFileHeader.HEADER_LENGTH);
- // Reading MIDI header chunk
- if (!(
- 'M' === String.fromCharCode(this.datas.getUint8(0)) &&
- 'T' === String.fromCharCode(this.datas.getUint8(1)) &&
- 'h' === String.fromCharCode(this.datas.getUint8(2)) &&
- 'd' === String.fromCharCode(this.datas.getUint8(3)))) {
- throw new Error('Invalid MIDIFileHeader : MThd prefix not found');
- }
- // Reading chunk length
- if (6 !== this.datas.getUint32(4)) {
- throw new Error('Invalid MIDIFileHeader : Chunk length must be 6');
- }
- }
-}
-
-// Static constants
-MIDIFileHeader.HEADER_LENGTH = 14;
-MIDIFileHeader.FRAMES_PER_SECONDS = 1;
-MIDIFileHeader.TICKS_PER_BEAT = 2;
-
-// MIDI file format
-MIDIFileHeader.prototype.getFormat = function() {
- const format = this.datas.getUint16(8);
- if (0 !== format && 1 !== format && 2 !== format) {
- throw new Error('Invalid MIDI file : MIDI format (' + format + '),' +
- ' format can be 0, 1 or 2 only.');
- }
- return format;
-};
-
-MIDIFileHeader.prototype.setFormat = function(format) {
- if (0 !== format && 1 !== format && 2 !== format) {
- throw new Error('Invalid MIDI format given (' + format + '),' +
- ' format can be 0, 1 or 2 only.');
- }
- this.datas.setUint16(8, format);
-};
-
-// Number of tracks
-MIDIFileHeader.prototype.getTracksCount = function() {
- return this.datas.getUint16(10);
-};
-
-MIDIFileHeader.prototype.setTracksCount = function(n) {
- return this.datas.setUint16(10, n);
-};
-
-// Tick compute
-MIDIFileHeader.prototype.getTickResolution = function(tempo) {
- // Frames per seconds
- if (this.datas.getUint16(12) & 0x8000) {
- return 1000000 / (this.getSMPTEFrames() * this.getTicksPerFrame());
- // Ticks per beat
- }
- // Default MIDI tempo is 120bpm, 500ms per beat
- tempo = tempo || 500000;
- return tempo / this.getTicksPerBeat();
-};
-
-// Time division type
-MIDIFileHeader.prototype.getTimeDivision = function() {
- if (this.datas.getUint16(12) & 0x8000) {
- return MIDIFileHeader.FRAMES_PER_SECONDS;
- }
- return MIDIFileHeader.TICKS_PER_BEAT;
-};
-
-// Ticks per beat
-MIDIFileHeader.prototype.getTicksPerBeat = function() {
- var divisionWord = this.datas.getUint16(12);
- if (divisionWord & 0x8000) {
- throw new Error('Time division is not expressed as ticks per beat.');
- }
- return divisionWord;
-};
-
-MIDIFileHeader.prototype.setTicksPerBeat = function(ticksPerBeat) {
- this.datas.setUint16(12, ticksPerBeat & 0x7FFF);
-};
-
-// Frames per seconds
-MIDIFileHeader.prototype.getSMPTEFrames = function() {
- const divisionWord = this.datas.getUint16(12);
- let smpteFrames;
-
- if (!(divisionWord & 0x8000)) {
- throw new Error('Time division is not expressed as frames per seconds.');
- }
- smpteFrames = divisionWord & 0x7F00;
- if (-1 === [24, 25, 29, 30].indexOf(smpteFrames)) {
- throw new Error('Invalid SMPTE frames value (' + smpteFrames + ').');
- }
- return 29 === smpteFrames ? 29.97 : smpteFrames;
-};
-
-MIDIFileHeader.prototype.getTicksPerFrame = function() {
- const divisionWord = this.datas.getUint16(12);
-
- if (!(divisionWord & 0x8000)) {
- throw new Error('Time division is not expressed as frames per seconds.');
- }
- return divisionWord & 0x00FF;
-};
-
-MIDIFileHeader.prototype.setSMTPEDivision = function(smpteFrames, ticksPerFrame) {
- if (29.97 === smpteFrames) {
- smpteFrames = 29;
- }
- if (-1 === [24, 25, 29, 30].indexOf(smpteFrames)) {
- throw new Error('Invalid SMPTE frames value given (' + smpteFrames + ').');
- }
- if (0 > ticksPerFrame || 0xFF < ticksPerFrame) {
- throw new Error('Invalid ticks per frame value given (' + smpteFrames + ').');
- }
- this.datas.setUint8(12, 0x80 | smpteFrames);
- this.datas.setUint8(13, ticksPerFrame);
-};
-
-///...........................................
-// MIDIFileTrack : Read and edit a MIDI track chunk in a given ArrayBuffer
-function MIDIFileTrack(buffer, start) {
- let a;
- let trackLength;
-
- // no buffer, creating him
- if (!buffer) {
- a = new Uint8Array(12);
- // Adding the empty track header (MTrk)
- a[0] = 0x4D;
- a[1] = 0x54;
- a[2] = 0x72;
- a[3] = 0x6B;
- // Adding the empty track size (4)
- a[4] = 0x00;
- a[5] = 0x00;
- a[6] = 0x00;
- a[7] = 0x04;
- // Adding the track end event
- a[8] = 0x00;
- a[9] = 0xFF;
- a[10] = 0x2F;
- a[11] = 0x00;
- // Saving the buffer
- this.datas = new DataView(a.buffer, 0, MIDIFileTrack.HDR_LENGTH + 4);
- // parsing the given buffer
- } else {
- if (!(buffer instanceof ArrayBuffer)) {
- throw new Error('Invalid buffer received.');
- }
- // Buffer length must size at least like an empty track (8+3bytes)
- if (12 > buffer.byteLength - start) {
- throw new Error('Invalid MIDIFileTrack (0x' + start.toString(16) + ') :' +
- ' Buffer length must size at least 12bytes');
- }
- // Creating a temporary view to read the track header
- this.datas = new DataView(buffer, start, MIDIFileTrack.HDR_LENGTH);
- // Reading MIDI track header chunk
- if (!(
- 'M' === String.fromCharCode(this.datas.getUint8(0)) &&
- 'T' === String.fromCharCode(this.datas.getUint8(1)) &&
- 'r' === String.fromCharCode(this.datas.getUint8(2)) &&
- 'k' === String.fromCharCode(this.datas.getUint8(3)))) {
- throw new Error('Invalid MIDIFileTrack (0x' + start.toString(16) + ') :' +
- ' MTrk prefix not found');
- }
- // Reading the track length
- trackLength = this.getTrackLength();
- if (buffer.byteLength - start < trackLength) {
- throw new Error('Invalid MIDIFileTrack (0x' + start.toString(16) + ') :' +
- ' The track size exceed the buffer length.');
- }
- // Creating the final DataView
- this.datas = new DataView(buffer, start, MIDIFileTrack.HDR_LENGTH + trackLength);
- // Trying to find the end of track event
- if (!(
- 0xFF === this.datas.getUint8(MIDIFileTrack.HDR_LENGTH + (trackLength - 3)) &&
- 0x2F === this.datas.getUint8(MIDIFileTrack.HDR_LENGTH + (trackLength - 2)) &&
- 0x00 === this.datas.getUint8(MIDIFileTrack.HDR_LENGTH + (trackLength - 1)))) {
- throw new Error('Invalid MIDIFileTrack (0x' + start.toString(16) + ') :' +
- ' No track end event found at the expected index' +
- ' (' + (MIDIFileTrack.HDR_LENGTH + (trackLength - 1)).toString(16) + ').');
- }
- }
-}
-
-// Static constants
-MIDIFileTrack.HDR_LENGTH = 8;
-
-// Track length
-MIDIFileTrack.prototype.getTrackLength = function() {
- return this.datas.getUint32(4);
-};
-
-MIDIFileTrack.prototype.setTrackLength = function(trackLength) {
- return this.datas.setUint32(4, trackLength);
-};
-
-// Read track contents
-MIDIFileTrack.prototype.getTrackContent = function() {
- return new DataView(this.datas.buffer,
- this.datas.byteOffset + MIDIFileTrack.HDR_LENGTH,
- this.datas.byteLength - MIDIFileTrack.HDR_LENGTH);
-};
-
-// Set track content
-MIDIFileTrack.prototype.setTrackContent = function(dataView) {
- let origin;
- let destination;
- let i;
- let j;
- // Calculating the track length
- const trackLength = dataView.byteLength - dataView.byteOffset;
-
- // Track length must size at least like an empty track (4bytes)
- if (4 > trackLength) {
- throw new Error('Invalid track length, must size at least 4bytes');
- }
- this.datas = new DataView(
- new Uint8Array(MIDIFileTrack.HDR_LENGTH + trackLength).buffer);
- // Adding the track header (MTrk)
- this.datas.setUint8(0, 0x4D); // M
- this.datas.setUint8(1, 0x54); // T
- this.datas.setUint8(2, 0x72); // r
- this.datas.setUint8(3, 0x6B); // k
- // Adding the track size
- this.datas.setUint32(4, trackLength);
- // Copying the content
- origin = new Uint8Array(dataView.buffer, dataView.byteOffset,
- dataView.byteLength);
- destination = new Uint8Array(this.datas.buffer,
- MIDIFileTrack.HDR_LENGTH,
- trackLength);
- for (i = 0, j = origin.length; i < j; i++) {
- destination[i] = origin[i];
- }
-};
-
-///...........................................
-
-
-// MIDIFile : Read (and soon edit) a MIDI file in a given ArrayBuffer
-
-
-function ensureArrayBuffer(buf) {
- if (buf) {
- if (buf instanceof ArrayBuffer) {
- return buf;
- }
- if (buf instanceof Uint8Array) {
- // Copy/convert to standard Uint8Array, because derived classes like
- // node.js Buffers might have unexpected data in the .buffer property.
- return new Uint8Array(buf).buffer;
- }
- }
- throw new Error('Unsupported buffer type, need ArrayBuffer or Uint8Array');
-}
-
-// Constructor
-function MIDIFile(buffer, strictMode) {
- var track;
- var curIndex;
- var i;
- var j;
-
- // If not buffer given, creating a new MIDI file
- if (!buffer) {
- // Creating the content
- this.header = new MIDIFileHeader();
- this.tracks = [new MIDIFileTrack()];
- // if a buffer is provided, parsing him
- } else {
- buffer = ensureArrayBuffer(buffer);
- // Minimum MIDI file size is a headerChunk size (14bytes)
- // and an empty track (8+3bytes)
- if (25 > buffer.byteLength) {
- throw new Error('A buffer of a valid MIDI file must have, at least, a' +
- ' size of 25bytes.');
- }
- // Reading header
- this.header = new MIDIFileHeader(buffer, strictMode);
- this.tracks = [];
- curIndex = MIDIFileHeader.HEADER_LENGTH;
- // Reading tracks
- for (i = 0, j = this.header.getTracksCount(); i < j; i++) {
- // Testing the buffer length
- if (strictMode && curIndex >= buffer.byteLength - 1) {
- throw new Error('Couldn\'t find datas corresponding to the track #' + i + '.');
- }
- // Creating the track object
- track = new MIDIFileTrack(buffer, curIndex, strictMode);
- this.tracks.push(track);
- // Updating index to the track end
- curIndex += track.getTrackLength() + 8;
- }
- // Testing integrity : curIndex should be at the end of the buffer
- if (strictMode && curIndex !== buffer.byteLength) {
- throw new Error('It seems that the buffer contains too much datas.');
- }
- }
-}
-MIDIFile.prototype.startNote = function(event, song) {
- var track = this.takeTrack(event.channel, song);
- track.notes.push({
- when: event.playTime / 1000,
- pitch: event.param1,
- duration: 0.0000001,
- slides: []
- });
-}
-MIDIFile.prototype.closeNote = function(event, song) {
- var track = this.takeTrack(event.channel, song);
- for (var i = 0; i < track.notes.length; i++) {
- if (track.notes[i].duration == 0.0000001 //
- &&
- track.notes[i].pitch == event.param1 //
- &&
- track.notes[i].when < event.playTime / 1000) {
- track.notes[i].duration = event.playTime / 1000 - track.notes[i].when;
- break;
- }
- }
-}
-MIDIFile.prototype.addSlide = function(event, song) {
- var track = this.takeTrack(event.channel, song);
- for (var i = 0; i < track.notes.length; i++) {
- if (track.notes[i].duration == 0.0000001 //
- &&
- track.notes[i].when < event.playTime / 1000) {
- //if (Math.abs(track.notes[i].shift) < Math.abs(event.param2 - 64) / 6) {
- //track.notes[i].shift = (event.param2 - 64) / 6;
- //console.log(event.param2-64);
- //}
- track.notes[i].slides.push({
- pitch: track.notes[i].pitch + (event.param2 - 64) / 6,
- when: event.playTime / 1000 - track.notes[i].when
- });
- }
- }
-}
-MIDIFile.prototype.startDrum = function(event, song) {
- var beat = this.takeBeat(event.param1, song);
- beat.notes.push({
- when: event.playTime / 1000
- });
-}
-MIDIFile.prototype.takeTrack = function(n, song) {
- for (var i = 0; i < song.tracks.length; i++) {
- if (song.tracks[i].n == n) {
- return song.tracks[i];
- }
- }
- var track = {
- n: n,
- notes: [],
- volume: 1,
- program: 0
- };
- song.tracks.push(track);
- return track;
-}
-MIDIFile.prototype.takeBeat = function(n, song) {
- for (var i = 0; i < song.beats.length; i++) {
- if (song.beats[i].n == n) {
- return song.beats[i];
- }
- }
- var beat = {
- n: n,
- notes: [],
- volume: 1
- };
- song.beats.push(beat);
- return beat;
-}
-MIDIFile.prototype.parseSong = function() {
- var song = {
- duration: 0,
- tracks: [],
- beats: []
- };
- var events = this.getMidiEvents();
- console.log(events);
- for (var i = 0; i < events.length; i++) {
- //console.log(' next',events[i]);
- if (song.duration < events[i].playTime / 1000) {
- song.duration = events[i].playTime / 1000;
- }
- if (events[i].subtype == MIDIEvents.EVENT_MIDI_NOTE_ON) {
- if (events[i].channel == 9) {
- if (events[i].param1 >= 35 && events[i].param1 <= 81) {
- this.startDrum(events[i], song);
- } else {
- console.log('wrong drum', events[i]);
- }
- } else {
- if (events[i].param1 >= 0 && events[i].param1 <= 127) {
- //console.log('start', events[i].param1);
- this.startNote(events[i], song);
- } else {
- console.log('wrong tone', events[i]);
- }
- }
- } else {
- if (events[i].subtype == MIDIEvents.EVENT_MIDI_NOTE_OFF) {
- if (events[i].channel != 9) {
- this.closeNote(events[i], song);
- //console.log('close', events[i].param1);
- }
- } else {
- if (events[i].subtype == MIDIEvents.EVENT_MIDI_PROGRAM_CHANGE) {
- if (events[i].channel != 9) {
- var track = this.takeTrack(events[i].channel, song);
- track.program = events[i].param1;
- } else {
- console.log('skip program for drums');
- }
- } else {
- if (events[i].subtype == MIDIEvents.EVENT_MIDI_CONTROLLER) {
- if (events[i].param1 == 7) {
- if (events[i].channel != 9) {
- var track = this.takeTrack(events[i].channel, song);
- track.volume = events[i].param2 / 127 || 0.000001;
- //console.log('volume', track.volume,'for',events[i].channel);
- }
- } else {
- //console.log('controller', events[i]);
- }
- } else {
- if (events[i].subtype == MIDIEvents.EVENT_MIDI_PITCH_BEND) {
- //console.log(' bend', events[i].channel, events[i].param1, events[i].param2);
- this.addSlide(events[i], song);
- } else {
- console.log('unknown', events[i].channel, events[i]);
- };
- }
- }
- }
- }
- }
- return song;
-}
-// Events reading helpers
-MIDIFile.prototype.getEvents = function(type, subtype) {
- var events;
- var event;
- var playTime = 0;
- var filteredEvents = [];
- var format = this.header.getFormat();
- var tickResolution = this.header.getTickResolution();
- var i;
- var j;
- var trackParsers;
- var smallestDelta;
-
- // Reading events
- // if the read is sequential
- if (1 !== format || 1 === this.tracks.length) {
- for (i = 0, j = this.tracks.length; i < j; i++) {
- // reset playtime if format is 2
- playTime = (2 === format && playTime ? playTime : 0);
- events = MIDIEvents.createParser(this.tracks[i].getTrackContent(), 0, false);
- // loooping through events
- event = events.next();
- while (event) {
- playTime += event.delta ? (event.delta * tickResolution) / 1000 : 0;
- if (event.type === MIDIEvents.EVENT_META) {
- // tempo change events
- if (event.subtype === MIDIEvents.EVENT_META_SET_TEMPO) {
- tickResolution = this.header.getTickResolution(event.tempo);
- }
- }
- // push the asked events
- if (((!type) || event.type === type) &&
- ((!subtype) || (event.subtype && event.subtype === subtype))) {
- event.playTime = playTime;
- filteredEvents.push(event);
- }
- event = events.next();
- }
- }
- // the read is concurrent
- } else {
- trackParsers = [];
- smallestDelta = -1;
-
- // Creating parsers
- for (i = 0, j = this.tracks.length; i < j; i++) {
- trackParsers[i] = {};
- trackParsers[i].parser = MIDIEvents.createParser(
- this.tracks[i].getTrackContent(), 0, false);
- trackParsers[i].curEvent = trackParsers[i].parser.next();
- }
- // Filling events
- do {
- smallestDelta = -1;
- // finding the smallest event
- for (i = 0, j = trackParsers.length; i < j; i++) {
- if (trackParsers[i].curEvent) {
- if (-1 === smallestDelta || trackParsers[i].curEvent.delta <
- trackParsers[smallestDelta].curEvent.delta) {
- smallestDelta = i;
- }
- }
- }
- if (-1 !== smallestDelta) {
- // removing the delta of previous events
- for (i = 0, j = trackParsers.length; i < j; i++) {
- if (i !== smallestDelta && trackParsers[i].curEvent) {
- trackParsers[i].curEvent.delta -= trackParsers[smallestDelta].curEvent.delta;
- }
- }
- // filling values
- event = trackParsers[smallestDelta].curEvent;
- playTime += (event.delta ? (event.delta * tickResolution) / 1000 : 0);
- if (event.type === MIDIEvents.EVENT_META) {
- // tempo change events
- if (event.subtype === MIDIEvents.EVENT_META_SET_TEMPO) {
- tickResolution = this.header.getTickResolution(event.tempo);
- }
- }
- // push midi events
- if (((!type) || event.type === type) &&
- ((!subtype) || (event.subtype && event.subtype === subtype))) {
- event.playTime = playTime;
- event.track = smallestDelta;
- filteredEvents.push(event);
- }
- // getting next event
- trackParsers[smallestDelta].curEvent = trackParsers[smallestDelta].parser.next();
- }
- } while (-1 !== smallestDelta);
- }
- return filteredEvents;
-};
-
-MIDIFile.prototype.getMidiEvents = function() {
- return this.getEvents(MIDIEvents.EVENT_MIDI);
-};
-
-MIDIFile.prototype.getLyrics = function() {
- var events = this.getEvents(MIDIEvents.EVENT_META);
- var texts = [];
- var lyrics = [];
- var event;
- var i;
- var j;
-
- for (i = 0, j = events.length; i < j; i++) {
- event = events[i];
- // Lyrics
- if (event.subtype === MIDIEvents.EVENT_META_LYRICS) {
- lyrics.push(event);
- // Texts
- } else if (event.subtype === MIDIEvents.EVENT_META_TEXT) {
- // Ignore special texts
- if ('@' === String.fromCharCode(event.data[0])) {
- if ('T' === String.fromCharCode(event.data[1])) {
- // console.log('Title : ' + event.text.substring(2));
- } else if ('I' === String.fromCharCode(event.data[1])) {
- // console.log('Info : ' + event.text.substring(2));
- } else if ('L' === String.fromCharCode(event.data[1])) {
- // console.log('Lang : ' + event.text.substring(2));
- }
- // karaoke text follows, remove all previous text
- } else if (0 === String.fromCharCode.apply(String, event.data).indexOf('words')) {
- texts.length = 0;
- // console.log('Word marker found');
- // Karaoke texts
- // If playtime is greater than 0
- } else if (0 !== event.playTime) {
- texts.push(event);
- }
- }
- }
- // Choosing the right lyrics
- if (2 < lyrics.length) {
- texts = lyrics;
- } else if (!texts.length) {
- texts = [];
- }
- // Convert texts and detect encoding
- try {
- texts.forEach(function(event) {
- event.text = UTF8.getStringFromBytes(event.data, 0, event.length, true);
- });
- } catch (e) {
- texts.forEach(function(event) {
- event.text = event.data.map(function(c) {
- return String.fromCharCode(c);
- }).join('');
- });
- }
- return texts;
-};
-
-// Basic events reading
-MIDIFile.prototype.getTrackEvents = function(index) {
- var event;
- var events = [];
- var parser;
- if (index > this.tracks.length || 0 > index) {
- throw Error('Invalid track index (' + index + ')');
- }
- parser = MIDIEvents.createParser(
- this.tracks[index].getTrackContent(), 0, false);
- event = parser.next();
- do {
- events.push(event);
- event = parser.next();
- } while (event);
- return events;
-};
-
-// Basic events writting
-MIDIFile.prototype.setTrackEvents = function(index, events) {
- var bufferLength;
- var destination;
-
- if (index > this.tracks.length || 0 > index) {
- throw Error('Invalid track index (' + index + ')');
- }
- if ((!events) || (!events.length)) {
- throw Error('A track must contain at least one event, none given.');
- }
- bufferLength = MIDIEvents.getRequiredBufferLength(events);
- destination = new Uint8Array(bufferLength);
- MIDIEvents.writeToTrack(events, destination);
- this.tracks[index].setTrackContent(destination);
-};
-
-// Remove a track
-MIDIFile.prototype.deleteTrack = function(index) {
- if (index > this.tracks.length || 0 > index) {
- throw Error('Invalid track index (' + index + ')');
- }
- this.tracks.splice(index, 1);
- this.header.setTracksCount(this.tracks.length);
-};
-
-// Add a track
-MIDIFile.prototype.addTrack = function(index) {
- var track;
-
- if (index > this.tracks.length || 0 > index) {
- throw Error('Invalid track index (' + index + ')');
- }
- track = new MIDIFileTrack();
- if (index === this.tracks.length) {
- this.tracks.push(track);
- } else {
- this.tracks.splice(index, 0, track);
- }
- this.header.setTracksCount(this.tracks.length);
-};
-
-// Retrieve the content in a buffer
-MIDIFile.prototype.getContent = function() {
- var bufferLength;
- var destination;
- var origin;
- var i;
- var j;
- var k;
- var l;
- var m;
- var n;
-
- // Calculating the buffer content
- // - initialize with the header length
- bufferLength = MIDIFileHeader.HEADER_LENGTH;
- // - add tracks length
- for (i = 0, j = this.tracks.length; i < j; i++) {
- bufferLength += this.tracks[i].getTrackLength() + 8;
- }
- // Creating the destination buffer
- destination = new Uint8Array(bufferLength);
- // Adding header
- origin = new Uint8Array(this.header.datas.buffer,
- this.header.datas.byteOffset,
- MIDIFileHeader.HEADER_LENGTH);
- for (i = 0, j = MIDIFileHeader.HEADER_LENGTH; i < j; i++) {
- destination[i] = origin[i];
- }
- // Adding tracks
- for (k = 0, l = this.tracks.length; k < l; k++) {
- origin = new Uint8Array(this.tracks[k].datas.buffer,
- this.tracks[k].datas.byteOffset,
- this.tracks[k].datas.byteLength);
- for (m = 0, n = this.tracks[k].datas.byteLength; m < n; m++) {
- destination[i++] = origin[m];
- }
- }
- return destination.buffer;
-};
-
-// Exports Track/Header constructors
-MIDIFile.Header = MIDIFileHeader;
-MIDIFile.Track = MIDIFileTrack;
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/WebAudioFontPlayer.js b/Program Files/Midi Media Player/WebAudioFontPlayer.js
deleted file mode 100644
index 90489e3..0000000
--- a/Program Files/Midi Media Player/WebAudioFontPlayer.js
+++ /dev/null
@@ -1,587 +0,0 @@
-(function() {
- function e(t, n, r) {
- function s(o, u) {
- if (!n[o]) {
- if (!t[o]) {
- var a = typeof require == "function" && require;
- if (!u && a) return a(o, !0);
- if (i) return i(o, !0);
- var f = new Error("Cannot find module '" + o + "'");
- throw f.code = "MODULE_NOT_FOUND", f
- }
- var l = n[o] = {
- exports: {}
- };
- t[o][0].call(l.exports, function(e) {
- var n = t[o][1][e];
- return s(n ? n : e)
- }, l, l.exports, e, t, n, r)
- }
- return n[o].exports
- }
- var i = typeof require == "function" && require;
- for (var o = 0; o < r.length; o++) s(r[o]);
- return s
- }
- return e
-})()({
- 1: [function(require, module, exports) {
- 'use strict'
-
- function WebAudioFontChannel(audioContext) {
- this.audioContext = audioContext;
- this.bandEqualizer = function(from, frequency) {
- var filter = this.audioContext.createBiquadFilter();
- filter.frequency.setTargetAtTime(frequency, 0, 0.0001);
- filter.type = "peaking";
- filter.gain.setTargetAtTime(0, 0, 0.0001);
- filter.Q.setTargetAtTime(1.0, 0, 0.0001);
- from.connect(filter);
- return filter;
- };
- this.input = this.audioContext.createDynamicsCompressor();
- this.input.threshold.setValueAtTime(-3, 0); // = -3; //-50
- this.input.knee.setValueAtTime(30, 0); //40
- this.input.ratio.setValueAtTime(12, 0); //12
- //this.input.reduction.value = -20; //-20
- this.input.attack.setValueAtTime(0.05, 0); //0
- this.input.release.setValueAtTime(0.08, 0); //0.25
- this.band32 = this.bandEqualizer(this.input, 32);
- this.band64 = this.bandEqualizer(this.band32, 64);
- this.band128 = this.bandEqualizer(this.band64, 128);
- this.band256 = this.bandEqualizer(this.band128, 256);
- this.band512 = this.bandEqualizer(this.band256, 512);
- this.band1k = this.bandEqualizer(this.band512, 1024);
- this.band2k = this.bandEqualizer(this.band1k, 2048);
- this.band4k = this.bandEqualizer(this.band2k, 4096);
- this.band8k = this.bandEqualizer(this.band4k, 8192);
- this.band16k = this.bandEqualizer(this.band8k, 16384);
- this.output = audioContext.createGain();
- this.band16k.connect(this.output);
- return this;
- }
- if (typeof module === 'object' && module.exports) {
- module.exports = WebAudioFontChannel;
- }
- if (typeof window !== 'undefined') {
- window.WebAudioFontChannel = WebAudioFontChannel;
- }
-
- }, {}],
- 2: [function(require, module, exports) {
- 'use strict'
-
- function WebAudioFontLoader(player) {
- this.player = player;
- this.cached = [];
- this.startLoad = function(audioContext, filePath, variableName) {
- if (window[variableName]) {
- return;
- }
- for (var i = 0; i < this.cached.length; i++) {
- if (this.cached[i].variableName == variableName) {
- return;
- }
- }
- this.cached.push({
- filePath: filePath,
- variableName: variableName
- });
- var r = document.createElement('script');
- r.setAttribute("type", "text/javascript");
- r.setAttribute("src", filePath);
- document.getElementsByTagName("head")[0].appendChild(r);
- this.decodeAfterLoading(audioContext, variableName);
- };
- this.decodeAfterLoading = function(audioContext, variableName) {
- var me = this;
- this.waitOrFinish(variableName, function() {
- me.player.adjustPreset(audioContext, window[variableName]);
- });
- };
- this.waitOrFinish = function(variableName, onFinish) {
- if (window[variableName]) {
- onFinish();
- } else {
- var me = this;
- setTimeout(function() {
- me.waitOrFinish(variableName, onFinish);
- }, 111);
- }
- };
- this.loaded = function(variableName) {
- if (!(window[variableName])) {
- return false;
- }
- var preset = window[variableName];
- for (var i = 0; i < preset.zones.length; i++) {
- if (!(preset.zones[i].buffer)) {
- return false;
- }
- }
- return true;
- };
- this.progress = function() {
- if (this.cached.length > 0) {
- for (var k = 0; k < this.cached.length; k++) {
- if (!this.loaded(this.cached[k].variableName)) {
- return k / this.cached.length;
- }
- }
- return 1;
- } else {
- return 1;
- }
- };
- this.waitLoad = function(onFinish) {
- var me = this;
- if (this.progress() >= 1) {
- onFinish();
- } else {
- setTimeout(function() {
- me.waitLoad(onFinish);
- }, 333);
- }
- };
- this.instrumentTitles = function() {
- if (!(this.instrumentNamesArray)) {
- var insNames = [];
- insNames[0] = "Acoustic Grand Piano: Piano";
- this.instrumentNamesArray = insNames;
- }
- return this.instrumentNamesArray;
- };
- this.instrumentKeys = function() {
- if (!(this.instrumentKeyArray)) {
- this.instrumentKeyArray = [
- '0000_Aspirin_sf2_file'
- ];
- }
- return this.instrumentKeyArray;
- };
- this.instrumentInfo = function(n) {
- var key = this.instrumentKeys()[n];
- var p = 1 * key.substr(0, 3);
- return {
- variable: '_tone_' + key,
- url: 'sound/' + key + '.js',
- title: this.instrumentTitles()[p]
- };
- };
- this.findInstrument = function(program) {
- if (!(this.choosenInfos)) {
- this.choosenInfos = [
- [1, 2] //Accoustic Grand Piano
- ];
- }
- /*
- for (var i = 0; i < this.choosenInfos.length; i++) {
- if (program+1 == this.choosenInfos[i][0]) {
- return this.choosenInfos[i][1]-1;
- }
- }
- */
- for (var i = 0; i < this.instrumentKeys().length; i++) {
- if (program == 1 * this.instrumentKeys()[i].substring(0, 3)) {
- return i;
- }
- }
- return 0;
- };
- this.drumTitles = function() {
- if (!(this.drumNamesArray)) {
- var drumNames = [];
- this.drumNamesArray = drumNames;
- }
- return this.drumNamesArray;
- };
- this.drumKeys = function() {
- if (!(this.drumKeyArray)) {
- this.drumKeyArray = [
- ''
- ];
- }
- return this.drumKeyArray;
- };
- this.drumInfo = function(n) {
- var key = this.drumKeys()[n];
- var p = 1 * key.substr(0, 2);
- return {
- variable: '_drum_' + key,
- url: 'sound/128' + key + '.js',
- pitch: p,
- title: this.drumTitles()[p]
- };
- };
- this.findDrum = function(nn) {
- for (var i = 0; i < this.drumKeys().length; i++) {
- if (nn == 1 * this.drumKeys()[i].substring(0, 2)) {
- return i;
- }
- }
- return 0;
- }
- return this;
- }
- if (typeof module === 'object' && module.exports) {
- module.exports = WebAudioFontLoader;
- }
- if (typeof window !== 'undefined') {
- window.WebAudioFontLoader = WebAudioFontLoader;
- }
- }, {}],
- 3: [function(require, module, exports) {
- 'use strict'
- var WebAudioFontLoader = require('./loader');
- var WebAudioFontChannel = require('./channel');
- var WebAudioFontReverberator = require('./reverberator')
-
- function WebAudioFontPlayer() {
- this.envelopes = [];
- this.loader = new WebAudioFontLoader(this);
- this.onCacheFinish = null;
- this.onCacheProgress = null;
- this.afterTime = 0.05;
- this.nearZero = 0.000001;
- this.createChannel = function(audioContext) {
- return new WebAudioFontChannel(audioContext);
- };
- this.createReverberator = function(audioContext) {
- return new WebAudioFontReverberator(audioContext);
- };
- this.limitVolume = function(volume) {
- if (volume) {
- volume = 1.0 * volume;
- } else {
- volume = 0.5;
- }
- return volume;
- };
- this.queueChord = function(audioContext, target, preset, when, pitches, duration, volume, slides) {
- volume = this.limitVolume(volume);
- for (var i = 0; i < pitches.length; i++) {
- this.queueWaveTable(audioContext, target, preset, when, pitches[i], duration, volume - Math.random() * 0.01, slides);
- }
- };
- this.queueStrumUp = function(audioContext, target, preset, when, pitches, duration, volume, slides) {
- pitches.sort(function(a, b) {
- return b - a;
- });
- this.queueStrum(audioContext, target, preset, when, pitches, duration, volume, slides);
- };
- this.queueStrumDown = function(audioContext, target, preset, when, pitches, duration, volume, slides) {
- pitches.sort(function(a, b) {
- return a - b;
- });
- this.queueStrum(audioContext, target, preset, when, pitches, duration, volume, slides);
- };
- this.queueStrum = function(audioContext, target, preset, when, pitches, duration, volume, slides) {
- volume = this.limitVolume(volume);
- if (when < audioContext.currentTime) {
- when = audioContext.currentTime;
- }
- for (var i = 0; i < pitches.length; i++) {
- this.queueWaveTable(audioContext, target, preset, when + i * 0.01, pitches[i], duration, volume - Math.random() * 0.01, slides);
- volume = 0.9 * volume;
- }
- };
- this.queueSnap = function(audioContext, target, preset, when, pitches, duration, volume, slides) {
- volume = this.limitVolume(volume);
- volume = 1.5 * (volume || 1.0);
- duration = 0.05;
- this.queueChord(audioContext, target, preset, when, pitches, duration, volume, slides);
- };
- this.queueWaveTable = function(audioContext, target, preset, when, pitch, duration, volume, slides) {
- if (audioContext.state == 'suspended') {
- audioContext.resume();
- }
- volume = this.limitVolume(volume);
- var zone = this.findZone(audioContext, preset, pitch);
- if (!(zone.buffer)) {
- return;
- }
- var baseDetune = zone.originalPitch - 100.0 * zone.coarseTune - zone.fineTune;
- var playbackRate = 1.0 * Math.pow(2, (100.0 * pitch - baseDetune) / 1200.0);
- var sampleRatio = zone.sampleRate / audioContext.sampleRate;
- var startWhen = when;
- if (startWhen < audioContext.currentTime) {
- startWhen = audioContext.currentTime;
- }
- var waveDuration = duration + this.afterTime;
- var loop = true;
- if (zone.loopStart < 1 || zone.loopStart >= zone.loopEnd) {
- loop = false;
- }
- if (!loop) {
- if (waveDuration > zone.buffer.duration / playbackRate) {
- waveDuration = zone.buffer.duration / playbackRate;
- }
- }
- var envelope = this.findEnvelope(audioContext, target, startWhen, waveDuration);
- this.setupEnvelope(audioContext, envelope, zone, volume, startWhen, waveDuration, duration);
- envelope.audioBufferSourceNode = audioContext.createBufferSource();
- envelope.audioBufferSourceNode.playbackRate.setValueAtTime(playbackRate, 0);
- if (slides) {
- if (slides.length > 0) {
- envelope.audioBufferSourceNode.playbackRate.setValueAtTime(playbackRate, when);
- for (var i = 0; i < slides.length; i++) {
- var newPlaybackRate = 1.0 * Math.pow(2, (100.0 * slides[i].pitch - baseDetune) / 1200.0);
- var newWhen = when + slides[i].when;
- envelope.audioBufferSourceNode.playbackRate.linearRampToValueAtTime(newPlaybackRate, newWhen);
- }
- }
- }
- envelope.audioBufferSourceNode.buffer = zone.buffer;
- if (loop) {
- envelope.audioBufferSourceNode.loop = true;
- envelope.audioBufferSourceNode.loopStart = zone.loopStart / zone.sampleRate + zone.delay;
- envelope.audioBufferSourceNode.loopEnd = zone.loopEnd / zone.sampleRate + zone.delay;
- } else {
- envelope.audioBufferSourceNode.loop = false;
- }
- envelope.audioBufferSourceNode.connect(envelope);
- envelope.audioBufferSourceNode.start(startWhen, zone.delay);
- envelope.audioBufferSourceNode.stop(startWhen + waveDuration);
- envelope.when = startWhen;
- envelope.duration = waveDuration;
- envelope.pitch = pitch;
- envelope.preset = preset;
- return envelope;
- };
- this.noZeroVolume = function(n) {
- if (n > this.nearZero) {
- return n;
- } else {
- return this.nearZero;
- }
- };
- this.setupEnvelope = function(audioContext, envelope, zone, volume, when, sampleDuration, noteDuration) {
- envelope.gain.setValueAtTime(this.noZeroVolume(0), audioContext.currentTime);
- var lastTime = 0;
- var lastVolume = 0;
- var duration = noteDuration;
- var ahdsr = zone.ahdsr;
- if (sampleDuration < duration + this.afterTime) {
- duration = sampleDuration - this.afterTime;
- }
- if (ahdsr) {
- if (!(ahdsr.length > 0)) {
- ahdsr = [{
- duration: 0,
- volume: 1
- }, {
- duration: 0.5,
- volume: 1
- }, {
- duration: 1.5,
- volume: 0.5
- }, {
- duration: 3,
- volume: 0
- }];
- }
- } else {
- ahdsr = [{
- duration: 0,
- volume: 1
- }, {
- duration: duration,
- volume: 1
- }];
- }
- envelope.gain.cancelScheduledValues(when);
- envelope.gain.setValueAtTime(this.noZeroVolume(ahdsr[0].volume * volume), when);
- for (var i = 0; i < ahdsr.length; i++) {
- if (ahdsr[i].duration > 0) {
- if (ahdsr[i].duration + lastTime > duration) {
- var r = 1 - (ahdsr[i].duration + lastTime - duration) / ahdsr[i].duration;
- var n = lastVolume - r * (lastVolume - ahdsr[i].volume);
- envelope.gain.linearRampToValueAtTime(this.noZeroVolume(volume * n), when + duration);
- break;
- }
- lastTime = lastTime + ahdsr[i].duration;
- lastVolume = ahdsr[i].volume;
- envelope.gain.linearRampToValueAtTime(this.noZeroVolume(volume * lastVolume), when + lastTime);
- }
- }
- envelope.gain.linearRampToValueAtTime(this.noZeroVolume(0), when + duration + this.afterTime);
- };
- this.numValue = function(aValue, defValue) {
- if (typeof aValue === "number") {
- return aValue;
- } else {
- return defValue;
- }
- };
- this.findEnvelope = function(audioContext, target, when, duration) {
- var envelope = null;
- for (var i = 0; i < this.envelopes.length; i++) {
- var e = this.envelopes[i];
- if (e.target == target && audioContext.currentTime > e.when + e.duration + 0.001) {
- try {
- e.audioBufferSourceNode.disconnect();
- e.audioBufferSourceNode.stop(0);
- e.audioBufferSourceNode = null;
- } catch (x) {
- //audioBufferSourceNode is dead already
- }
- envelope = e;
- break;
- }
- }
- if (!(envelope)) {
- envelope = audioContext.createGain();
- envelope.target = target;
- envelope.connect(target);
- envelope.cancel = function() {
- if (envelope.when + envelope.duration > audioContext.currentTime) {
- envelope.gain.cancelScheduledValues(0);
- envelope.gain.setTargetAtTime(0.00001, audioContext.currentTime, 0.1);
- envelope.when = audioContext.currentTime + 0.00001;
- envelope.duration = 0;
- }
- };
- this.envelopes.push(envelope);
- }
- return envelope;
- };
- this.adjustPreset = function(audioContext, preset) {
- for (var i = 0; i < preset.zones.length; i++) {
- this.adjustZone(audioContext, preset.zones[i]);
- }
- };
- this.adjustZone = function(audioContext, zone) {
- if (zone.buffer) {
- //
- } else {
- zone.delay = 0;
- if (zone.sample) {
- var decoded = atob(zone.sample);
- zone.buffer = audioContext.createBuffer(1, decoded.length / 2, zone.sampleRate);
- var float32Array = zone.buffer.getChannelData(0);
- var b1,
- b2,
- n;
- for (var i = 0; i < decoded.length / 2; i++) {
- b1 = decoded.charCodeAt(i * 2);
- b2 = decoded.charCodeAt(i * 2 + 1);
- if (b1 < 0) {
- b1 = 256 + b1;
- }
- if (b2 < 0) {
- b2 = 256 + b2;
- }
- n = b2 * 256 + b1;
- if (n >= 65536 / 2) {
- n = n - 65536;
- }
- float32Array[i] = n / 65536.0;
- }
- } else {
- if (zone.file) {
- var datalen = zone.file.length;
- var arraybuffer = new ArrayBuffer(datalen);
- var view = new Uint8Array(arraybuffer);
- var decoded = atob(zone.file);
- var b;
- for (var i = 0; i < decoded.length; i++) {
- b = decoded.charCodeAt(i);
- view[i] = b;
- }
- audioContext.decodeAudioData(arraybuffer, function(audioBuffer) {
- zone.buffer = audioBuffer;
- });
- }
- }
- zone.loopStart = this.numValue(zone.loopStart, 0);
- zone.loopEnd = this.numValue(zone.loopEnd, 0);
- zone.coarseTune = this.numValue(zone.coarseTune, 0);
- zone.fineTune = this.numValue(zone.fineTune, 0);
- zone.originalPitch = this.numValue(zone.originalPitch, 6000);
- zone.sampleRate = this.numValue(zone.sampleRate, 44100);
- zone.sustain = this.numValue(zone.originalPitch, 0);
- }
- };
- this.findZone = function(audioContext, preset, pitch) {
- var zone = null;
- for (var i = preset.zones.length - 1; i >= 0; i--) {
- zone = preset.zones[i];
- if (zone.keyRangeLow <= pitch && zone.keyRangeHigh + 1 >= pitch) {
- break;
- }
- }
- try {
- this.adjustZone(audioContext, zone);
- } catch (ex) {}
- return zone;
- };
- this.cancelQueue = function(audioContext) {
- for (var i = 0; i < this.envelopes.length; i++) {
- var e = this.envelopes[i];
- e.gain.cancelScheduledValues(0);
- e.gain.setValueAtTime(this.nearZero, audioContext.currentTime);
- e.when = -1;
- try {
- e.audioBufferSourceNode.disconnect();
- } catch (ex) {}
- }
- };
- return this;
- }
- if (typeof module === 'object' && module.exports) {
- module.exports = WebAudioFontPlayer;
- }
- if (typeof window !== 'undefined') {
- window.WebAudioFontPlayer = WebAudioFontPlayer;
- }
-
- }, {
- "./channel": 1,
- "./loader": 2,
- "./reverberator": 4
- }],
- 4: [function(require, module, exports) {
- 'use strict'
-
- function WebAudioFontReverberator(audioContext) {
- var me = this;
- this.audioContext = audioContext;
- this.input = this.audioContext.createBiquadFilter();
- this.input.type = "lowpass";
- this.input.frequency.setTargetAtTime(18000, 0, 0.0001);
- this.convolver = null;
- this.output = audioContext.createGain();
- this.dry = audioContext.createGain();
- this.dry.gain.setTargetAtTime(0.9, 0, 0.0001);
- this.dry.connect(this.output);
- this.wet = audioContext.createGain();
- this.wet.gain.setTargetAtTime(0.5, 0, 0.0001);
- this.input.connect(this.dry);
- this.input.connect(this.wet);
- var irr = "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"; //http://www.openairlib.net/
- var datalen = irr.length / 2;
- this.irrArrayBuffer = new ArrayBuffer(datalen);
- var view = new Uint8Array(this.irrArrayBuffer);
- var decoded = atob(irr);
- var b;
- for (var i = 0; i < decoded.length; i++) {
- b = decoded.charCodeAt(i);
- view[i] = b;
- }
- this.audioContext.decodeAudioData(this.irrArrayBuffer, function(audioBuffer) {
- me.convolver = audioContext.createConvolver();
- me.convolver.buffer = audioBuffer;
- me.wet.connect(me.convolver);
- me.convolver.connect(me.output);
- });
- return this;
- }
- if (typeof module === 'object' && module.exports) {
- module.exports = WebAudioFontReverberator;
- }
- if (typeof window !== 'undefined') {
- window.WebAudioFontReverberator = WebAudioFontReverberator;
- }
-
- }, {}]
-}, {}, [3, 1, 2, 4]);
\ No newline at end of file
diff --git a/Program Files/Midi Media Player/WebAudioFontPlayer.min.js b/Program Files/Midi Media Player/WebAudioFontPlayer.min.js
deleted file mode 100644
index dbf5fae..0000000
--- a/Program Files/Midi Media Player/WebAudioFontPlayer.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-!function(){function A(q,t,e){function i(r,n){if(!t[r]){if(!q[r]){var a="function"==typeof require&&require;if(!n&&a)return a(r,!0);if(o)return o(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var s=t[r]={exports:{}};q[r][0].call(s.exports,function(A){var t=q[r][1][A];return i(t||A)},s,s.exports,A,q,t,e)}return t[r].exports}for(var o="function"==typeof require&&require,r=0;r0){for(var A=0;A=1?A():setTimeout(function(){q.waitLoad(A)},333)},this.instrumentTitles=function(){if(!this.instrumentNamesArray){var A=[];A[0]="Acoustic Grand Piano: Piano",this.instrumentNamesArray=A}return this.instrumentNamesArray},this.instrumentKeys=function(){return this.instrumentKeyArray||(this.instrumentKeyArray=["0000_Aspirin_sf2_file"]),this.instrumentKeyArray},this.instrumentInfo=function(A){var q=this.instrumentKeys()[A],t=1*q.substr(0,3);return{variable:"_tone_"+q,url:"sound/"+q+".js",title:this.instrumentTitles()[t]}},this.findInstrument=function(A){this.choosenInfos||(this.choosenInfos=[[1,2]]);for(var q=0;q=a.loopEnd)&&(E=!1),E||h>a.buffer.duration/s&&(h=a.buffer.duration/s);var C=this.findEnvelope(A,q,I,h);if(this.setupEnvelope(A,C,a,r,I,h,o),C.audioBufferSourceNode=A.createBufferSource(),C.audioBufferSourceNode.playbackRate.setValueAtTime(s,0),n&&n.length>0){C.audioBufferSourceNode.playbackRate.setValueAtTime(s,e);for(var c=0;cthis.nearZero?A:this.nearZero},this.setupEnvelope=function(A,q,t,e,i,o,r){q.gain.setValueAtTime(this.noZeroVolume(0),A.currentTime);var n=0,a=0,u=r,s=t.ahdsr;o0||(s=[{duration:0,volume:1},{duration:.5,volume:1},{duration:1.5,volume:.5},{duration:3,volume:0}]):s=[{duration:0,volume:1},{duration:u,volume:1}],q.gain.cancelScheduledValues(i),q.gain.setValueAtTime(this.noZeroVolume(s[0].volume*e),i);for(var I=0;I0){if(s[I].duration+n>u){var h=1-(s[I].duration+n-u)/s[I].duration,E=a-h*(a-s[I].volume);q.gain.linearRampToValueAtTime(this.noZeroVolume(e*E),i+u);break}n+=s[I].duration,a=s[I].volume,q.gain.linearRampToValueAtTime(this.noZeroVolume(e*a),i+n)}q.gain.linearRampToValueAtTime(this.noZeroVolume(0),i+u+this.afterTime)},this.numValue=function(A,q){return"number"==typeof A?A:q},this.findEnvelope=function(A,q,t,e){for(var i=null,o=0;or.when+r.duration+.001){try{r.audioBufferSourceNode.disconnect(),r.audioBufferSourceNode.stop(0),r.audioBufferSourceNode=null}catch(A){}i=r;break}}return i||(i=A.createGain(),i.target=q,i.connect(q),i.cancel=function(){i.when+i.duration>A.currentTime&&(i.gain.cancelScheduledValues(0),i.gain.setTargetAtTime(1e-5,A.currentTime,.1),i.when=A.currentTime+1e-5,i.duration=0)},this.envelopes.push(i)),i},this.adjustPreset=function(A,q){for(var t=0;t=32768&&(o-=65536),r[n]=o/65536}else if(q.file){for(var a,u=q.file.length,s=new ArrayBuffer(u),I=new Uint8Array(s),t=atob(q.file),n=0;n=0&&(e=q.zones[i],!(e.keyRangeLow<=t&&e.keyRangeHigh+1>=t));i--);try{this.adjustZone(A,e)}catch(A){}return e},this.cancelQueue=function(A){for(var q=0;q
-
-
-
-
-
-
-
-
-
-
-
-
-