Initial
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
calen.json
|
527
css/normalize.css
vendored
Executable file
@ -0,0 +1,527 @@
|
||||
/*! normalize.css v1.1.0 | MIT License | git.io/normalize */
|
||||
|
||||
/* ==========================================================================
|
||||
HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined in IE 6/7/8/9 and Firefox 3.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 7/8/9, Firefox 3, and Safari 4.
|
||||
* Known issue: no IE 6 support.
|
||||
*/
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using
|
||||
* `em` units.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-size: 100%; /* 1 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `font-family` inconsistency between `textarea` and other form
|
||||
* elements.
|
||||
*/
|
||||
|
||||
html,
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address margins handled incorrectly in IE 6/7.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address `outline` inconsistency between Chrome and other browsers.
|
||||
*/
|
||||
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address font sizes and margins set differently in IE 6/7.
|
||||
* Address font sizes within `section` and `article` in Firefox 4+, Safari 5,
|
||||
* and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5em;
|
||||
margin: 0.83em 0;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.17em;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1em;
|
||||
margin: 1.33em 0;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 0.83em;
|
||||
margin: 1.67em 0;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 0.67em;
|
||||
margin: 2.33em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 7/8/9, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
* Known issue: no IE 6/7 normalization.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 6/7/8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address margins set differently in IE 6/7.
|
||||
*/
|
||||
|
||||
p,
|
||||
pre {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in IE 6, Safari 4/5, and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, serif;
|
||||
_font-family: 'courier new', monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address CSS quotes not supported in IE 6/7.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `quotes` property not supported in Safari 4.
|
||||
*/
|
||||
|
||||
q:before,
|
||||
q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Lists
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margins set differently in IE 6/7.
|
||||
*/
|
||||
|
||||
dl,
|
||||
menu,
|
||||
ol,
|
||||
ul {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin: 0 0 0 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address paddings set differently in IE 6/7.
|
||||
*/
|
||||
|
||||
menu,
|
||||
ol,
|
||||
ul {
|
||||
padding: 0 0 0 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct list images handled incorrectly in IE 7.
|
||||
*/
|
||||
|
||||
nav ul,
|
||||
nav ol {
|
||||
list-style: none;
|
||||
list-style-image: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3.
|
||||
* 2. Improve image quality when scaled in IE 7.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0; /* 1 */
|
||||
-ms-interpolation-mode: bicubic; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow displayed oddly in IE 9.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Figures
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct margin displayed oddly in IE 6/7.
|
||||
*/
|
||||
|
||||
form {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited in IE 6/7/8/9.
|
||||
* 2. Correct text not wrapping in Firefox 3.
|
||||
* 3. Correct alignment displayed oddly in IE 6/7.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0;
|
||||
white-space: normal; /* 2 */
|
||||
*margin-left: -7px; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct font size not being inherited in all browsers.
|
||||
* 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5,
|
||||
* and Chrome.
|
||||
* 3. Improve appearance and consistency in all browsers.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-size: 100%; /* 1 */
|
||||
margin: 0; /* 2 */
|
||||
vertical-align: baseline; /* 3 */
|
||||
*vertical-align: middle; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 3+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
* 4. Remove inner spacing in IE 7 without affecting normal text inputs.
|
||||
* Known issue: inner spacing remains in IE 6.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
*overflow: visible; /* 4 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address box sizing set to content-box in IE 8/9.
|
||||
* 2. Remove excess padding in IE 8/9.
|
||||
* 3. Remove excess padding in IE 7.
|
||||
* Known issue: excess padding remains in IE 6.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
*height: 13px; /* 3 */
|
||||
*width: 13px; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 3+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 6/7/8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
2
css/normalize.min.css
vendored
Executable file
@ -0,0 +1,2 @@
|
||||
/*! normalize.css v1.1.0 | MIT License | git.io/normalize */
|
||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}
|
213
css/screen.css
Executable file
@ -0,0 +1,213 @@
|
||||
@font-face {
|
||||
font-family: amiga;
|
||||
src: url("../fonts/amiga4ever_pro2.ttf");
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.fileContainer {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.fileContainer [type=file] {
|
||||
cursor: inherit;
|
||||
display: block;
|
||||
font-size: 999px;
|
||||
filter: alpha(opacity=0);
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
text-align: right;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Example stylistic flourishes */
|
||||
|
||||
.fileContainer {
|
||||
background: red;
|
||||
border-radius: .5em;
|
||||
float: left;
|
||||
padding: .5em;
|
||||
}
|
||||
|
||||
.fileContainer [type=file] {
|
||||
cursor: pointer;
|
||||
}
|
||||
body {
|
||||
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff5c00), color-stop(100%, #ff5a00));
|
||||
background: -webkit-linear-gradient(#ff5c00, #ff5a00);
|
||||
background: -moz-linear-gradient(#ff5c00, #ff5a00);
|
||||
background: -o-linear-gradient(#ff5c00, #ff5a00);
|
||||
background: linear-gradient(#ff5c00, #ff5a00);
|
||||
}
|
||||
|
||||
.bg {
|
||||
width: 100%;
|
||||
width: calc(100% - 4rem);
|
||||
height: 100%;
|
||||
height: calc(100% - 4rem);
|
||||
position: absolute;
|
||||
top: 2rem;
|
||||
left: 2rem;
|
||||
z-index: -90;
|
||||
}
|
||||
.bg.bg1 {
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.banner {
|
||||
font-family: amiga, sans-serif;
|
||||
}
|
||||
.banner + .banner {
|
||||
margin-top: 2.4rem;
|
||||
}
|
||||
|
||||
#headline, #demosong, #metadata, #controls, #choosefile {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#info {
|
||||
max-width: calc(100% - 2.6rem);
|
||||
padding: 1.25rem 1.3rem;
|
||||
background: rgba(20, 20, 20, 0.86);
|
||||
color: #f9f9f9;
|
||||
}
|
||||
|
||||
#list {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#headline {
|
||||
max-width: calc(100% - 2rem);
|
||||
padding: 1.2rem 1rem;
|
||||
background: white;
|
||||
color: #232323;
|
||||
}
|
||||
#headline h1 {
|
||||
margin: 0;
|
||||
}
|
||||
@media only screen and (max-width: 45rem) {
|
||||
#headline h1 {
|
||||
font-size: 3rem;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 45rem) {
|
||||
#headline h1 {
|
||||
font-size: 4.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
#demosong {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
#demosong a {
|
||||
color: #232323;
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
|
||||
#metadata {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#choosefile input {
|
||||
padding: 0.5rem;
|
||||
background: #f7f7f7;
|
||||
border-radius: 0.35rem;
|
||||
border: 1px solid rgba(215, 99, 34, 0.78);
|
||||
}
|
||||
|
||||
#choosefile, #controls {
|
||||
margin-top: 1.9rem;
|
||||
}
|
||||
|
||||
#demos {
|
||||
text-align: center;
|
||||
}
|
||||
#demos > div {
|
||||
display: inline-block;
|
||||
margin: 0 auto;
|
||||
text-align: left;
|
||||
border: 1px solid rgba(215, 99, 34, 0.78);
|
||||
padding: 1rem;
|
||||
background: white;
|
||||
width: 95vw;
|
||||
}
|
||||
#demos > div h2 {
|
||||
margin: 0 0 0.5rem 0;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
#demos > div .song {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: #4c4cbd;
|
||||
cursor: pointer;
|
||||
}
|
||||
#demos > div .song + .song {
|
||||
margin-top: 0.65rem;
|
||||
}
|
||||
#demos > div .song .size {
|
||||
vertical-align: super;
|
||||
font-size: 0.6rem;
|
||||
margin-left: 0.3rem;
|
||||
}
|
||||
#demos > div .song .size:before {
|
||||
content: "(";
|
||||
}
|
||||
#demos > div .song .size:after {
|
||||
content: ")";
|
||||
}
|
||||
|
||||
.control {
|
||||
width: 5rem;
|
||||
height: 5rem;
|
||||
border-radius: 2.5rem;
|
||||
background-color: #505050;
|
||||
display: inline-block;
|
||||
box-shadow: 0px 9px 0px #323232, 0px 9px 25px rgba(0, 0, 0, 0.7);
|
||||
transition: all 0.1s ease;
|
||||
cursor: pointer;
|
||||
}
|
||||
.control:active, .control.pressed {
|
||||
box-shadow: 0px 3px 0px #323232, 0px 3px 6px rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
.control#play {
|
||||
background-image: url("../img/play.svg");
|
||||
background-size: 75%;
|
||||
background-position: 16px 9px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.control#next {
|
||||
background-image: url("../img/next.png");
|
||||
background-size: 75%;
|
||||
background-position: 16px 9px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.control#pause {
|
||||
background-image: url("../img/pause.svg");
|
||||
background-size: 75%;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.control#loop {
|
||||
display: none;
|
||||
}
|
||||
.control#loop + label {
|
||||
background-image: url("../img/loop.svg");
|
||||
background-size: 75%;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.control#loop:checked + label {
|
||||
box-shadow: 0px 3px 0px #323232, 0px 3px 6px rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
|
||||
li {
|
||||
height:2em;
|
||||
}
|
82
css/seekbar.css
Executable file
@ -0,0 +1,82 @@
|
||||
input[type=range].slider {
|
||||
-webkit-appearance: none;
|
||||
width: 100%;
|
||||
margin: 0.7px 0;
|
||||
}
|
||||
input[type=range].slider:focus {
|
||||
outline: none;
|
||||
}
|
||||
input[type=range].slider::-webkit-slider-runnable-track {
|
||||
width: 100%;
|
||||
height: 25.6px;
|
||||
cursor: pointer;
|
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
||||
background: #484d4d;
|
||||
border-radius: 0px;
|
||||
border: 0px solid #010101;
|
||||
}
|
||||
input[type=range].slider::-webkit-slider-thumb {
|
||||
box-shadow: 0px 0px 1px #670000, 0px 0px 0px #810000;
|
||||
border: 0px solid #ff1e00;
|
||||
height: 27px;
|
||||
width: 18px;
|
||||
border-radius: 0px;
|
||||
background: #ffae00;
|
||||
cursor: pointer;
|
||||
-webkit-appearance: none;
|
||||
margin-top: -0.7px;
|
||||
}
|
||||
input[type=range].slider:focus::-webkit-slider-runnable-track {
|
||||
}
|
||||
input[type=range].slider::-moz-range-track {
|
||||
width: 100%;
|
||||
height: 25.6px;
|
||||
cursor: pointer;
|
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
||||
background: #484d4d;
|
||||
border-radius: 0px;
|
||||
border: 0px solid #010101;
|
||||
}
|
||||
input[type=range].slider::-moz-range-thumb {
|
||||
box-shadow: 0px 0px 1px #670000, 0px 0px 0px #810000;
|
||||
border: 0px solid #ff1e00;
|
||||
height: 27px;
|
||||
width: 18px;
|
||||
border-radius: 0px;
|
||||
background: #ffae00;
|
||||
cursor: pointer;
|
||||
}
|
||||
input[type=range].slider::-ms-track {
|
||||
width: 100%;
|
||||
height: 25.6px;
|
||||
cursor: pointer;
|
||||
background: transparent;
|
||||
border-color: transparent;
|
||||
color: transparent;
|
||||
}
|
||||
input[type=range].slider::-ms-fill-lower {
|
||||
border: 0px solid #010101;
|
||||
border-radius: 0px;
|
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
||||
}
|
||||
input[type=range].slider::-ms-fill-upper {
|
||||
background: #484d4d;
|
||||
border: 0px solid #010101;
|
||||
border-radius: 0px;
|
||||
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
|
||||
}
|
||||
input[type=range].slider::-ms-thumb {
|
||||
box-shadow: 0px 0px 1px #670000, 0px 0px 0px #810000;
|
||||
border: 0px solid #ff1e00;
|
||||
height: 27px;
|
||||
width: 18px;
|
||||
border-radius: 0px;
|
||||
background: #ffae00;
|
||||
cursor: pointer;
|
||||
height: 25.6px;
|
||||
}
|
||||
input[type=range].slider:focus::-ms-fill-lower {
|
||||
background: #484d4d;
|
||||
}
|
||||
input[type=range].slider:focus::-ms-fill-upper {
|
||||
}
|
BIN
favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
fonts/amiga4ever_pro2.ttf
Executable file
56
handle_file_upload.php
Executable file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
$inp = file_get_contents('mods.json');
|
||||
$tempArray = json_decode($inp);
|
||||
$time = time();
|
||||
//print_r($tempArray);
|
||||
|
||||
//$id = uniqid();
|
||||
|
||||
|
||||
$fileName = $_FILES['files']['name'];
|
||||
$fileType = $_FILES['files']['type'];
|
||||
$fileContent = file_get_contents($_FILES['files']['tmp_name']);
|
||||
$dataUrl = 'data:' . $fileType . ';base64,' . base64_encode($fileContent);
|
||||
$json = json_encode(array(
|
||||
'name' => $fileName,
|
||||
'type' => $fileType,
|
||||
'dataUrl' => $dataUrl
|
||||
));
|
||||
$target = 'mods/'.$_FILES['files']['name'];
|
||||
if (strpos($fileType, 'application') !== false) {
|
||||
echo '{"type":"message","content":"go_to_the_hooy"}';
|
||||
} else {
|
||||
$md5 = md5_file($_FILES['files']['tmp_name']);
|
||||
$item = null;
|
||||
foreach($tempArray as $struct) {
|
||||
if ($md5 == $struct->md5) {
|
||||
$item = $struct;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($item == null){
|
||||
move_uploaded_file( $_FILES['files']['tmp_name'], $target);
|
||||
$id = $tempArray[count($tempArray)-1]->id + 1;
|
||||
$upl_file->filename = $_FILES['files']['name'];
|
||||
$upl_file->md5 = $md5;
|
||||
$upl_file->id = $id;
|
||||
$upl_file->time = $time;
|
||||
|
||||
//echo $json.'<br>';
|
||||
if ($upl_file->filename != null){
|
||||
array_push($tempArray, $upl_file);
|
||||
$jsonData = json_encode($tempArray, JSON_PRETTY_PRINT);
|
||||
file_put_contents('mods.json', $jsonData);
|
||||
}
|
||||
}else{
|
||||
echo "Warning. File has uploaded already.";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//$jsonData = json_encode($tempArray);
|
||||
//file_put_contents('results.json', $jsonData);
|
||||
//print_r($tempArray);
|
||||
|
||||
?>
|
9
img/headphones.svg
Executable file
@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
|
||||
<path fill="white" d="M15.281,66.527c-3.912-14.854-4.723-30.193,4.221-43.656C25.92,13.211,37.953,8.5,50.002,8.5 c12.957,0,23.095,4.306,29.938,13.516c9.817,13.212,8.66,29.667,4.718,44.511c-1.049,3.947,5.48,5.623,6.532,1.679 c4.446-16.748,5.107-35.397-5.4-50.375C78.008,6.744,64.612,0.327,50.527,0.011c-14.232-0.32-27.35,6.45-35.649,16.987 C3.384,31.587,4.354,51.523,8.751,68.206C9.79,72.154,16.323,70.479,15.281,66.527L15.281,66.527z"/>
|
||||
<polygon fill="white" points="73.271,93.17 79.555,94.307 84.588,70.202 78.301,69.063 "/>
|
||||
<path fill="white" d="M60.373,94.832c-0.48,2.3,1.84,4.65,5.178,5.258l0,0c3.338,0.604,6.435-0.77,6.916-3.07l6.876-32.961 c0.484-2.301-1.838-4.656-5.174-5.262l0,0c-3.338-0.604-6.437,0.771-6.912,3.071L60.373,94.832z"/>
|
||||
<path fill="white" d="M82.131,89.794c-0.188,0.901,0.304,1.743,1.097,1.886l1.481,0.27c0.792,0.145,1.588-0.467,1.775-1.363l4.413-21.138 c0.187-0.899-0.305-1.739-1.098-1.886l-1.479-0.271c-0.795-0.144-1.592,0.472-1.779,1.366L82.131,89.794z"/>
|
||||
<polygon fill="white" points="26.713,93.168 20.429,94.307 15.397,70.202 21.683,69.063 "/>
|
||||
<path fill="white" d="M39.608,94.83c0.481,2.302-1.837,4.65-5.174,5.26l0,0c-3.338,0.604-6.438-0.77-6.917-3.07l-6.879-32.961 c-0.479-2.301,1.837-4.656,5.175-5.262l0,0c3.34-0.604,6.437,0.771,6.917,3.071L39.608,94.83z"/>
|
||||
<path fill="white" d="M17.853,89.794c0.185,0.899-0.306,1.743-1.099,1.883l-1.479,0.271c-0.793,0.145-1.59-0.467-1.777-1.361L9.085,69.445 c-0.188-0.896,0.306-1.738,1.1-1.885l1.478-0.269c0.796-0.146,1.591,0.467,1.777,1.364L17.853,89.794z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
13
img/loop.svg
Executable file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- License Agreement at http://iconmonstr.com/license/ -->
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path fill="white" id="repeat-3-icon" d="M322.697,248.393v-44.592H142.5c-28.948,0-52.5,23.551-52.5,52.5c0,10.296,2.991,19.901,8.133,28.016
|
||||
l-34.131,20.927C55.132,291.046,50,274.274,50,256.301c0-51.086,41.413-92.5,92.5-92.5h180.197v-45.387l105.996,64.989
|
||||
L322.697,248.393z M447.727,206.924l-34.137,20.93c5.312,8.204,8.41,17.968,8.41,28.447c0,28.949-23.552,52.5-52.5,52.5H189.303
|
||||
v-45.193L83.307,328.597l105.996,64.989v-44.785H369.5c51.087,0,92.5-41.414,92.5-92.5C462,238.144,456.765,221.212,447.727,206.924
|
||||
z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 960 B |
BIN
img/next.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
9
img/pause.svg
Executable file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- License Agreement at http://iconmonstr.com/license/ -->
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path fill="white" id="pause-icon" d="M217.679,462h-120V50h120V462z M414.321,50h-120v412h120V50z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 541 B |
9
img/play.svg
Executable file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- License Agreement at http://iconmonstr.com/license/ -->
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path fill="white" id="play-icon" d="M88.008,462V50l335.984,206.002L88.008,462z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 524 B |
BIN
img/save1.png
Executable file
After Width: | Height: | Size: 13 KiB |
77
index.html
Executable file
@ -0,0 +1,77 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="no-js">
|
||||
<head>
|
||||
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
||||
<script>
|
||||
(adsbygoogle = window.adsbygoogle || []).push({
|
||||
google_ad_client: "ca-pub-4886067178571203",
|
||||
enable_page_level_ads: true
|
||||
});
|
||||
</script>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title></title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="css/normalize.min.css">
|
||||
<link rel="stylesheet" href="css/screen.css">
|
||||
<link rel="stylesheet" href="css/seekbar.css">
|
||||
|
||||
<script type="text/javascript" src="js/libopenmpt.js"></script>
|
||||
<script type="text/javascript" src="js/chiptune2.js"></script>
|
||||
<script type="text/javascript" src="js/logic.js"></script>
|
||||
|
||||
</head>
|
||||
<body id="bgAudio">
|
||||
<div class="bg bg1"></div>
|
||||
<div id="content">
|
||||
<div id="info" class="banner">
|
||||
<p>Drop any module file (.mod, .xm, .it, etc.) on this page and hit play! </p>
|
||||
</div>
|
||||
<div id="headline" class="banner"><h1>hexound</h1></div>
|
||||
<div id="metadata" class="banner">
|
||||
<span id="title"></span>
|
||||
<span id="artist"></span>
|
||||
<p>Filename - <span id="filename"></span></p>
|
||||
</div>
|
||||
<div id="controls" class="banner">
|
||||
<a onclick="pauseButton()" id="play" class="control"></a>
|
||||
<a onclick="start_play()" id="next" class="control"></a>
|
||||
</div>
|
||||
<div style="margin:10px" class="banner">
|
||||
<span class="banner" id="output">00</span>
|
||||
<input id="rangeinput" class="slider banner" type="range" min="0" max="100" style="width:98%" step="0.01">
|
||||
<span class="banner" id="duration">00</span>
|
||||
<div style="clear:both"></div>
|
||||
</div>
|
||||
<div id="demos" class="banner">
|
||||
<div id="list" style="overflow-y:scroll; height:400px;">
|
||||
<h2># playlist</h2>
|
||||
| <label>Shuffle <input type="radio" name="playmode" value="shuffle"/></label> |
|
||||
<label>Loop <input type="radio" name="playmode" value="loop"/></label> |
|
||||
<label>Direct order <input type="radio" name="playmode" value="direct_order" checked/></label> |
|
||||
<p>
|
||||
<input type="text" id="input" style="width:100%"/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
ver. <span id="version">0.0</span>
|
||||
</body>
|
||||
<script>
|
||||
var interval;
|
||||
$("#rangeinput").mousedown(function(event){
|
||||
interval = setInterval(function(){
|
||||
$("#output").html($("#rangeinput").val());
|
||||
player.seek($("#rangeinput").val());
|
||||
console.log("running");
|
||||
},150);
|
||||
});
|
||||
|
||||
$("#rangeinput").mouseup(function(event){
|
||||
clearInterval(interval);
|
||||
});
|
||||
|
||||
</script>
|
||||
</html>
|
218
js/chiptune2.js
Executable file
@ -0,0 +1,218 @@
|
||||
// audio context
|
||||
ChiptuneAudioContext = AudioContext || webkitAudioContext;
|
||||
|
||||
// config
|
||||
function ChiptuneJsConfig(repeatCount, context) {
|
||||
this.repeatCount = repeatCount;
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
// player
|
||||
function ChiptuneJsPlayer(config) {
|
||||
this.config = config;
|
||||
this.context = config.context || new ChiptuneAudioContext;
|
||||
this.currentPlayingNode = null;
|
||||
this.handlers = [];
|
||||
}
|
||||
|
||||
// event handlers section
|
||||
ChiptuneJsPlayer.prototype.fireEvent = function (eventName, response) {
|
||||
var handlers = this.handlers;
|
||||
if (handlers.length) {
|
||||
handlers.forEach(function (handler) {
|
||||
if (handler.eventName === eventName) {
|
||||
handler.handler(response);
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.addHandler = function (eventName, handler) {
|
||||
this.handlers.push({eventName: eventName, handler: handler});
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.onEnded = function (handler) {
|
||||
this.addHandler('onEnded', handler);
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.onError = function (handler) {
|
||||
this.addHandler('onError', handler);
|
||||
}
|
||||
|
||||
// metadata
|
||||
ChiptuneJsPlayer.prototype.duration = function() {
|
||||
return Module._openmpt_module_get_duration_seconds(this.currentPlayingNode.modulePtr);
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.metadata = function() {
|
||||
var data = {};
|
||||
var keys = Module.Pointer_stringify(Module._openmpt_module_get_metadata_keys(this.currentPlayingNode.modulePtr)).split(';');
|
||||
var keyNameBuffer = 0;
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
keyNameBuffer = Module._malloc(keys[i].length + 1);
|
||||
Module.writeStringToMemory(keys[i], keyNameBuffer);
|
||||
data[keys[i]] = Module.Pointer_stringify(Module._openmpt_module_get_metadata(player.currentPlayingNode.modulePtr, keyNameBuffer));
|
||||
Module._free(keyNameBuffer);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.seek = function(position) {
|
||||
Module._openmpt_module_set_position_seconds(this.currentPlayingNode.modulePtr, position);
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.getPosition = function() {
|
||||
return Module._openmpt_module_get_position_seconds(this.currentPlayingNode.modulePtr);
|
||||
}
|
||||
// playing, etc
|
||||
ChiptuneJsPlayer.prototype.load = function(input, callback) {
|
||||
var player = this;
|
||||
if (input instanceof File) {
|
||||
var reader = new FileReader();
|
||||
reader.onload = function() {
|
||||
return callback(reader.result); // no error
|
||||
}.bind(this);
|
||||
reader.readAsArrayBuffer(input);
|
||||
} else {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', input, true);
|
||||
xhr.responseType = 'arraybuffer';
|
||||
xhr.onload = function(e) {
|
||||
if (xhr.status === 200) {
|
||||
return callback(xhr.response); // no error
|
||||
} else {
|
||||
player.fireEvent('onError', {type: 'onxhr'});
|
||||
}
|
||||
}.bind(this);
|
||||
xhr.onerror = function() {
|
||||
player.fireEvent('onError', {type: 'onxhr'});
|
||||
};
|
||||
xhr.onabort = function() {
|
||||
player.fireEvent('onError', {type: 'onxhr'});
|
||||
};
|
||||
xhr.send();
|
||||
}
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.play = function(buffer) {
|
||||
this.stop();
|
||||
var processNode = this.createLibopenmptNode(buffer, this.config);
|
||||
if (processNode == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// set config options on module
|
||||
Module._openmpt_module_set_repeat_count(processNode.modulePtr, this.config.repeatCount);
|
||||
|
||||
this.currentPlayingNode = processNode;
|
||||
processNode.connect(this.context.destination);
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.stop = function() {
|
||||
if (this.currentPlayingNode != null) {
|
||||
this.currentPlayingNode.disconnect();
|
||||
this.currentPlayingNode.cleanup();
|
||||
this.currentPlayingNode = null;
|
||||
}
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.togglePause = function() {
|
||||
if (this.currentPlayingNode != null) {
|
||||
this.currentPlayingNode.togglePause();
|
||||
}
|
||||
}
|
||||
|
||||
ChiptuneJsPlayer.prototype.createLibopenmptNode = function(buffer, config) {
|
||||
// TODO error checking in this whole function
|
||||
|
||||
var maxFramesPerChunk = 4096;
|
||||
var processNode = this.context.createScriptProcessor(0, 0, 2);
|
||||
processNode.config = config;
|
||||
processNode.player = this;
|
||||
var byteArray = new Int8Array(buffer);
|
||||
var ptrToFile = Module._malloc(byteArray.byteLength);
|
||||
Module.HEAPU8.set(byteArray, ptrToFile);
|
||||
processNode.modulePtr = Module._openmpt_module_create_from_memory(ptrToFile, byteArray.byteLength, 0, 0, 0);
|
||||
processNode.paused = false;
|
||||
processNode.leftBufferPtr = Module._malloc(4 * maxFramesPerChunk);
|
||||
processNode.rightBufferPtr = Module._malloc(4 * maxFramesPerChunk);
|
||||
processNode.cleanup = function() {
|
||||
if (this.modulePtr != 0) {
|
||||
Module._openmpt_module_destroy(this.modulePtr);
|
||||
this.modulePtr = 0;
|
||||
}
|
||||
if (this.leftBufferPtr != 0) {
|
||||
Module._free(this.leftBufferPtr);
|
||||
this.leftBufferPtr = 0;
|
||||
}
|
||||
if (this.rightBufferPtr != 0) {
|
||||
Module._free(this.rightBufferPtr);
|
||||
this.rightBufferPtr = 0;
|
||||
}
|
||||
}
|
||||
processNode.stop = function() {
|
||||
this.disconnect();
|
||||
this.cleanup();
|
||||
}
|
||||
processNode.pause = function() {
|
||||
this.paused = true;
|
||||
}
|
||||
processNode.unpause = function() {
|
||||
this.paused = false;
|
||||
}
|
||||
processNode.togglePause = function() {
|
||||
this.paused = !this.paused;
|
||||
}
|
||||
processNode.onaudioprocess = function(e) {
|
||||
var outputL = e.outputBuffer.getChannelData(0);
|
||||
var outputR = e.outputBuffer.getChannelData(1);
|
||||
var framesToRender = outputL.length;
|
||||
if (this.ModulePtr == 0) {
|
||||
for (var i = 0; i < framesToRender; ++i) {
|
||||
outputL[i] = 0;
|
||||
outputR[i] = 0;
|
||||
}
|
||||
this.disconnect();
|
||||
this.cleanup();
|
||||
return;
|
||||
}
|
||||
if (this.paused) {
|
||||
for (var i = 0; i < framesToRender; ++i) {
|
||||
outputL[i] = 0;
|
||||
outputR[i] = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
var framesRendered = 0;
|
||||
var ended = false;
|
||||
var error = false;
|
||||
while (framesToRender > 0) {
|
||||
var framesPerChunk = Math.min(framesToRender, maxFramesPerChunk);
|
||||
var actualFramesPerChunk = Module._openmpt_module_read_float_stereo(this.modulePtr, this.context.sampleRate, framesPerChunk, this.leftBufferPtr, this.rightBufferPtr);
|
||||
if (actualFramesPerChunk == 0) {
|
||||
ended = true;
|
||||
// modulePtr will be 0 on openmpt: error: openmpt_module_read_float_stereo: ERROR: module * not valid or other openmpt error
|
||||
error = !this.modulePtr;
|
||||
}
|
||||
var rawAudioLeft = Module.HEAPF32.subarray(this.leftBufferPtr / 4, this.leftBufferPtr / 4 + actualFramesPerChunk);
|
||||
var rawAudioRight = Module.HEAPF32.subarray(this.rightBufferPtr / 4, this.rightBufferPtr / 4 + actualFramesPerChunk);
|
||||
for (var i = 0; i < actualFramesPerChunk; ++i) {
|
||||
outputL[framesRendered + i] = rawAudioLeft[i];
|
||||
outputR[framesRendered + i] = rawAudioRight[i];
|
||||
}
|
||||
for (var i = actualFramesPerChunk; i < framesPerChunk; ++i) {
|
||||
outputL[framesRendered + i] = 0;
|
||||
outputR[framesRendered + i] = 0;
|
||||
}
|
||||
framesToRender -= framesPerChunk;
|
||||
framesRendered += framesPerChunk;
|
||||
}
|
||||
if (ended) {
|
||||
this.disconnect();
|
||||
this.cleanup();
|
||||
error ? processNode.player.fireEvent('onError', {type: 'openmpt'}) : processNode.player.fireEvent('onEnded');
|
||||
}
|
||||
}
|
||||
return processNode;
|
||||
}
|
||||
|
35
js/libopenmpt.js
Normal file
251
js/logic.js
Executable file
@ -0,0 +1,251 @@
|
||||
var player;
|
||||
var interval;
|
||||
var playlist = [];
|
||||
var fileaccess = document.querySelector('*');
|
||||
var current_mod;
|
||||
var mode = "direct_order";
|
||||
var VERSION = 0.07
|
||||
|
||||
|
||||
function init() {
|
||||
if (player == undefined) {
|
||||
player = new ChiptuneJsPlayer(new ChiptuneJsConfig(0));
|
||||
setInterval(progress, 200);
|
||||
}
|
||||
else {
|
||||
player.stop();
|
||||
playPauseButton();
|
||||
}
|
||||
}
|
||||
|
||||
function getRandomInt(max) {
|
||||
min = 0;
|
||||
max = Math.floor(max);
|
||||
return Math.floor(Math.random() * (max - min)) + min;
|
||||
}
|
||||
|
||||
function start_play(id, action) {
|
||||
document.getElementById("mod_"+current_mod).style.color = "#4c4cbd";
|
||||
if (action == "user") {
|
||||
var result = $.grep(playlist, function(e){ return e.id == id; });
|
||||
console.log(result[0].name);
|
||||
console.log("Currently playing: "+current_mod)
|
||||
document.getElementById("mod_"+current_mod).style.color = "#4c4cbd";
|
||||
id = result[0].id;
|
||||
name = result[0].name;
|
||||
console.log('PLaying ' + name + ". Initiated by User.");
|
||||
loadURL('/mods/' + name);
|
||||
document.getElementById('filename').innerHTML = name
|
||||
window.location.hash = '#' + (id);
|
||||
document.getElementById("mod_" + id).style.color = "#b30059";
|
||||
current_mod = id;
|
||||
} else {
|
||||
if (check_mode() == "shuffle") {
|
||||
|
||||
var next = getRandomInt(playlist.length);
|
||||
console.log('PLaying ' + playlist[next].name + ". Initiated by System. Shuffle");
|
||||
loadURL('/mods/' + playlist[next].name);
|
||||
document.getElementById('filename').innerHTML = playlist[next].name
|
||||
window.location.hash = '#' + playlist[next].id
|
||||
document.getElementById("mod_" + playlist[next].id).style.color = "#b30059";
|
||||
current_mod = next;
|
||||
} else if (check_mode() == "direct_order") {
|
||||
|
||||
var next = playlist.findIndex(x => x.id == current_mod) + 1;
|
||||
id = playlist[next].id;
|
||||
name = playlist[next].name;
|
||||
console.log('PLaying ' + name + ". Initiated by System. Direct order.");
|
||||
loadURL('/mods/' + name);
|
||||
document.getElementById('filename').innerHTML = name
|
||||
window.location.hash = '#' + id
|
||||
document.getElementById("mod_" + id).style.color = "#b30059";
|
||||
current_mod = id;
|
||||
} else if (check_mode() == "loop") {
|
||||
|
||||
var next = playlist.findIndex(x => x.id == current_mod);
|
||||
id = playlist[next].id;
|
||||
name = playlist[next].name;
|
||||
console.log('PLaying ' + name + ". Initiated by System. Loop.");
|
||||
loadURL('/mods/' + name);
|
||||
document.getElementById('filename').innerHTML = name
|
||||
window.location.hash = '#' + id
|
||||
document.getElementById("mod_" + id).style.color = "#b30059";
|
||||
current_mod = id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function setMetadata(filename) {
|
||||
var metadata = player.metadata();
|
||||
|
||||
if (metadata['title'] != '') {
|
||||
document.getElementById('title').innerHTML = metadata['title'];
|
||||
}
|
||||
else {
|
||||
document.getElementById('title').innerHTML = filename;
|
||||
}
|
||||
|
||||
if (metadata['artist'] != '') {
|
||||
document.getElementById('artist').innerHTML = '<br />' + metadata['artist'];
|
||||
}
|
||||
else {
|
||||
document.getElementById('artist').innerHTML = '';
|
||||
}
|
||||
}
|
||||
|
||||
function toInt(n) {
|
||||
return Math.round(Number(n));
|
||||
};
|
||||
|
||||
function progress() {
|
||||
document.getElementById('rangeinput').value = player.getPosition();
|
||||
$("#output").html(toInt(player.getPosition()));
|
||||
if (toInt(player.getPosition()) == toInt(player.duration()))
|
||||
start_play(0, "system")
|
||||
}
|
||||
|
||||
function loadURL(path) {
|
||||
clearInterval(interval);
|
||||
init();
|
||||
player.load(path, function (buffer) {
|
||||
player.play(buffer);
|
||||
setMetadata(path);
|
||||
$("#rangeinput").attr('max', player.duration());
|
||||
$("#rangeinput").attr('value', 0);
|
||||
$("#duration").html(toInt(player.duration()));
|
||||
pausePauseButton();
|
||||
});
|
||||
}
|
||||
|
||||
function pauseButton() {
|
||||
player.togglePause();
|
||||
switchPauseButton();
|
||||
}
|
||||
|
||||
function switchPauseButton() {
|
||||
var button = document.getElementById('pause')
|
||||
if (button) {
|
||||
button.id = "play_tmp";
|
||||
}
|
||||
button = document.getElementById('play')
|
||||
if (button) {
|
||||
button.id = "pause";
|
||||
}
|
||||
button = document.getElementById('play_tmp')
|
||||
if (button) {
|
||||
button.id = "play";
|
||||
}
|
||||
}
|
||||
|
||||
function playPauseButton() {
|
||||
var button = document.getElementById('pause');
|
||||
if (button) {
|
||||
button.id = "play";
|
||||
}
|
||||
}
|
||||
|
||||
function pausePauseButton() {
|
||||
var button = document.getElementById('play')
|
||||
if (button) {
|
||||
button.id = "pause";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fileaccess.ondrop = function (e) {
|
||||
e.preventDefault();
|
||||
var file = e.dataTransfer.files[0];
|
||||
var fd = new FormData();
|
||||
fd.append("files", file);
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', 'handle_file_upload.php', true);
|
||||
xhr.upload.onprogress = function (e) {
|
||||
if (e.lengthComputable) {
|
||||
var percentComplete = (e.loaded / e.total) * 100;
|
||||
console.log(percentComplete + '% uploaded');
|
||||
}
|
||||
};
|
||||
xhr.onload = function () {
|
||||
if (this.status == 200) {
|
||||
var resp = JSON.parse(this.response);
|
||||
console.log('Server got:', resp);
|
||||
};
|
||||
};
|
||||
xhr.send(fd);
|
||||
init();
|
||||
|
||||
player.load(file, function (buffer) {
|
||||
player.play(buffer);
|
||||
setMetadata(file.name);
|
||||
pausePauseButton();
|
||||
});
|
||||
get_files();
|
||||
}
|
||||
|
||||
fileaccess.ondragenter = function (e) { e.preventDefault(); }
|
||||
fileaccess.ondragover = function (e) { e.preventDefault(); };
|
||||
|
||||
function get_files() {
|
||||
$.getJSON('library.php', function (data) {
|
||||
$('#list').append('<ul style="list-style-type: none;margin: 0;padding: 0;">')
|
||||
$.each(data, function (key, val) {
|
||||
//if(val.time == undefined){val.time = 1493299893}
|
||||
var tmp = {
|
||||
'name' : val.filename,
|
||||
'id' : val.id
|
||||
//'uploaded': val.time
|
||||
};
|
||||
$('#list').append('<li style="list-style-type: none;" class="thumb selectable arrow light" ><span class="song name" onclick="start_play('+val.id+',\'user\')"><a href="mods/' + val.filename + '"><img style="height:1em;" src="/img/save1.png"></a> <span id="mod_' + val.id + '" class="name_song">' + val.filename + '</span></span></li>');
|
||||
console.log(key, val.id);
|
||||
tmp
|
||||
playlist.push(tmp);
|
||||
});
|
||||
console.log('Summary:', playlist.length, 'tracks.')
|
||||
current_mod = playlist.length - 1;
|
||||
$('#list').append('</ul>')
|
||||
|
||||
var mod_number = parseInt(window.location.hash.substr(1));
|
||||
if (window.location.hash.substr(1) != "") {
|
||||
start_play(mod_number,"user")
|
||||
console.log("Playing from url mod # " + window.location.hash.substr(1));
|
||||
}
|
||||
});
|
||||
|
||||
$(window).on('hashchange', function() {
|
||||
var mod_number = parseInt(window.location.hash.substr(1));
|
||||
if (window.location.hash.substr(1) != "") {
|
||||
start_play(mod_number,"user")
|
||||
console.log("Playing from url mod # " + window.location.hash.substr(1));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
get_files();
|
||||
window.onload = function up() {
|
||||
var input = document.getElementById('input');
|
||||
document.getElementById('version').innerHTML =VERSION;
|
||||
input.onkeyup = function () {
|
||||
var filter = input.value.toUpperCase();
|
||||
var lis = document.getElementsByTagName('li');
|
||||
for (var i = 0; i < lis.length; i++) {
|
||||
var name = lis[i].getElementsByClassName('name_song')[0].innerHTML;
|
||||
//if (name.toUpperCase().indexOf(filter) == 0)
|
||||
if (name.toUpperCase().includes(filter) == true) {
|
||||
lis[i].style.display = 'list-item'
|
||||
}
|
||||
else
|
||||
lis[i].style.display = 'none';
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function check_mode()
|
||||
{
|
||||
var inp = document.getElementsByName('playmode');
|
||||
for (var i = 0; i < inp.length; i++) {
|
||||
if (inp[i].type == "radio" && inp[i].checked) {
|
||||
return inp[i].value;
|
||||
}
|
||||
}
|
||||
}
|
BIN
libopenmpt.js.mem
Normal file
5
library.php
Executable file
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
$inp = file_get_contents('mods.json');
|
||||
$library = json_decode($inp);
|
||||
echo json_encode($library);
|
||||
?>
|
790
mods.json
Normal file
@ -0,0 +1,790 @@
|
||||
[
|
||||
{
|
||||
"md5": "34c2f5f654270e2f5a70d6e5c72a5861",
|
||||
"filename": "daddy_freddy-under_the_bridge.mod",
|
||||
"id": 2
|
||||
},
|
||||
{
|
||||
"md5": "c4744d262f21231968b72e5e59c64989",
|
||||
"id": 3,
|
||||
"filename": "AGGRESSiON - Anti-Trojan Elite 3.4.3crk.mod"
|
||||
},
|
||||
{
|
||||
"filename": "AERiS - Hod Dog King +7trn_02.mod",
|
||||
"id": 4,
|
||||
"md5": "08f21ad17f132c666835c73baba7d906"
|
||||
},
|
||||
{
|
||||
"md5": "91118bb9e2bfcd0f24923495098973d2",
|
||||
"filename": "4mat-menu3.mod",
|
||||
"id": 5
|
||||
},
|
||||
{
|
||||
"md5": "5e5c0af1c302d1b4a3216039fc24b115",
|
||||
"id": 6,
|
||||
"filename": "MYTH - Star Trek Voyager - Elite Force installer.XM"
|
||||
},
|
||||
{
|
||||
"md5": "093c1a085bf9eb7c316c5b85025777f3",
|
||||
"filename": "MYTH - Age Of Empires 2. Conquerorsinstaller.XM",
|
||||
"id": 7
|
||||
},
|
||||
{
|
||||
"md5": "b368c12784a41617895f1df9ef03602d",
|
||||
"id": 8,
|
||||
"filename": "Mp2k - Speeder XP 1.xcrk.mod"
|
||||
},
|
||||
{
|
||||
"md5": "c00b2a95f6e75f88dd0cd92e7caead3d",
|
||||
"id": 9,
|
||||
"filename": "Lucid - Compare It! 3.81.1660kg.XM"
|
||||
},
|
||||
{
|
||||
"md5": "0f2a289f47333ff61d13156b85644a43",
|
||||
"filename": "vim-nuff_naff_ness.mod",
|
||||
"id": 10
|
||||
},
|
||||
{
|
||||
"filename": "technix-android.mod",
|
||||
"id": 11,
|
||||
"md5": "262de0c4bf31e18d823fbce9da1f1494"
|
||||
},
|
||||
{
|
||||
"md5": "57e0e75881814972f59bcbcc5b77ecd8",
|
||||
"filename": "AAOCG - mIRC 6.xkg.xm",
|
||||
"id": 12
|
||||
},
|
||||
{
|
||||
"filename": "ACME - Acronis TrueImage 10kg.mod",
|
||||
"id": 13,
|
||||
"md5": "350717915ad3e74ebfc6885e80001f93"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"filename": "ADMINCRACK - Image Resize Guide 1.4 crk.it",
|
||||
"md5": "757519ed54131077d2c7ba8d6bee97c1"
|
||||
},
|
||||
{
|
||||
"filename": "AGAiN - AutoShutdownkg.xm",
|
||||
"id": 15,
|
||||
"md5": "f077d40adf510bcc32e98a5da67e1856"
|
||||
},
|
||||
{
|
||||
"md5": "0d8bbb9c784a5a1f56d7ad5f25c56304",
|
||||
"filename": "AGAiN - EIQ FirewallAnalyzer 3.2.10kg.xm",
|
||||
"id": 16
|
||||
},
|
||||
{
|
||||
"filename": "AGAiN - Novelty Pro 8.24 kg.xm",
|
||||
"id": 17,
|
||||
"md5": "dff17b7c1d9d88ee83352d0e8ab0d313"
|
||||
},
|
||||
{
|
||||
"md5": "783bf8ee97a1591e6da19a8a41f43c08",
|
||||
"filename": "BAKA! - DigiTV-HD 3.7.10 crk.xm",
|
||||
"id": 18
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"filename": "banana_skin.mod",
|
||||
"md5": "f9d82a6fa78c5414ffe79ea5d801b0ba"
|
||||
},
|
||||
{
|
||||
"md5": "9ba16f9f58bdafc22d4dbcd236aa1bf3",
|
||||
"id": 20,
|
||||
"filename": "BetaMaster - Easy CD-DA Extractor 8.2.1crk.xm"
|
||||
},
|
||||
{
|
||||
"filename": "Black Magic - Alien Shooter 1.2 +1trn.xm",
|
||||
"id": 21,
|
||||
"md5": "7304ab95990a00e05db0d02db7f1f03d"
|
||||
},
|
||||
{
|
||||
"md5": "5e0b3daa184cdfb15e5dc2a746de4230",
|
||||
"filename": "BRD - No.1 Video Converterkg.xm",
|
||||
"id": 22
|
||||
},
|
||||
{
|
||||
"md5": "4e7887bcd4495e8ad2147a17057fb94e",
|
||||
"filename": "BRD - Teleport Prokg.xm",
|
||||
"id": 23
|
||||
},
|
||||
{
|
||||
"md5": "1d8def01b93ea0bd97ad8af40425df42",
|
||||
"id": 24,
|
||||
"filename": "Canterwood - Hex Workshop v4.22kg.xm"
|
||||
},
|
||||
{
|
||||
"filename": "chipsounds.mod",
|
||||
"id": 25,
|
||||
"md5": "85428bb7ac13730d2576f0904eb7d019"
|
||||
},
|
||||
{
|
||||
"md5": "d3e2910ade401a9a607570eee77e20ae",
|
||||
"filename": "CiM - Nero 6kg.xm",
|
||||
"id": 26
|
||||
},
|
||||
{
|
||||
"md5": "e3967a2d4ffe25e4e6c17f6616adf7d6",
|
||||
"id": 27,
|
||||
"filename": "civilian.xm"
|
||||
},
|
||||
{
|
||||
"md5": "1c17ef518924e9df6af67d3673452a63",
|
||||
"id": 28,
|
||||
"filename": "CORE - Power ISO 3.1kg.xm"
|
||||
},
|
||||
{
|
||||
"md5": "20260901aedf916a922a739bb082673c",
|
||||
"filename": "cydonian sky.xm",
|
||||
"id": 29
|
||||
},
|
||||
{
|
||||
"md5": "edcde32277e426ec6920575360d92840",
|
||||
"filename": "db_vod4k.xm",
|
||||
"id": 30
|
||||
},
|
||||
{
|
||||
"md5": "e41394a3efbf0f6368a84e7d4074c725",
|
||||
"filename": "DiGERATi - CHM To PDF Converter Professional 3.4crk.XM",
|
||||
"id": 31
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"filename": "DiGERATi - FontLab Studio 5.0crk.XM",
|
||||
"md5": "43981fda7802564a2dce4f7e3ba4fd6b"
|
||||
},
|
||||
{
|
||||
"filename": "doors_light_my_fire.xm",
|
||||
"id": 33,
|
||||
"md5": "f798ab94a67c386af12733096c38206b"
|
||||
},
|
||||
{
|
||||
"md5": "17f1e6d22dbb8ff23f622022af5cbfab",
|
||||
"filename": "dtn-super_mario_brothers.xm",
|
||||
"id": 34
|
||||
},
|
||||
{
|
||||
"md5": "82593ac53dec8396b748d21f5d3fc4dc",
|
||||
"filename": "ECLIPSE - Recover My Files 3.94kg.xm",
|
||||
"id": 35
|
||||
},
|
||||
{
|
||||
"md5": "eed4e6ae80a01b7c78ca10088f4f02c5",
|
||||
"id": 36,
|
||||
"filename": "fuck_sopa.xm"
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"filename": "fuck_techno2.mod",
|
||||
"md5": "28e6e43e1154ffafec19768a06bd46c9"
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"filename": "gandbox-mimi_mati_show.mod",
|
||||
"md5": "3f49172fc36ed1225c12b21d00a8e5e1"
|
||||
},
|
||||
{
|
||||
"md5": "1a2d9883717f27efbfea196dbeb5aa2f",
|
||||
"id": 39,
|
||||
"filename": "imploder.xm"
|
||||
},
|
||||
{
|
||||
"md5": "2857fbace6b8f4773fb98f119ef0b5be",
|
||||
"filename": "instant_remedy-giana_sisters.xm",
|
||||
"id": 40
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"filename": "jozz-cognition.mod",
|
||||
"md5": "9e6249bae45c2679f2c4e91a2e879ade"
|
||||
},
|
||||
{
|
||||
"filename": "kabcorp_-_cracktro_vs_game.mod",
|
||||
"id": 42,
|
||||
"md5": "cecfbd229da317120e1891cc03d888e7"
|
||||
},
|
||||
{
|
||||
"filename": "Kindly - Another World 1.1cinstaller.mod",
|
||||
"id": 43,
|
||||
"md5": "73b2e755d0bcff40fbb6bb728f92601c"
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"filename": "Kindly - HyperSnap 6.40.06crk.S3M",
|
||||
"md5": "cdfe714f37b2354216b945a354318a80"
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"filename": "mcmp-happy_new_year93.mod",
|
||||
"md5": "2d2822cdd56d3c791b1d8b5aff5b0384"
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"filename": "mktheme.it",
|
||||
"md5": "61b1bd9b662b85eb988716837c0ea675"
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"filename": "Monday.mod",
|
||||
"md5": "ec7b7e2756b698cfed265d59c5f6d526"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"filename": "mysteristerium.mod",
|
||||
"md5": "42bd323219feee18d24fbd807cc1d8f3"
|
||||
},
|
||||
{
|
||||
"filename": "popcorns.mod",
|
||||
"id": 49,
|
||||
"md5": "429e39302641b5681c6afcb4d8bf73a5"
|
||||
},
|
||||
{
|
||||
"md5": "ceae1bc5b9a6fdc52497eee53eb1c025",
|
||||
"id": 50,
|
||||
"filename": "psycho_force.xm"
|
||||
},
|
||||
{
|
||||
"md5": "28b3016c2ea7b306cd25a8ff2a369e86",
|
||||
"filename": "Razor1911 - Crysiskg.xm",
|
||||
"id": 51
|
||||
},
|
||||
{
|
||||
"md5": "47ab4ab78f11abd14712a3306edf8a3f",
|
||||
"id": 52,
|
||||
"filename": "RELOADED - Resident Evil 6 installer.xm"
|
||||
},
|
||||
{
|
||||
"md5": "7a6fe486c260ccd93704b303f2d219e5",
|
||||
"filename": "rfchip001.xm",
|
||||
"id": 53
|
||||
},
|
||||
{
|
||||
"md5": "e95976a08b6ffd09cbca52d52f0b38b1",
|
||||
"id": 54,
|
||||
"filename": "riders_on_the_storm.mod"
|
||||
},
|
||||
{
|
||||
"filename": "SnD - Internet Download Manager 6.xx kg.xm",
|
||||
"id": 55,
|
||||
"md5": "b28edfbfea13631e5dc697d912aa4a83"
|
||||
},
|
||||
{
|
||||
"md5": "63f3abd118a87ef6db6bdffb4b627046",
|
||||
"filename": "SoS - Crackme25.xm",
|
||||
"id": 56
|
||||
},
|
||||
{
|
||||
"md5": "4c0ac335c82f59e72fb6aca1f2433e2c",
|
||||
"id": 57,
|
||||
"filename": "sound-of-da-lunatic.mod"
|
||||
},
|
||||
{
|
||||
"md5": "a8f1570e9304f16597fd860a04a08e4b",
|
||||
"id": 58,
|
||||
"filename": "spoon-arkanoid.mod"
|
||||
},
|
||||
{
|
||||
"md5": "9c0c477aeec397c14a07cae68a6fa209",
|
||||
"filename": "StardustMemories.mod",
|
||||
"id": 59
|
||||
},
|
||||
{
|
||||
"filename": "tdk-russian_theme.mod",
|
||||
"id": 60,
|
||||
"md5": "b257cb601eeea4e67bf90fe60d4fb611"
|
||||
},
|
||||
{
|
||||
"md5": "a82972add4a7917f77687e3115ceca56",
|
||||
"filename": "team_destruction.xm",
|
||||
"id": 61
|
||||
},
|
||||
{
|
||||
"md5": "c03287aabaaaeac781c4946badaee564",
|
||||
"id": 62,
|
||||
"filename": "tinybrai.mod"
|
||||
},
|
||||
{
|
||||
"md5": "2d1eb17e622ffc3608c1c53a496b1bbd",
|
||||
"filename": "UnderPl - FlashGet 1.71kg.xm",
|
||||
"id": 63
|
||||
},
|
||||
{
|
||||
"filename": "_) - WinRAR and RAR unblacklister.xm",
|
||||
"id": 64,
|
||||
"md5": "b2dcf05d1f0fdda0370d2d620cca9a6d"
|
||||
},
|
||||
{
|
||||
"md5": "99afd2250d8269c735e40f36be24ffc2",
|
||||
"id": 65,
|
||||
"filename": "wltrs_-_sunset.xm"
|
||||
},
|
||||
{
|
||||
"filename": "FFF - EA Games Multikg.xm",
|
||||
"id": 66,
|
||||
"time": 1493299894,
|
||||
"md5": "a7a6c5f93034b71b0c6d8d5a83c90da1"
|
||||
},
|
||||
{
|
||||
"md5": "01e93348dfe58327a84dec3bf432da59",
|
||||
"id": 67,
|
||||
"filename": "F4CG - Moleskinsoft Clone Removercrk.xm",
|
||||
"time": 1493301160
|
||||
},
|
||||
{
|
||||
"md5": "cb2a73af74a63fe05887abed34a73466",
|
||||
"time": 1493415017,
|
||||
"id": 68,
|
||||
"filename": "emax-its_grim_up_north.mod"
|
||||
},
|
||||
{
|
||||
"md5": "8fbe59de618c0c247ea7bc48ef58c872",
|
||||
"id": 69,
|
||||
"filename": "floppi-valon_lapsi.xm",
|
||||
"time": 1493974897
|
||||
},
|
||||
{
|
||||
"id": 73,
|
||||
"filename": "shout-fresh_juice2.mod",
|
||||
"time": 1494529235,
|
||||
"md5": "ab475a04377775d00b7e7d01d83ef13c"
|
||||
},
|
||||
{
|
||||
"filename": "kollaps-coming_soon.mod",
|
||||
"id": 74,
|
||||
"time": 1495043261,
|
||||
"md5": "44785ca97e6fc246ab2867f1f3b5b49e"
|
||||
},
|
||||
{
|
||||
"md5": "abc983a21ae038398b4e60ef6a9edde0",
|
||||
"time": 1495195119,
|
||||
"filename": "pricky-hopper_dopper_popper.xm",
|
||||
"id": 75
|
||||
},
|
||||
{
|
||||
"md5": "57916e7c7f13365ebddb45a5c228be40",
|
||||
"id": 76,
|
||||
"filename": "minimum_velocity.s3m",
|
||||
"time": 1496708803
|
||||
},
|
||||
{
|
||||
"filename": "the_song.mod",
|
||||
"id": 77,
|
||||
"time": 1496709826,
|
||||
"md5": "20bbc8e035928a4896f29588daf11fe1"
|
||||
},
|
||||
{
|
||||
"time": 1496709838,
|
||||
"filename": "razor_1911.mod",
|
||||
"id": 78,
|
||||
"md5": "ba6b5d633d1e6fec84819a24b0e5e25a"
|
||||
},
|
||||
{
|
||||
"md5": "f347a8257b97a8d3c09ded3524d652ed",
|
||||
"time": 1496780994,
|
||||
"filename": "revenge.it",
|
||||
"id": 79
|
||||
},
|
||||
{
|
||||
"md5": "d9f4a42b6a1e220665e1907967449079",
|
||||
"time": 1496781493,
|
||||
"id": 80,
|
||||
"filename": "radix-weather_girl.xm"
|
||||
},
|
||||
{
|
||||
"id": 81,
|
||||
"filename": "BReWErS - Timeshift 1.2 +6trn.xm",
|
||||
"time": 1497050367,
|
||||
"md5": "461c7639f1903ecbd0dd1613f2788d2c"
|
||||
},
|
||||
{
|
||||
"filename": "BReWErS - Mass Effect 2 +15trn.xm",
|
||||
"id": 82,
|
||||
"time": 1497050371,
|
||||
"md5": "286c3cdfcb3328b89c4137e54e487aa1"
|
||||
},
|
||||
{
|
||||
"md5": "ef55a65773c1f4a053e5ab2758dbbd40",
|
||||
"time": 1497050373,
|
||||
"id": 83,
|
||||
"filename": "BReWErS - Star Wars Force Unleashed Ultimate Sith Edition 1.1 +4trn.xm"
|
||||
},
|
||||
{
|
||||
"md5": "00ad171aa8f89c6fab88ed62b25cdb83",
|
||||
"time": 1497051131,
|
||||
"filename": "BReWErS - Mirrors Edge 1.01 +7trn.xm",
|
||||
"id": 84
|
||||
},
|
||||
{
|
||||
"time": 1497052044,
|
||||
"id": 85,
|
||||
"filename": "BReWErS - X Blade +7trn.xm",
|
||||
"md5": "6bb9c2f043f164a9b62b0c420fd28d68"
|
||||
},
|
||||
{
|
||||
"md5": "99ada7b5a2efd94ecbcb4ee75e3f3641",
|
||||
"id": 86,
|
||||
"filename": "Orion-Nero6.3.1.6.xm",
|
||||
"time": 1497052105
|
||||
},
|
||||
{
|
||||
"time": 1497052213,
|
||||
"filename": "Again - Link Stash 1.6.8.0kg.XM",
|
||||
"id": 87,
|
||||
"md5": "2a59014789ded1bc0f137b5bb180641e"
|
||||
},
|
||||
{
|
||||
"time": 1497052308,
|
||||
"filename": "AGAiN - FlashGetkgl_converted.xm",
|
||||
"id": 88,
|
||||
"md5": "be4a24b398c91852d0208fc5c107a8c0"
|
||||
},
|
||||
{
|
||||
"id": 89,
|
||||
"filename": "AGAiN - Stream SubText 2.1.14 DC 121003 kg.mod",
|
||||
"time": 1497052310,
|
||||
"md5": "d7e6956de806f74b43090e73c23d8f31"
|
||||
},
|
||||
{
|
||||
"md5": "705ff5427f931071feb84616b69b2452",
|
||||
"time": 1497052568,
|
||||
"filename": "AGAiN - Swift 3Dkg.xm",
|
||||
"id": 90
|
||||
},
|
||||
{
|
||||
"md5": "212964b45d696e71ec452ed10036c67f",
|
||||
"filename": "AiR - Nomad Factory All Products kg.it",
|
||||
"id": 91,
|
||||
"time": 1497052907
|
||||
},
|
||||
{
|
||||
"filename": "TSRh - FlashGet1.65kg.xm",
|
||||
"id": 92,
|
||||
"time": 1497052978,
|
||||
"md5": "9e01f1250ec175743bd00e8823ee4295"
|
||||
},
|
||||
{
|
||||
"time": 1499670676,
|
||||
"filename": "sf2megam.xm",
|
||||
"id": 93,
|
||||
"md5": "3ada68fd1a7bb8524bc0487302861631"
|
||||
},
|
||||
{
|
||||
"id": 94,
|
||||
"filename": "loxley-das_model.mod",
|
||||
"time": 1500154189,
|
||||
"md5": "9ca89fbb023fece3d746437c30af55d5"
|
||||
},
|
||||
{
|
||||
"time": 1500287899,
|
||||
"id": 95,
|
||||
"filename": "lesnik-rob_mat_reyn_pink.xm",
|
||||
"md5": "f9635d78466456d3b4796970e92d81c8"
|
||||
},
|
||||
{
|
||||
"id": 96,
|
||||
"filename": "maktone-the_crazy_dentist.mod",
|
||||
"time": 1500325565,
|
||||
"md5": "15bf49e3749473b20aa383fffd71d40e"
|
||||
},
|
||||
{
|
||||
"md5": "68f8d4b824ff660d799b06e38e9293b8",
|
||||
"time": 1500487726,
|
||||
"id": 97,
|
||||
"filename": "radix_xyce_-_rainbow_dash_.xm"
|
||||
},
|
||||
{
|
||||
"md5": "48e1381bdf5aa9344bc56e1d00e8bbdc",
|
||||
"time": 1500607726,
|
||||
"id": 98,
|
||||
"filename": "floppi_dreamchip_megamix2.xm"
|
||||
},
|
||||
{
|
||||
"filename": "95-GABBA-MEGAMIX.MOD",
|
||||
"md5": "a9cb37ec290e62575ee646dbd0f52dd0",
|
||||
"id": 99,
|
||||
"time": 1501138138
|
||||
},
|
||||
{
|
||||
"filename": "algar-five.xm",
|
||||
"md5": "d73fd7d61f389218b316a3136eec10b2",
|
||||
"id": 100,
|
||||
"time": 1501385077
|
||||
},
|
||||
{
|
||||
"filename": "CORE - BoostSpeed3.0.2.451Keygen.xm",
|
||||
"md5": "f4d0b1f6d0f6406dfbe65a137b2c1627",
|
||||
"id": 101,
|
||||
"time": 1501484486
|
||||
},
|
||||
{
|
||||
"filename": "Deviance - Yeti Sports Arctic Adventurestrn.xm",
|
||||
"md5": "438b4c46ac27979a5050e7fcb1745d12",
|
||||
"id": 102,
|
||||
"time": 1501510869
|
||||
},
|
||||
{
|
||||
"filename": "maktone-class10.mod",
|
||||
"md5": "53949e6a0c2dd47262f53200fd0a5465",
|
||||
"id": 103,
|
||||
"time": 1502214804
|
||||
},
|
||||
{
|
||||
"filename": "maktone-2000ad_cracktro2.mod",
|
||||
"md5": "d976d97769484c8bd746f888cc6e6f33",
|
||||
"id": 104,
|
||||
"time": 1502216328
|
||||
},
|
||||
{
|
||||
"filename": "maktone-castlevania1.mod",
|
||||
"md5": "73e3867a267a7edda6e9408280a06f78",
|
||||
"id": 105,
|
||||
"time": 1502216328
|
||||
},
|
||||
{
|
||||
"filename": "maktone-class3.mod",
|
||||
"md5": "89ea3039b1808298bf0a8dfe2ffe14c0",
|
||||
"id": 106,
|
||||
"time": 1502216329
|
||||
},
|
||||
{
|
||||
"filename": "maktone-class5.mod",
|
||||
"md5": "805224e3e09871652da22ed995fd2636",
|
||||
"id": 107,
|
||||
"time": 1502216329
|
||||
},
|
||||
{
|
||||
"filename": "maktone-class6.mod",
|
||||
"md5": "c4540d316b5d85d99575d7e8e147ef74",
|
||||
"id": 108,
|
||||
"time": 1502216329
|
||||
},
|
||||
{
|
||||
"filename": "maktone-class9.mod",
|
||||
"md5": "e09ed85e3d7ce90f0498d546ee17febc",
|
||||
"id": 109,
|
||||
"time": 1502216329
|
||||
},
|
||||
{
|
||||
"filename": "maktone-class_cracktro15.mod",
|
||||
"md5": "b812d1ae5ebc9e6a43028f2df5b70439",
|
||||
"id": 110,
|
||||
"time": 1502216329
|
||||
},
|
||||
{
|
||||
"filename": "maktone-class_installer2.mod",
|
||||
"md5": "715162a6a811761247ec3e0f2f978c37",
|
||||
"id": 111,
|
||||
"time": 1502216329
|
||||
},
|
||||
{
|
||||
"filename": "maktone-false_alarm.mod",
|
||||
"md5": "b357ef811e148b99b56a1bc3c6adced6",
|
||||
"id": 112,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-freedom.mod",
|
||||
"md5": "6780799e65056d04314b39923fa7874f",
|
||||
"id": 113,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-invite_intro2001.mod",
|
||||
"md5": "2f879958129ba77705d1b4543a9dc142",
|
||||
"id": 114,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-meskalin.mod",
|
||||
"md5": "454a9bfa1cf62e223974d47ed1677fb3",
|
||||
"id": 115,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-paint_it_black.mod",
|
||||
"md5": "22c52117dceff39d8ae53fa5b1e6cf69",
|
||||
"id": 116,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-razor1911_chipdisk1.mod",
|
||||
"md5": "c9d11b96b6ce52ab9b18be34282c10ea",
|
||||
"id": 117,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-razor1911_chipdisk2.mod",
|
||||
"md5": "7e93d8724fe8ac0c40c2d0db4160b64c",
|
||||
"id": 118,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-revenging_cops.mod",
|
||||
"md5": "d291b5766a64b96e7ebd97fc678e34bc",
|
||||
"id": 119,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-sae3.mod",
|
||||
"md5": "1d80e40b8da7b42c0811089c1fa1bdbe",
|
||||
"id": 120,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-sae4.mod",
|
||||
"md5": "7bc7b5f8cb95205c6d20a93e351f7f22",
|
||||
"id": 121,
|
||||
"time": 1502216330
|
||||
},
|
||||
{
|
||||
"filename": "maktone-super_mario_world.mod",
|
||||
"md5": "22f89872e8dcb55b84d0af9797c77d61",
|
||||
"id": 122,
|
||||
"time": 1502216331
|
||||
},
|
||||
{
|
||||
"filename": "maktone-white_widow.mod",
|
||||
"md5": "c1aac174e91c4c4ef731cb6548ec4ff8",
|
||||
"id": 123,
|
||||
"time": 1502216331
|
||||
},
|
||||
{
|
||||
"filename": "maktone-xps_introtune3.mod",
|
||||
"md5": "487c7e958795112bf3121f58552faa5f",
|
||||
"id": 124,
|
||||
"time": 1502216331
|
||||
},
|
||||
{
|
||||
"filename": "rez-little_wings.mod",
|
||||
"md5": "e4115fb58683c87d033a0a5fb3bb9138",
|
||||
"id": 125,
|
||||
"time": 1503930930
|
||||
},
|
||||
{
|
||||
"filename": "tRUE - Watermark Master 1.2.13crk.mod",
|
||||
"md5": "d31fc4780cbc42e050f3331d8322b612",
|
||||
"id": 126,
|
||||
"time": 1503930935
|
||||
},
|
||||
{
|
||||
"filename": "CROME - Nova superb.xm",
|
||||
"md5": "a0b450aaa78abab2bd8ae9037f126487",
|
||||
"id": 127,
|
||||
"time": 1503930941
|
||||
},
|
||||
{
|
||||
"filename": "dubmood-ninja_starts_school.xm",
|
||||
"md5": "b0d27276c24e75828cc84b2059e18182",
|
||||
"id": 128,
|
||||
"time": 1503939165
|
||||
},
|
||||
{
|
||||
"filename": "dubmood&nadom-prask.xm",
|
||||
"md5": "b5f34b4158af8e8dd69b73be5408b226",
|
||||
"id": 129,
|
||||
"time": 1504008134
|
||||
},
|
||||
{
|
||||
"filename": "burning_binary.it",
|
||||
"md5": "eccb87bc977dbb36dba7ac7625413876",
|
||||
"id": 130,
|
||||
"time": 1504189088
|
||||
},
|
||||
{
|
||||
"filename": "dubmood&zabutom-oh_2149_sexy_thing.xm",
|
||||
"md5": "3d856fcf1c8791a01df0675f31435318",
|
||||
"id": 131,
|
||||
"time": 1504523316
|
||||
},
|
||||
{
|
||||
"filename": "powerplant.mod",
|
||||
"md5": "7249adb5def58a107ac9f12b674bd5cd",
|
||||
"id": 132,
|
||||
"time": 1504551882
|
||||
},
|
||||
{
|
||||
"filename": "softworld.mod",
|
||||
"md5": "a1ad01a92f6a05f4542ed2de0c2fdc47",
|
||||
"id": 133,
|
||||
"time": 1504552154
|
||||
},
|
||||
{
|
||||
"filename": "sourcream_chips.xm",
|
||||
"md5": "fb1ee2c4970d6606eef4ca1665919bd9",
|
||||
"id": 134,
|
||||
"time": 1504552641
|
||||
},
|
||||
{
|
||||
"filename": "_high_tension_.mod",
|
||||
"md5": "1ecbc6db2d86ea5880b1608353e129c8",
|
||||
"id": 135,
|
||||
"time": 1504553132
|
||||
},
|
||||
{
|
||||
"filename": "jelly&dalezy&skeema-cocain-theme.xm",
|
||||
"md5": "9140c7c94e1c24258318d2a88b530e69",
|
||||
"id": 136,
|
||||
"time": 1505392907
|
||||
},
|
||||
{
|
||||
"filename": "chromag-aetsch!.mod",
|
||||
"md5": "1ff1e63d1abc0cd200efba301755c675",
|
||||
"id": 137,
|
||||
"time": 1506024945
|
||||
},
|
||||
{
|
||||
"filename": "estrayk-bwalls.mod",
|
||||
"md5": "9fcb61e84eb694b160fd980f4bbe2aa4",
|
||||
"id": 138,
|
||||
"time": 1506371196
|
||||
},
|
||||
{
|
||||
"filename": "dubmood-rez_1911_cracktro_6.xm",
|
||||
"md5": "2004c50cf8025492ee2ea9d646618348",
|
||||
"id": 139,
|
||||
"time": 1506415533
|
||||
},
|
||||
{
|
||||
"filename": "lhs_rld10.xm",
|
||||
"md5": "8044f35901666d8ca4c887f4f67ba0d8",
|
||||
"id": 140,
|
||||
"time": 1506923851
|
||||
},
|
||||
{
|
||||
"filename": "pink-the_last_remix.mod",
|
||||
"md5": "77e876f309bc11e531cbc4ee6d875983",
|
||||
"id": 141,
|
||||
"time": 1508907875
|
||||
},
|
||||
{
|
||||
"filename": "wire-last_ninja_remix.xm",
|
||||
"md5": "223cd5cfcf1c41fd43edb4f5f8a99c17",
|
||||
"id": 142,
|
||||
"time": 1509188775
|
||||
},
|
||||
{
|
||||
"filename": "bit-neological.mod",
|
||||
"md5": "22fc4f89e0e31456c928347a18b2c27e",
|
||||
"id": 143,
|
||||
"time": 1510332676
|
||||
},
|
||||
{
|
||||
"filename": "nugget-kinesisk_polka.mod",
|
||||
"md5": "092116048288198eb52bd5b29261cd8d",
|
||||
"id": 144,
|
||||
"time": 1510814626
|
||||
},
|
||||
{
|
||||
"filename": "jellydog-chippie2.xm",
|
||||
"md5": "c9331a0846a7820e551239c3718eccc4",
|
||||
"id": 145,
|
||||
"time": 1512541903
|
||||
},
|
||||
{
|
||||
"filename": "diesel-fucked.mod",
|
||||
"md5": "88213bb750fe4a32eebc2ae7e419ba77",
|
||||
"id": 146,
|
||||
"time": 1521741316
|
||||
}
|
||||
]
|