Initial commit

This commit is contained in:
fire bingo 2018-03-28 07:14:26 -07:00
commit 1e710af520
17 changed files with 12275 additions and 0 deletions

3
.gitignore vendored Normal file

@ -0,0 +1,3 @@
/XDUData
/
web.config

39
Css/main.css Normal file

@ -0,0 +1,39 @@
@font-face {
font-family: FOT-RodinNTLGPro-B_0;
src: url(../Fonts/FOT-RodinNTLGPro-B_0.woff2) format('woff');
}
@font-face {
font-family: FOT-RodinNTLGPro-DB;
src: url(../Fonts/FOT-RodinNTLGPro-DB.woff2) format('woff');
}
@font-face {
font-family: FOT-RodinNTLGPro-M;
src: url(../Fonts/FOT-RodinNTLGPro-M.woff2) format('woff');
}
@font-face {
font-family: Orbitron Black;
src: url(../Fonts/Orbitron Black.woff2) format('woff');
}
@font-face {
font-family: Orbitron Bold;
src: url(../Fonts/Orbitron Bold.woff2) format('woff');
}
@font-face {
font-family: Orbitron Light;
src: url(../Fonts/Orbitron Light.woff2) format('woff');
}
@font-face {
font-family: Orbitron Medium;
src: url(../Fonts/Orbitron Medium.woff2) format('woff');
}
@font-face {
font-family: SourceCodePro-Regular;
src: url(../Fonts/SourceCodePro-Regular.woff2) format('woff');
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Fonts/Orbitron Black.woff2 Normal file

Binary file not shown.

BIN
Fonts/Orbitron Bold.woff2 Normal file

Binary file not shown.

BIN
Fonts/Orbitron Light.woff2 Normal file

Binary file not shown.

BIN
Fonts/Orbitron Medium.woff2 Normal file

Binary file not shown.

Binary file not shown.

53
Js/Common.js Normal file

@ -0,0 +1,53 @@
'use strict';
var rootUrl = `${window.location.protocol}//${window.location.host}/`
class commonFunctions {
static getFileText(file) {
return new Promise((resolve, reject) => {
fetch(file)
.then((success) => {
success.text()
.then((text) => {
resolve(text);
});
}, (failure) => {
reject(failure);
});
});
}
static getFileJson(file) {
return new Promise((resolve, reject) => {
fetch(file)
.then((success) => {
success.json()
.then((json) => {
resolve(json);
});
}, (failure) => {
reject(failure);
});
});
}
static readLine(line, headers) {
if(line.startsWith('//')) {
return {comment: line};
} else if(!line) {
return undefined;
} else {
var split = line.split('\t');
var newEntry = {};
for(let i = 0; i < split.length; ++i) {
var x = split[i];
newEntry[headers[i]] = x;
}
return newEntry;
}
}
static lerp(start, end, t) {
return (1 - t) * start + t * end;
}
}

61
Js/Main.js Normal file

@ -0,0 +1,61 @@
'use strict';
const pixiApp = {
app: new PIXI.Application({width: 1334, height: 750}),
loader: PIXI.loader
};
const utage = new UtageInfo();
const player = new Player(pixiApp, utage);
const context = new (window.AudioContext || window.webkitAudioContext)();
const onBodyLoaded = () => {
var promises = [
utage.loadUtageSettings()
];
Promise.all(promises)
.then((success) => {
onParsed(success);
}, (failure) => {
console.log(failure);
});
};
function onParsed (success) {
buildMissionSelectList();
document.getElementById('app-container').appendChild(pixiApp.app.view);
}
function buildMissionSelectList() {
let selectBox = document.getElementById('select-mission');
selectBox.innerHTML = '';
for(let i = -1; i < utage.missionsList.length; ++i) {
let opt = document.createElement('option');
if(i === -1) {
opt.setAttribute('value', '{Select}');
opt.innerText = 'Select Mission';
} else {
let m = utage.missionsList[i];
opt.setAttribute('value', m);
opt.innerText = m;
}
selectBox.appendChild(opt);
}
}
function missionChanged(event) {
if(!event || !event.currentTarget || !event.currentTarget.value || event.currentTarget.value === '{Select}') { return; }
let newMission = utage.availableMissions[event.currentTarget.value.split('|')[0]];
utage.parseMissionFile(`${utage.rootDirectory}XDUData/${newMission.Path.replace('Asset/', '').replace('.utage', '')}`)
.then((success) => {
player.playFile()
.then((success) => {
debugger;
}, (failure) => {
debugger;
console.log(failure);
});
}, (failure) => {
console.log(failure);
});
}

107
Js/Player.js Normal file

@ -0,0 +1,107 @@
class Player {
constructor(pixi, utage) {
this.pixi = pixi;
this.loader = pixi.loader;
this.resources = pixi.loader.resources;
this.utage = utage;
this.currentCharacters = [];
}
playFile() {
let runningPromise = new Promise((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
this.preCheckFilesToGet()
.then((success) => {
this.pixi.app.ticker.add((delta) => {
this.onPixiTick(delta);
});
this.getNextCommand();
}, (failure) => {
console.log(failure);
});
return runningPromise;
}
preCheckFilesToGet() {
return new Promise((resolve, reject) => {
for(var i = 0; i < utage.currentPlayingFile.length; ++i) {
try {
var c = utage.currentPlayingFile[i];
if(c.comment) { continue; }
var command = c.Command ? c.Command.toLowerCase() : '';
switch(command) {
//BG images
case "bg":
if(this.utage.textureInfo[c.Arg1]) {
if(!this.resources[`bg|${c.Arg1}`]) {
this.loader.add(`bg|${c.Arg1}`, this.utage.textureInfo[c.Arg1].FileName);
}
} else if(!this.utage.textureInfo[c.Arg1]) {
console.log(`Failed to get BG: ${c.Arg1}`);
}
break;
//Text
case "":
//Character Text
if(c.Arg1 && c.Arg2 && c.Arg2 != "<Off>" && c.Text &&
this.utage.characterData[c.Arg1] && this.utage.characterData[c.Arg1][c.Arg2]) {
if(!this.resources[`char|${c.Arg1}|${c.Arg2}`]) {
this.loader.add(`char|${c.Arg1}|${c.Arg2}`, this.utage.characterData[c.Arg1][c.Arg2].FileName);
}
} else if(c.Arg1 && c.Arg2 && c.Arg2 != "<Off>" &&
(!this.utage.characterData[c.Arg1] || !this.utage.characterData[c.Arg1][c.Arg2])) {
console.log(`Failed to get Character: ${c.Arg1}|${c.Arg2}`);
}
break;
}
} catch (error) {
console.log(error);
continue;
}
}
this.loader
.on("progress", (loader, resource) => {
this.onPixiProgress(loader, resource)
})
.load(() => {
this.onPixiLoad(resolve, reject);
});
});
}
onPixiProgress(loader, resource) {
}
onPixiLoad(resolve, reject) {
resolve();
}
onPixiTick(delta) {
}
onEndFile() {
this.resolve();
}
getNextCommand() {
let running = true;
do
{
var command = utage.currentPlayingFile.pop();
if(!utage.currentPlayingFile || utage.currentPlayingFile.length === 0) {
this.onEndFile();
running = false;
return;
}
if(!command || command.comment) {
continue;
}
//do things
continue;
} while (running);
}
}

214
Js/UtageParse.js Normal file

@ -0,0 +1,214 @@
//http://madnesslabo.net/utage/?page_id=4448&lang=en
'use strict';
class UtageInfo {
constructor() {
this.currentPlayingFile = [];
this.rootDirectory = `${rootUrl}XDUPlayer/`;
this.availableMissions = {};
this.missionsList = [];
this.characterData = {};
this.layerData = {};
this.localizeInfo = {};
this.paramInfo = {};
this.soundInfo = {};
this.textureInfo = {};
}
loadUtageSettings(resolve, reject) {
return new Promise((resolve, reject) => {
var promises = [
commonFunctions.getFileJson(`${this.rootDirectory}Js/XduMissions.json`),
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Character.tsv`),
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Layer.tsv`),
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Localize.tsv`),
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Param.tsv`),
//commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Scenario.tsv`),
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Sound.tsv`),
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Texture.tsv`)
];
Promise.all(promises)
.then((success) => {
this.availableMissions = success[0];
this.missionsList = Object.keys(this.availableMissions).map((k) => {
return `${this.availableMissions[k].Id}|${this.availableMissions[k].Name}`;
});
this.missionsList.sort();
this.parseCharacterInfo(success[1]);
this.parseLayerInfo(success[2]);
this.parseLocalizeInfo(success[3]);
this.parseParamInfo(success[4]);
this.parseSoundInfo(success[5]);
this.parseTextureInfo(success[6]);
resolve();
}, (failure) => {
reject(failure);
});
});
}
parseMissionFile(file) {
return new Promise((resolve, reject) => {
commonFunctions.getFileText(file)
.then((success) => {
var lines = success.split("\n");
var headers = [];
for(let i = 0; i < lines.length; ++i) {
var line = lines[i];
if(i === 0) {
headers = line.split('\t');
} else {
var read = commonFunctions.readLine(line, headers);
if(read) {
this.currentPlayingFile.push(read);
}
}
}
//Reverse the array since pop takes from the end.
this.currentPlayingFile.reverse();
resolve();
}, (failure) => {
reject(failure);
});
});
}
//http://madnesslabo.net/utage/?page_id=4521&lang=en
parseCharacterInfo(text) {
var lines = text.split("\n");
var headers = [];
var lastCharName = '';
var lastNameText = '';
for(let i = 0; i < lines.length; ++i) {
var line = lines[i];
if(i === 0) {
headers = line.split('\t');
} else {
var read = commonFunctions.readLine(line, headers);
if(read && !read.comment) {
//If character name is empty it means it belongs to the line before it
// so I am grouping the patterns by character name.
if(read.CharacterName) {
lastCharName = read.CharacterName;
}
delete read.CharacterName;
if(read.NameText) {
lastNameText = read.NameText;
} else {
read.NameText = lastNameText;
}
if(read.FileName && !read.FileName.startsWith('file://')) {
read.FileName = `${this.rootDirectory}XDUData/Character/${read.FileName}`;
}
if(!this.characterData[lastCharName]) {
this.characterData[lastCharName] = {};
}
this.characterData[lastCharName][read.Pattern || "none"] = read;
}
}
}
}
//http://madnesslabo.net/utage/?page_id=4518&lang=en
parseLayerInfo(text) {
var lines = text.split("\n");
var headers = [];
for(let i = 0; i < lines.length; ++i) {
var line = lines[i];
if(i === 0) {
headers = line.split('\t');
} else {
var read = commonFunctions.readLine(line, headers);
if(read && read.LayerName) {
this.layerData[read.LayerName] = read;
}
}
}
}
//http://madnesslabo.net/utage/?page_id=4514&lang=en
parseLocalizeInfo(text) {
var lines = text.split("\n");
var headers = [];
for(let i = 0; i < lines.length; ++i) {
var line = lines[i];
if(i === 0) {
headers = line.split('\t');
} else {
var read = commonFunctions.readLine(line, headers);
if(read && read.Key) {
this.localizeInfo[read.Key] = read;
}
}
}
}
//http://madnesslabo.net/utage/?page_id=4517&lang=en
parseParamInfo(text) {
var lines = text.split("\n");
var headers = [];
for(let i = 0; i < lines.length; ++i) {
var line = lines[i];
if(i === 0) {
headers = line.split('\t');
} else {
var read = commonFunctions.readLine(line, headers);
if(read && read.Label) {
this.paramInfo[read.Label] = read;
}
}
}
}
//http://madnesslabo.net/utage/?page_id=4519&lang=en
parseSoundInfo(text) {
var lines = text.split("\n");
var headers = [];
for(let i = 0; i < lines.length; ++i) {
var line = lines[i];
if(i === 0) {
headers = line.split('\t');
} else {
var read = commonFunctions.readLine(line, headers);
if(read && read.Label) {
if(read.FileName && read.Type) {
if(!read.FileName.includes('.')) {
read.FileName = `${read.FileName}.opus`;
}
switch(read.Type.toLowerCase()) {
case 'se':
if(read.FileName.includes(',')) {
var s = read.FileName.split(',');
read.FileName = `${s[0].split('_').join('/')}/${s[1]}`;
}
read.FileName = `${this.rootDirectory}XDUData/Se/${read.FileName}`;
break;
case 'bgm':
read.FileName = `${this.rootDirectory}XDUData/Bgm/${read.FileName}`;
break;
}
}
this.soundInfo[read.Label] = read;
}
}
}
}
//http://madnesslabo.net/utage/?page_id=4520&lang=en
parseTextureInfo(text) {
var lines = text.split("\n");
var headers = [];
for(let i = 0; i < lines.length; ++i) {
var line = lines[i];
if(i === 0) {
headers = line.split('\t');
} else {
var read = commonFunctions.readLine(line, headers);
if(read && read.Label) {
read.FileName = `${this.rootDirectory}XDUData/BG/${read.FileName}`;
this.textureInfo[read.Label] = read;
}
}
}
}
}

