SMparser basics functional
This commit is contained in:
+72
-10
@@ -1,28 +1,37 @@
|
|||||||
package SMParser;
|
package SMParser;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
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 {
|
public class SMParser {
|
||||||
private static String[] metaDataHeaders = {"OFFSET:","TITLE:","ARTIST:", "DISPLAYBPM:", "MUSIC","SAMPLESTART:"};
|
private static String[] metaDataHeaders = {"OFFSET:","TITLE:","ARTIST:", "DISPLAYBPM:", "MUSIC","SAMPLESTART:", "BANNER:", "BACKGROUND:", "SUBTITLE:"};
|
||||||
String[] metadata;
|
private String[] metadata;
|
||||||
|
private ArrayList<JsonObjectBuilder> arrays;
|
||||||
|
|
||||||
public SMParser(){
|
public SMParser(){
|
||||||
try {
|
try {
|
||||||
String file = readFile("test", Charset.defaultCharset());
|
String file = readFile("test", Charset.defaultCharset());
|
||||||
String[] mainsplit = file.split("\\#");
|
String[] mainsplit = file.split("\\#");
|
||||||
String[] metadata = new String[metaDataHeaders.length];
|
arrays = new ArrayList<JsonObjectBuilder>();
|
||||||
|
metadata = new String[metaDataHeaders.length];
|
||||||
for(String s:mainsplit){
|
for(String s:mainsplit){
|
||||||
//searching for the metadata
|
//searching for the metadata
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(String header:metaDataHeaders){
|
for(String header:metaDataHeaders){
|
||||||
if(s.contains(header)){
|
if(s.contains(header)){
|
||||||
metadata[i] = getValue(s).replace(';', ' ');
|
metadata[i] = getValue(s).replace(';', ' ').trim();
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@@ -36,9 +45,13 @@ public class SMParser {
|
|||||||
}
|
}
|
||||||
s= s.replaceAll("//.*", ""); // remove some more bs
|
s= s.replaceAll("//.*", ""); // remove some more bs
|
||||||
s = s.replaceAll("\\;", "");
|
s = s.replaceAll("\\;", "");
|
||||||
System.out.println(difficulty);
|
|
||||||
notesplit = s.split("\\,"); //split everything in arrays which contains "beats" for 1 second
|
notesplit = s.split("\\,"); //split everything in arrays which contains "beats" for 1 second
|
||||||
double secondscounter = Double.parseDouble(metadata[0])*-1;
|
double secondscounter = Double.parseDouble(metadata[0])*-1;
|
||||||
|
int extraButtonTime = notesplit.length / difficultyToMaxButtons(difficulty);
|
||||||
|
int maxButtons = 1;
|
||||||
|
JsonArrayBuilder objectsArrayBuilder = Json.createArrayBuilder();
|
||||||
|
|
||||||
for(String notespersecond:notesplit){
|
for(String notespersecond:notesplit){
|
||||||
notespersecond = notespersecond.trim();
|
notespersecond = notespersecond.trim();
|
||||||
String[] notes = notespersecond.split("\n");
|
String[] notes = notespersecond.split("\n");
|
||||||
@@ -47,21 +60,70 @@ public class SMParser {
|
|||||||
for(String note:notes){
|
for(String note:notes){
|
||||||
int direction = noteToDirection(note);
|
int direction = noteToDirection(note);
|
||||||
if(direction != -1){
|
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;
|
time += precision;
|
||||||
}
|
}
|
||||||
secondscounter++;
|
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) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
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){
|
private String getValue(String s){
|
||||||
String[] split = s.split("\\:");
|
String[] split = s.split("\\:");
|
||||||
if(split[1] != null){
|
if(split[1] != null){
|
||||||
|
|||||||
Reference in New Issue
Block a user