SMparser basics functional

This commit is contained in:
jancoow
2015-05-29 00:00:09 +02:00
parent adf5c1d70f
commit 45cc1f919c
2 changed files with 2197 additions and 10 deletions
+72 -10
View File
@@ -1,28 +1,37 @@
package SMParser;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.ArrayList;
import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;
public class SMParser {
private static String[] metaDataHeaders = {"OFFSET:","TITLE:","ARTIST:", "DISPLAYBPM:", "MUSIC","SAMPLESTART:"};
String[] metadata;
private static String[] metaDataHeaders = {"OFFSET:","TITLE:","ARTIST:", "DISPLAYBPM:", "MUSIC","SAMPLESTART:", "BANNER:", "BACKGROUND:", "SUBTITLE:"};
private String[] metadata;
private ArrayList<JsonObjectBuilder> arrays;
public SMParser(){
try {
String file = readFile("test", Charset.defaultCharset());
String[] mainsplit = file.split("\\#");
String[] metadata = new String[metaDataHeaders.length];
arrays = new ArrayList<JsonObjectBuilder>();
metadata = new String[metaDataHeaders.length];
for(String s:mainsplit){
//searching for the metadata
int i = 0;
for(String header:metaDataHeaders){
if(s.contains(header)){
metadata[i] = getValue(s).replace(';', ' ');
metadata[i] = getValue(s).replace(';', ' ').trim();
}
i++;
}
@@ -36,9 +45,13 @@ public class SMParser {
}
s= s.replaceAll("//.*", ""); // remove some more bs
s = s.replaceAll("\\;", "");
System.out.println(difficulty);
notesplit = s.split("\\,"); //split everything in arrays which contains "beats" for 1 second
double secondscounter = Double.parseDouble(metadata[0])*-1;
int extraButtonTime = notesplit.length / difficultyToMaxButtons(difficulty);
int maxButtons = 1;
JsonArrayBuilder objectsArrayBuilder = Json.createArrayBuilder();
for(String notespersecond:notesplit){
notespersecond = notespersecond.trim();
String[] notes = notespersecond.split("\n");
@@ -47,21 +60,70 @@ public class SMParser {
for(String note:notes){
int direction = noteToDirection(note);
if(direction != -1){
System.out.println(time + "\t\t" + direction);
JsonObjectBuilder object = Json.createObjectBuilder();
object.add("time", time);
object.add("direction", direction);
object.add("button", (int)(Math.random()*maxButtons));
objectsArrayBuilder.add(object.build());
}
if(extraButtonTime*maxButtons < time){
maxButtons++;
}
time += precision;
}
secondscounter++;
}
System.out.println("----------");
arrays.add(Json.createObjectBuilder());
arrays.get(arrays.size()-1).add("difficulty", difficulty);
arrays.get(arrays.size()-1).add("objects", objectsArrayBuilder);
}
};
}
writeJsonFile();
} catch (IOException e) {
e.printStackTrace();
}
}
private void writeJsonFile(){
JsonObjectBuilder jsonfilebuilder = Json.createObjectBuilder();
JsonArrayBuilder dataArrayBuilder = Json.createArrayBuilder();
jsonfilebuilder.add("meta", Json.createObjectBuilder().add("title", metadata[1]).add("subtitle", metadata[8]).add("author", metadata[2]).add("BPM", Double.parseDouble(metadata[3])).add("sample_start", Double.parseDouble(metadata[5])));
jsonfilebuilder.add("file", Json.createObjectBuilder().add("audio", metadata[4]).add("background", metadata[7]).add("banner", metadata[6]));
for(JsonObjectBuilder ar:arrays){
dataArrayBuilder.add(ar.build());
}
jsonfilebuilder.add("data", dataArrayBuilder);
try {
JsonObject file = jsonfilebuilder.build();
OutputStream os;
os = new FileOutputStream("emp.txt");
JsonWriter jsonWriter = Json.createWriter(os);
jsonWriter.writeObject(file);
jsonWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private int difficultyToMaxButtons(String d){
if(d.equals("Beginner")){
return 2;
}else if(d.equals("Easy")){
return 3;
}else if(d.equals("Medium")){
return 4;
}else if(d.equals("Hard")){
return 6;
}
return 0;
}
private String getValue(String s){
String[] split = s.split("\\:");
if(split[1] != null){
+2125
View File
File diff suppressed because it is too large Load Diff