import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import javaforce.JF;
import javaforce.JFLog;
/** Holds all library files.
*
* @author pquiring
*
* Created : Mar 14, 2014
*/
public class Library {
public enum Type {WAV, DLS};
public static class Entry {
public Type type;
public String name;
public String fullPath; //WAV only
public int dls_idx;
}
private static ArrayList<Entry> libraryList = new ArrayList<Entry>();
private static ArrayList<DLS> dlsList = new ArrayList<DLS>();
public static void load() {
if (!libraryList.isEmpty()) return; //already done (must restart app to reload)
File folder = new File("Library");
if (folder.exists() && folder.isDirectory()) {
File files[] = folder.listFiles();
for(int a=0;a<files.length;a++) {
if (!files[a].isFile()) continue;
String name = files[a].getName().toLowerCase();
if (name.endsWith(".wav")) {
loadWAV(files[a]);
}
if (name.endsWith(".dls")) {
loadDLS(files[a].getAbsolutePath());
}
}
}
File userFolder = new File(JF.getUserPath() + "/Music/Library");
if (userFolder.exists() && userFolder.isDirectory()) {
File files[] = userFolder.listFiles();
for(int a=0;a<files.length;a++) {
if (!files[a].isFile()) continue;
String name = files[a].getName().toLowerCase();
if (name.endsWith(".wav")) {
loadWAV(files[a]);
}
if (name.endsWith(".dls")) {
loadDLS(files[a].getAbsolutePath());
}
}
}
//add gm.dls (windows only)
if (JF.isWindows()) {
loadDLS(System.getenv("windir") + "\\System32\\Drivers\\gm.dls");
}
}
public static void loadWAV(File file) {
String name = file.getName();
Library.Entry entry = new Library.Entry();
entry.type = Library.Type.WAV;
entry.name = name;
entry.fullPath = file.getAbsolutePath();
libraryList.add(entry);
}
public static void loadDLS(String filename) {
try {
DLS dls = new DLS();
dls.load(new FileInputStream(filename));
String names[] = dls.getInstrumentNames();
int dls_idx = dlsList.size();
for(int a=0;a<names.length;a++) {
Library.Entry entry = new Library.Entry();
entry.type = Library.Type.DLS;
entry.name = names[a];
entry.dls_idx = dls_idx;
libraryList.add(entry);
}
dlsList.add(dls);
} catch (Exception e) {
JFLog.log(e);
}
}
public static ArrayList<Entry> getList() {
return libraryList;
}
public static Entry get(int idx) {
return libraryList.get(idx);
}
public static DLS getDLS(int idx) {
return dlsList.get(idx);
}
}