|
@@ -0,0 +1,117 @@
|
|
|
|
|
+package audio.io;
|
|
|
|
|
+
|
|
|
|
|
+import java.awt.Color;
|
|
|
|
|
+import java.io.File;
|
|
|
|
|
+import java.io.FileInputStream;
|
|
|
|
|
+import java.io.FileNotFoundException;
|
|
|
|
|
+import java.io.IOException;
|
|
|
|
|
+import java.io.InputStream;
|
|
|
|
|
+import java.lang.reflect.Field;
|
|
|
|
|
+
|
|
|
|
|
+import javax.json.Json;
|
|
|
|
|
+import javax.json.JsonArray;
|
|
|
|
|
+import javax.json.JsonObject;
|
|
|
|
|
+import javax.json.JsonReader;
|
|
|
|
|
+
|
|
|
|
|
+import audio.ObjectInstance;
|
|
|
|
|
+import audio.Song;
|
|
|
|
|
+import audio.SongInstance;
|
|
|
|
|
+
|
|
|
|
|
+public class JSONReader {
|
|
|
|
|
+
|
|
|
|
|
+ public static Song readSong(File f) throws IOException {
|
|
|
|
|
+
|
|
|
|
|
+ if(!f.exists())
|
|
|
|
|
+ throw new FileNotFoundException("CSF File does not exist");
|
|
|
|
|
+
|
|
|
|
|
+ // Get CSF File
|
|
|
|
|
+ InputStream is = new FileInputStream(f);
|
|
|
|
|
+
|
|
|
|
|
+ // Read CSF Content
|
|
|
|
|
+ JsonReader rdr = Json.createReader(is);
|
|
|
|
|
+ JsonObject obj = rdr.readObject();
|
|
|
|
|
+ rdr.close();
|
|
|
|
|
+
|
|
|
|
|
+ if(!obj.containsKey("meta") || !obj.containsKey("file") || !obj.containsKey("data"))
|
|
|
|
|
+ throw new IOException("Corrupt CSF File");
|
|
|
|
|
+
|
|
|
|
|
+ // Create new Song
|
|
|
|
|
+ Song s = new Song();
|
|
|
|
|
+
|
|
|
|
|
+ // Read META data
|
|
|
|
|
+ JsonObject meta = obj.getJsonObject("meta");
|
|
|
|
|
+
|
|
|
|
|
+ s.setTitle(meta.getString("title"));
|
|
|
|
|
+ s.setSubtitle(meta.getString("subtitle"));
|
|
|
|
|
+ s.setAuthor(meta.getString("author"));
|
|
|
|
|
+ s.setCreator(meta.getString("creator"));
|
|
|
|
|
+ s.setBPM(meta.getInt("BPM"));
|
|
|
|
|
+
|
|
|
|
|
+ //Read FILE data
|
|
|
|
|
+ JsonObject file = obj.getJsonObject("file");
|
|
|
|
|
+
|
|
|
|
|
+ File audio = new File(file.getString("audio"));
|
|
|
|
|
+ if(!audio.exists() || !audio.getName().endsWith(".mp3"))
|
|
|
|
|
+ throw new FileNotFoundException("Audio file does not exist");
|
|
|
|
|
+ s.setAudio(audio);
|
|
|
|
|
+
|
|
|
|
|
+ File background = new File(file.getString("background"));
|
|
|
|
|
+ if(!background.exists() || !(background.getName().endsWith(".jpg") || background.getName().endsWith(".png")))
|
|
|
|
|
+ throw new FileNotFoundException("Background image does not exist");
|
|
|
|
|
+ s.setBackground(background);
|
|
|
|
|
+
|
|
|
|
|
+ File banner = new File(file.getString("banner"));
|
|
|
|
|
+ if(!banner.exists() || !(banner.getName().endsWith(".jpg") || banner.getName().endsWith(".png")))
|
|
|
|
|
+ throw new FileNotFoundException("Banner image does not exist");
|
|
|
|
|
+ s.setBanner(banner);
|
|
|
|
|
+
|
|
|
|
|
+ s.setFile(f);
|
|
|
|
|
+
|
|
|
|
|
+ //Read Data data
|
|
|
|
|
+ JsonArray data = obj.getJsonArray("data");
|
|
|
|
|
+ for(int i = 0; i < data.size(); i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ s.addSongInstance( readSongInstance(data.getJsonObject(i)) );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return s;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static SongInstance readSongInstance(JsonObject obj) throws IOException {
|
|
|
|
|
+ String difficulty = obj.getString("difficulty");
|
|
|
|
|
+ SongInstance si = new SongInstance(difficulty);
|
|
|
|
|
+
|
|
|
|
|
+ JsonArray object = obj.getJsonArray("objects");
|
|
|
|
|
+ for(int i = 0; i < object.size(); i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ si.addObjectInstance( readObjectInstance(object.getJsonObject(i)) );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return si;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static ObjectInstance readObjectInstance(JsonObject obj) throws IOException
|
|
|
|
|
+ {
|
|
|
|
|
+ ObjectInstance oi = new ObjectInstance();
|
|
|
|
|
+
|
|
|
|
|
+ oi.setTime(obj.getInt("time"));
|
|
|
|
|
+ oi.setDirection(obj.getInt("direction"));
|
|
|
|
|
+
|
|
|
|
|
+ Color color;
|
|
|
|
|
+ try {
|
|
|
|
|
+ Field field = Color.class.getField(obj.getString("color").toLowerCase());
|
|
|
|
|
+ color = (Color)field.get(null);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ throw new IOException("Cannot read property color from " + obj);
|
|
|
|
|
+ }
|
|
|
|
|
+ oi.setColor(color);
|
|
|
|
|
+
|
|
|
|
|
+ if(obj.containsKey("hold") && obj.getBoolean("hold"))
|
|
|
|
|
+ {
|
|
|
|
|
+ oi.setHold(obj.getBoolean("hold"));
|
|
|
|
|
+ oi.setLength(obj.getInt("length"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return oi;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|