10883
Js/XduMissions.json Normal file

File diff suppressed because it is too large Load Diff

899
Js/bgmLoop.json Normal file

@ -0,0 +1,899 @@
{
"bgm_adv_battle_01": {
"duration": 93.01484375,
"loop_end": {
"samples_48k": 4464640,
"samples_native": 2976427,
"seconds": 93.01334375
},
"loop_start": {
"samples_48k": 543504,
"samples_native": 362336,
"seconds": 11.323
}
},
"bgm_adv_comical_01": {
"duration": 57.7235625,
"loop_end": {
"samples_48k": 2770663,
"samples_native": 1847109,
"seconds": 57.72215625
},
"loop_start": {
"samples_48k": 250656,
"samples_native": 167104,
"seconds": 5.222
}
},
"bgm_adv_emergency_01": {
"duration": 98.295,
"loop_end": {
"samples_48k": 4718094,
"samples_native": 3145396,
"seconds": 98.293625
},
"loop_start": {
"samples_48k": 1304784,
"samples_native": 869856,
"seconds": 27.183
}
},
"bgm_adv_everyday_01": {
"duration": 75.8483125,
"loop_end": {
"samples_48k": 3640636,
"samples_native": 2427091,
"seconds": 75.84659375
},
"loop_start": {
"samples_48k": 349200,
"samples_native": 232800,
"seconds": 7.275
}
},
"bgm_adv_everyday_02": {
"duration": 70.43615625,
"loop_end": {
"samples_48k": 3380871,
"samples_native": 2253914,
"seconds": 70.4348125
},
"loop_start": {
"samples_48k": 588144,
"samples_native": 392096,
"seconds": 12.253
}
},
"bgm_adv_everyday_03": {
"duration": 78.99671875,
"loop_end": {
"samples_48k": 3791752,
"samples_native": 2527835,
"seconds": 78.99484375
},
"loop_start": {
"samples_48k": 436416,
"samples_native": 290944,
"seconds": 9.092
}
},
"bgm_adv_highlight_01": {
"duration": 97.1335,
"loop_end": {
"samples_48k": 4662328,
"samples_native": 3108219,
"seconds": 97.13184375
},
"loop_start": {
"samples_48k": 473232,
"samples_native": 315488,
"seconds": 9.859
}
},
"bgm_adv_highlight_02": {
"duration": 76.46521875,
"loop_end": {
"samples_48k": 3670234,
"samples_native": 2446823,
"seconds": 76.46321875
},
"loop_start": {
"samples_48k": 648768,
"samples_native": 432512,
"seconds": 13.516
}
},
"bgm_adv_highlight_03": {
"duration": 109.82465625,
"loop_end": {
"samples_48k": 5271502,
"samples_native": 3514335,
"seconds": 109.82296875
},
"loop_start": {
"samples_48k": 1476672,
"samples_native": 984448,
"seconds": 30.764
}
},
"bgm_adv_peace_01": {
"duration": 83.74309375,
"loop_end": {
"samples_48k": 4019584,
"samples_native": 2679723,
"seconds": 83.74134375
},
"loop_start": {
"samples_48k": 541344,
"samples_native": 360896,
"seconds": 11.278
}
},
"bgm_adv_sorrow_01": {
"duration": 75.9431875,
"loop_end": {
"samples_48k": 3645204,
"samples_native": 2430136,
"seconds": 75.94175
},
"loop_start": {
"samples_48k": 975936,
"samples_native": 650624,
"seconds": 20.332
}
},
"bgm_adv_tension_01": {
"duration": 66.506,
"loop_end": {
"samples_48k": 3192193,
"samples_native": 2128129,
"seconds": 66.50403125
},
"loop_start": {
"samples_48k": 411504,
"samples_native": 274336,
"seconds": 8.573
}
},
"bgm_home_01": {
"duration": 76.73034375,
"loop_end": {
"samples_48k": 3682962,
"samples_native": 2455308,
"seconds": 76.728375
},
"loop_start": {
"samples_48k": 850176,
"samples_native": 566784,
"seconds": 17.712
}
},
"bgm_raid_01": {
"duration": 111.7009375,
"loop_end": {
"samples_48k": 5361571,
"samples_native": 3574381,
"seconds": 111.69940625
},
"loop_start": {
"samples_48k": 1110144,
"samples_native": 740096,
"seconds": 23.128
}
},
"jingle_gacha": {
"duration": 15.652,
"loop_end": {
"samples_48k": 751200,
"samples_native": 500800,
"seconds": 15.65
},
"loop_start": {
"samples_48k": 290400,
"samples_native": 193600,
"seconds": 6.05
}
},
"musicBase": {
"duration": 86.40134375,
"loop_end": {
"samples_48k": 4147201,
"samples_native": 2764801,
"seconds": 86.40003125
},
"loop_start": {
"samples_48k": 0,
"samples_native": 0,
"seconds": 0.0
}
},
"music_apple": {
"duration": 86.01065625,
"loop_end": {
"samples_48k": 4128439,
"samples_native": 2752293,
"seconds": 86.00915625
},
"loop_start": {
"samples_48k": 0,
"samples_native": 0,
"seconds": 0.0
}
},
"music_asu_no_gaika": {
"duration": 89.30321875,
"loop_end": {
"samples_48k": 4286482,
"samples_native": 2857655,
"seconds": 89.30171875
},
"loop_start": {
"samples_48k": 961632,
"samples_native": 641088,
"seconds": 20.034
}
},
"music_beyond_the_blade": {
"duration": 107.07978125,
"loop_end": {
"samples_48k": 5139739,
"samples_native": 3426493,
"seconds": 107.07790625
},
"loop_start": {
"samples_48k": 1172256,
"samples_native": 781504,
"seconds": 24.422
}
},
"music_bye_bye_lullaby": {
"duration": 77.39109375,
"loop_end": {
"samples_48k": 3714693,
"samples_native": 2476462,
"seconds": 77.3894375
},
"loop_start": {
"samples_48k": 892320,
"samples_native": 594880,
"seconds": 18.59
}
},
"music_dangerous_sunshine": {
"duration": 99.20853125,
"loop_end": {
"samples_48k": 4761918,
"samples_native": 3174612,
"seconds": 99.206625
},
"loop_start": {
"samples_48k": 1238112,
"samples_native": 825408,
"seconds": 25.794
}
},
"music_dareka_no_tame_no_hikari": {
"duration": 108.5063125,
"loop_end": {
"samples_48k": 5208220,
"samples_native": 3472147,
"seconds": 108.50459375
},
"loop_start": {
"samples_48k": 2697264,
"samples_native": 1798176,
"seconds": 56.193
}
},
"music_edge_works_of_goddess_zababa": {
"duration": 91.3029375,
"loop_end": {
"samples_48k": 4382446,
"samples_native": 2921631,
"seconds": 91.30096875
},
"loop_start": {
"samples_48k": 1080480,
"samples_native": 720320,
"seconds": 22.51
}
},
"music_eiai_promise": {
"duration": 123.58634375,
"loop_end": {
"samples_48k": 5932080,
"samples_native": 3954720,
"seconds": 123.585
},
"loop_start": {
"samples_48k": 1861680,
"samples_native": 1241120,
"seconds": 38.785
}
},
"music_first_love_song": {
"duration": 104.9476875,
"loop_end": {
"samples_48k": 5037417,
"samples_native": 3358278,
"seconds": 104.9461875
},
"loop_start": {
"samples_48k": 585072,
"samples_native": 390048,
"seconds": 12.189
}
},
"music_fushichou_no_flamme": {
"duration": 129.0045,
"loop_end": {
"samples_48k": 6192121,
"samples_native": 4128081,
"seconds": 129.00253125
},
"loop_start": {
"samples_48k": 2669376,
"samples_native": 1779584,
"seconds": 55.612
}
},
"music_gekisou_gungnir": {
"duration": 100.545375,
"loop_end": {
"samples_48k": 4826109,
"samples_native": 3217406,
"seconds": 100.5439375
},
"loop_start": {
"samples_48k": 1120224,
"samples_native": 746816,
"seconds": 23.338
}
},
"music_gekisyou_infinity": {
"duration": 152.32209375,
"loop_end": {
"samples_48k": 7311394,
"samples_native": 4874263,
"seconds": 152.32071875
},
"loop_start": {
"samples_48k": 3361680,
"samples_native": 2241120,
"seconds": 70.035
}
},
"music_gekkabijin": {
"duration": 99.34246875,
"loop_end": {
"samples_48k": 4768356,
"samples_native": 3178904,
"seconds": 99.34075
},
"loop_start": {
"samples_48k": 1268592,
"samples_native": 845728,
"seconds": 26.429
}
},
"music_gekkou_no_tsurugi": {
"duration": 86.184875,
"loop_end": {
"samples_48k": 4136785,
"samples_native": 2757857,
"seconds": 86.18303125
},
"loop_start": {
"samples_48k": 833472,
"samples_native": 555648,
"seconds": 17.364
}
},
"music_genkaitoppa_g_beat": {
"duration": 121.08309375,
"loop_end": {
"samples_48k": 5811907,
"samples_native": 3874605,
"seconds": 121.08140625
},
"loop_start": {
"samples_48k": 1906128,
"samples_native": 1270752,
"seconds": 39.711
}
},
"music_genocide_saw": {
"duration": 95.9691875,
"loop_end": {
"samples_48k": 4606449,
"samples_native": 3070966,
"seconds": 95.9676875
},
"loop_start": {
"samples_48k": 1209408,
"samples_native": 806272,
"seconds": 25.196
}
},
"music_ginwan_airget_lamh": {
"duration": 99.313,
"loop_end": {
"samples_48k": 4766931,
"samples_native": 3177954,
"seconds": 99.3110625
},
"loop_start": {
"samples_48k": 1055424,
"samples_native": 703616,
"seconds": 21.988
}
},
"music_gohoushi_maidmode": {
"duration": 95.612125,
"loop_end": {
"samples_48k": 4589314,
"samples_native": 3059543,
"seconds": 95.61071875
},
"loop_start": {
"samples_48k": 1287408,
"samples_native": 858272,
"seconds": 26.821
}
},
"music_gokuren_igalima": {
"duration": 80.25296875,
"loop_end": {
"samples_48k": 3852064,
"samples_native": 2568043,
"seconds": 80.25134375
},
"loop_start": {
"samples_48k": 476784,
"samples_native": 317856,
"seconds": 9.933
}
},
"music_gun_bullet_xxx": {
"duration": 83.22640625,
"loop_end": {
"samples_48k": 3994797,
"samples_native": 2663198,
"seconds": 83.2249375
},
"loop_start": {
"samples_48k": 117312,
"samples_native": 78208,
"seconds": 2.444
}
},
"music_gyakkou_no_flugel": {
"duration": 114.43875,
"loop_end": {
"samples_48k": 5492964,
"samples_native": 3661976,
"seconds": 114.43675
},
"loop_start": {
"samples_48k": 1260816,
"samples_native": 840544,
"seconds": 26.267
}
},
"music_gyakkou_no_resolve": {
"duration": 111.3798125,
"loop_end": {
"samples_48k": 5346163,
"samples_native": 3564109,
"seconds": 111.37840625
},
"loop_start": {
"samples_48k": 1638576,
"samples_native": 1092384,
"seconds": 34.137
}
},
"music_hadakaninatte_natsu": {
"duration": 85.93515625,
"loop_end": {
"samples_48k": 4124794,
"samples_native": 2749863,
"seconds": 85.93321875
},
"loop_start": {
"samples_48k": 654768,
"samples_native": 436512,
"seconds": 13.641
}
},
"music_hajimarino_uta": {
"duration": 167.56865625,
"loop_end": {
"samples_48k": 8043231,
"samples_native": 5362154,
"seconds": 167.5673125
},
"loop_start": {
"samples_48k": 1400592,
"samples_native": 933728,
"seconds": 29.179
}
},
"music_hidamari_memoria": {
"duration": 107.5283125,
"loop_end": {
"samples_48k": 5161266,
"samples_native": 3440844,
"seconds": 107.526375
},
"loop_start": {
"samples_48k": 861504,
"samples_native": 574336,
"seconds": 17.948
}
},
"music_kimitoiu_otokanade_tsukirumade": {
"duration": 95.7555,
"loop_end": {
"samples_48k": 4596183,
"samples_native": 3064122,
"seconds": 95.7538125
},
"loop_start": {
"samples_48k": 845616,
"samples_native": 563744,
"seconds": 17.617
}
},
"music_koi_no_okehazama": {
"duration": 76.1594375,
"loop_end": {
"samples_48k": 3655587,
"samples_native": 2437058,
"seconds": 76.1580625
},
"loop_start": {
"samples_48k": 710064,
"samples_native": 473376,
"seconds": 14.793
}
},
"music_kono_ima_wo_ikite": {
"duration": 161.39909375,
"loop_end": {
"samples_48k": 7747063,
"samples_native": 5164709,
"seconds": 161.39715625
},
"loop_start": {
"samples_48k": 939792,
"samples_native": 626528,
"seconds": 19.579
}
},
"music_kyoushitsu_monochrome": {
"duration": 79.831625,
"loop_end": {
"samples_48k": 3831834,
"samples_native": 2554556,
"seconds": 79.829875
},
"loop_start": {
"samples_48k": 489168,
"samples_native": 326112,
"seconds": 10.191
}
},
"music_makenaiai_ga_kokoniaru": {
"duration": 93.74815625,
"loop_end": {
"samples_48k": 4499835,
"samples_native": 2999890,
"seconds": 93.7465625
},
"loop_start": {
"samples_48k": 1334880,
"samples_native": 889920,
"seconds": 27.81
}
},
"music_makyu_ichiibal": {
"duration": 81.071375,
"loop_end": {
"samples_48k": 3891351,
"samples_native": 2594234,
"seconds": 81.0698125
},
"loop_start": {
"samples_48k": 650016,
"samples_native": 433344,
"seconds": 13.542
}
},
"music_melodious_moonlight": {
"duration": 99.05025,
"loop_end": {
"samples_48k": 4754340,
"samples_native": 3169560,
"seconds": 99.04875
},
"loop_start": {
"samples_48k": 1230576,
"samples_native": 820384,
"seconds": 25.637
}
},
"music_nijiiro_no_flugel": {
"duration": 112.277,
"loop_end": {
"samples_48k": 5389231,
"samples_native": 3592821,
"seconds": 112.27565625
},
"loop_start": {
"samples_48k": 1157088,
"samples_native": 771392,
"seconds": 24.106
}
},
"music_orbital_beat": {
"duration": 74.67153125,
"loop_end": {
"samples_48k": 3584140,
"samples_native": 2389427,
"seconds": 74.66959375
},
"loop_start": {
"samples_48k": 1202976,
"samples_native": 801984,
"seconds": 25.062
}
},
"music_oukyo_sulsagana": {
"duration": 100.1548125,
"loop_end": {
"samples_48k": 4807359,
"samples_native": 3204906,
"seconds": 100.1533125
},
"loop_start": {
"samples_48k": 1065168,
"samples_native": 710112,
"seconds": 22.191
}
},
"music_over_killscythe_hell": {
"duration": 91.43084375,
"loop_end": {
"samples_48k": 4388601,
"samples_native": 2925734,
"seconds": 91.4291875
},
"loop_start": {
"samples_48k": 1212432,
"samples_native": 808288,
"seconds": 25.259
}
},
"music_practice_mode": {
"duration": 108.994625,
"loop_end": {
"samples_48k": 5231652,
"samples_native": 3487768,
"seconds": 108.99275
},
"loop_start": {
"samples_48k": 1314384,
"samples_native": 876256,
"seconds": 27.383
}
},
"music_ressou_gungnir": {
"duration": 141.42465625,
"loop_end": {
"samples_48k": 6788316,
"samples_native": 4525544,
"seconds": 141.42325
},
"loop_start": {
"samples_48k": 3042432,
"samples_native": 2028288,
"seconds": 63.384
}
},
"music_sakura_blizzard": {
"duration": 101.234875,
"loop_end": {
"samples_48k": 4859196,
"samples_native": 3239464,
"seconds": 101.23325
},
"loop_start": {
"samples_48k": 1204704,
"samples_native": 803136,
"seconds": 25.098
}
},
"music_santa_ga_machi_ni_yattekuru": {
"duration": 104.1534375,
"loop_end": {
"samples_48k": 4999269,
"samples_native": 3332846,
"seconds": 104.1514375
},
"loop_start": {
"samples_48k": 662304,
"samples_native": 441536,
"seconds": 13.798
}
},
"music_seigiwoshinjite_nigirishimete": {
"duration": 87.9635625,
"loop_end": {
"samples_48k": 4222179,
"samples_native": 2814786,
"seconds": 87.9620625
},
"loop_start": {
"samples_48k": 382512,
"samples_native": 255008,
"seconds": 7.969
}
},
"music_seiten_galaxy_cross": {
"duration": 126.5226875,
"loop_end": {
"samples_48k": 6073014,
"samples_native": 4048676,
"seconds": 126.521125
},
"loop_start": {
"samples_48k": 1793712,
"samples_native": 1195808,
"seconds": 37.369
}
},
"music_senkin_daurudabura": {
"duration": 110.1046875,
"loop_end": {
"samples_48k": 5284932,
"samples_native": 3523288,
"seconds": 110.10275
},
"loop_start": {
"samples_48k": 1316256,
"samples_native": 877504,
"seconds": 27.422
}
},
"music_senkin_daurudabura_test01": {
"duration": 82.6820625,
"loop_end": {
"samples_48k": 3968674,
"samples_native": 2645783,
"seconds": 82.68071875
},
"loop_start": {
"samples_48k": 0,
"samples_native": 0,
"seconds": 0.0
}
},
"music_senritsu_sorority": {
"duration": 162.176125,
"loop_end": {
"samples_48k": 7784385,
"samples_native": 5189590,
"seconds": 162.1746875
},
"loop_start": {
"samples_48k": 3414720,
"samples_native": 2276480,
"seconds": 71.14
}
},
"music_shinwasekai_karano_kyousyuu": {
"duration": 70.55734375,
"loop_end": {
"samples_48k": 3386688,
"samples_native": 2257792,
"seconds": 70.556
},
"loop_start": {
"samples_48k": 0,
"samples_native": 0,
"seconds": 0.0
}
},
"music_sorae": {
"duration": 128.56625,
"loop_end": {
"samples_48k": 6171114,
"samples_native": 4114076,
"seconds": 128.564875
},
"loop_start": {
"samples_48k": 2426880,
"samples_native": 1617920,
"seconds": 50.56
}
},
"music_stand_up_ready": {
"duration": 111.54221875,
"loop_end": {
"samples_48k": 5353941,
"samples_native": 3569294,
"seconds": 111.5404375
},
"loop_start": {
"samples_48k": 1302960,
"samples_native": 868640,
"seconds": 27.145
}
},
"music_the_moon_is_a_harsh_mistress": {
"duration": 96.8825,
"loop_end": {
"samples_48k": 4650280,
"samples_native": 3100187,
"seconds": 96.88084375
},
"loop_start": {
"samples_48k": 1302096,
"samples_native": 868064,
"seconds": 27.127
}
},
"music_trust_heart": {
"duration": 90.5468125,
"loop_end": {
"samples_48k": 4346170,
"samples_native": 2897447,
"seconds": 90.54521875
},
"loop_start": {
"samples_48k": 1176384,
"samples_native": 784256,
"seconds": 24.508
}
},
"music_waikyou_shenshoujin": {
"duration": 117.59053125,
"loop_end": {
"samples_48k": 5644249,
"samples_native": 3762833,
"seconds": 117.58853125
},
"loop_start": {
"samples_48k": 1612608,
"samples_native": 1075072,
"seconds": 33.596
}
},
"music_watashitoiu_otohibiki_sonosakini": {
"duration": 93.04259375,
"loop_end": {
"samples_48k": 4465980,
"samples_native": 2977320,
"seconds": 93.04125
},
"loop_start": {
"samples_48k": 716208,
"samples_native": 477472,
"seconds": 14.921
}
},
"music_zettou_amenohabakiri": {
"duration": 113.1419375,
"loop_end": {
"samples_48k": 5430724,
"samples_native": 3620483,
"seconds": 113.14009375
},
"loop_start": {
"samples_48k": 1179312,
"samples_native": 786208,
"seconds": 24.569
}
}
}

16
Player.html Normal file

@ -0,0 +1,16 @@
<html>
<link rel="stylesheet" type="text/css" href="../Css/generic.min.css">
<link rel="stylesheet" type="text/css" href="Css/main.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.5.1/pixi.min.js"></script>
<script src="Js/Common.js" charset="UTF-8"></script>
<script src="Js/UtageParse.js" charset="UTF-8"></script>
<script src="Js/Player.js" charset="UTF-8"></script>
<script src="Js/Main.js" charset="UTF-8"></script>
<body onload="onBodyLoaded()">
<div id="select-mission-container">
<select id="select-mission" onchange="missionChanged(event)"></select>
</div>
<div id="app-container">
</div>
</body>
</html>