142 lines
3.7 KiB
Java
142 lines
3.7 KiB
Java
package com.bernard.sboard;
|
|
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.util.Random;
|
|
|
|
import org.apache.log4j.BasicConfigurator;
|
|
import org.apache.log4j.LogManager;
|
|
import org.apache.log4j.Logger;
|
|
|
|
import com.bernard.sboard.config.SBoardConfig;
|
|
import com.bernard.sboard.effects.EffectsBox;
|
|
import com.bernard.sboard.osc.OscServer;
|
|
import com.bernard.sboard.osc.OscUtils;
|
|
import com.bernard.sboard.osc.SOscMessage;
|
|
import com.fasterxml.jackson.databind.DatabindException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
|
|
|
|
public class SBoard {
|
|
|
|
public SBoardConfig config;
|
|
|
|
public Random random;
|
|
|
|
public static final String configFilename = System.getProperty("user.home")+"/.config/sboard.yml";
|
|
|
|
public Logger log = LogManager.getLogger(SBoard.class);
|
|
|
|
|
|
EffectsBox ebox;
|
|
RepeatBox rbox;
|
|
SoundBox sbox;
|
|
MixerBox mbox;
|
|
JackController jackc;
|
|
OscServer oscserv;
|
|
|
|
public SBoard(SBoardConfig config) {
|
|
this.config = config;
|
|
this.random = new Random();
|
|
|
|
ebox = new EffectsBox(this, config.effects);
|
|
ebox.setup();
|
|
|
|
rbox = new RepeatBox();
|
|
|
|
sbox = new SoundBox();
|
|
|
|
mbox = new MixerBox();
|
|
|
|
jackc = new JackController(config, ebox, rbox, sbox, mbox);
|
|
jackc.setup();
|
|
|
|
oscserv = new OscServer(this, config.osc);
|
|
try {
|
|
oscserv.setup();
|
|
} catch (IOException e) {
|
|
log.error("Could not start the oscserver",e);
|
|
}
|
|
}
|
|
public static void main(String[] args) throws InterruptedException, IOException {
|
|
|
|
//TODO: passer sur quelque chose de plus configurable
|
|
BasicConfigurator.configure();
|
|
|
|
SBoardConfig config = readConfig(configFilename);
|
|
|
|
SBoard sboard = new SBoard(config);
|
|
|
|
Thread.sleep(100_000);
|
|
|
|
sboard.close();
|
|
|
|
System.exit(0);
|
|
}
|
|
|
|
public void close() {
|
|
|
|
try {
|
|
oscserv.close();
|
|
}catch(IOException e) {
|
|
log.error("Could not close osc server", e);
|
|
}
|
|
|
|
try{
|
|
jackc.close();
|
|
}catch(IOException e){
|
|
log.error("Could not close jack server", e);
|
|
}
|
|
|
|
ebox.close();
|
|
rbox.close();
|
|
sbox.close();
|
|
mbox.close();
|
|
|
|
}
|
|
|
|
public static SBoardConfig readConfig(String configFName) {
|
|
Logger configLog = LogManager.getLogger("Config Loader");
|
|
|
|
SBoardConfig output = null;
|
|
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
|
|
|
|
File configFile = new File(configFName);
|
|
|
|
if(!configFile.exists()) {
|
|
// On écrit le fichier
|
|
configLog.info("Création d'un nouveau fichier de configuration.");
|
|
try {
|
|
configFile.createNewFile();
|
|
mapper.writeValue(new FileOutputStream(configFile), new SBoardConfig());
|
|
} catch (DatabindException e) {
|
|
configLog.error("Le fichier écrit n'est pas un fichier de configuration valide !",e);
|
|
} catch (IOException e) {
|
|
configLog.error("Impossible d'écrire le fichier de configuration par défaut !",e);
|
|
}
|
|
}
|
|
|
|
configLog.info("Lecture du fichier de configuration.");
|
|
try {
|
|
output = mapper.readValue(configFile,SBoardConfig.class);
|
|
if(output==null)
|
|
configLog.error("Impossible de lire le fichier de configuration !");
|
|
} catch (DatabindException e) {
|
|
configLog.error("Le fichier lu n'est pas un fichier de configuration valide !",e);
|
|
} catch (IOException e) {
|
|
configLog.error("Impossible d'écrire le fichier de configuration par défaut !",e);
|
|
}
|
|
|
|
if(output==null)
|
|
System.exit(13);
|
|
|
|
return output;
|
|
}
|
|
public void dispatchOscMessage(SOscMessage message) {
|
|
if(OscUtils.addrMatch(message.getContainer(0),"effectsbox")) {
|
|
ebox.receiveOscMessage(message);
|
|
}
|
|
}
|
|
}
|