diff options
Diffstat (limited to 'classes/BowelyzerConfig.sc')
-rw-r--r-- | classes/BowelyzerConfig.sc | 103 |
1 files changed, 100 insertions, 3 deletions
diff --git a/classes/BowelyzerConfig.sc b/classes/BowelyzerConfig.sc index 287aad4..1a4ce87 100644 --- a/classes/BowelyzerConfig.sc +++ b/classes/BowelyzerConfig.sc @@ -66,6 +66,7 @@ BowelyzerConfig{ ]; var <config, + <configFilePath, <defaultConfig, <defaultControls, <changed = false; @@ -97,10 +98,13 @@ BowelyzerConfig{ if(this.readConfigurationFile(configFile).not,{ error("Reading of configuration file failed. Using default."); config = defaultConfig; + },{ + configFilePath = configFile; }); },{ ("No configuration file provided. Using default.").postln; config = defaultConfig; + configFilePath = ""; }); this.showConfig; } @@ -111,7 +115,7 @@ BowelyzerConfig{ ControlSpec.specs[\amplitudeReleaseTime] = ControlSpec(0.001, 10, \lin, 0.001, 0.01, units: "s"); ControlSpec.specs[\hfHainsworth] = ControlSpec(0.0, 1.0, \lin, 0.001, 1.0, units: ""); ControlSpec.specs[\hfFoote] = ControlSpec(0.0, 1.0, \lin, 0.001, 0.0, units: ""); - ControlSpec.specs[\hfThreshold] = ControlSpec(0.0, 1.0, \lin, 0.001, 1.0, units: ""); + ControlSpec.specs[\hfThreshold] = ControlSpec(0.0, 10.0, \lin, 0.001, 1.0, units: ""); ControlSpec.specs[\hfWaitTime] = ControlSpec(0.0, 1.0, \lin, 0.001, 0.04, units: "s"); ControlSpec.specs[\pitchInitFreq] = ControlSpec(20.0, 20000.0, \exp, 0.01, 440.0, units: "Hz"); ControlSpec.specs[\pitchMinFreq] = ControlSpec(20.0, 20000.0, \exp, 0.01, 60.0, units: "Hz"); @@ -153,7 +157,6 @@ BowelyzerConfig{ \left -> 0, \right -> 1 ]), - //names -> [left, right], \synthServerAddress -> "127.0.0.1", \synthServerPort -> 57110, \hubAddress -> "127.0.0.1", @@ -230,7 +233,100 @@ BowelyzerConfig{ }); } - //TODO: add writeConfigurationFile + // write a valid JSON file from configuration + writeConfigurationFile{ + arg fileName; + var configFile, + path, + overwriteConfigFilePath = false, + writeFinished = false; + configFilePath.postln; + fileName.postln; + if(fileName.isNil, { + if(configFilePath.notNil, { + path = configFilePath; + },{ + "No configuration file defined!".error; + }); + },{ + path = fileName; + overwriteConfigFilePath = true; + }); + if(path != "",{ + path.postln; + try{ + configFile = File.use( + path.asString, + "w", + {|configFile| + var controlNamesSize = config.at(\controls).size, + currentControlName = 0, + controlsSize = defaultControls.size, + currentControl = 0, + inputsSize = config.at(\inputs).size, + currentInput = 0; + configFile.write("{\n"); + // global settings + config.pairsDo({|key, value| + if(key != \controls && key != \inputs, { + if(hasToBeString.includes(key), { + configFile.write(" \""++key++"\": \""++value++"\",\n"); + }); + if(hasToBeInteger.includes(key),{ + configFile.write(" \""++key++"\": "++value++",\n"); + }); + }); + }); + // controls + configFile.write(" \"controls\": {\n"); + config.at(\controls).pairsDo({|key, value| + currentControlName = currentControlName+1; + configFile.write(" \""++key++"\": {\n"); + value.pairsDo({|control, controlValue| + currentControl = currentControl+1; + if(currentControl == controlsSize,{ + configFile.write(" \""++control++"\": "++controlValue++"\n"); + },{ + configFile.write(" \""++control++"\": "++controlValue++",\n"); + }); + }); + // closing brace + if(currentControlName == controlNamesSize,{ + configFile.write(" }\n"); + },{ + configFile.write(" },\n"); + }); + currentControl = 0; + }); + // closing brace for controls + configFile.write(" },\n"); + // inputs + configFile.write(" \"inputs\": {\n"); + config.at(\inputs).pairsDo({|key, value| + currentInput = currentInput+1; + if(currentInput == inputsSize,{ + configFile.write(" \""++key++"\": "++value++"\n"); + },{ + configFile.write(" \""++key++"\": "++value++",\n"); + }); + }); + // closing brace for inputs + configFile.write(" }\n"); + // closing brace for notation + configFile.write("}\n"); + configFile.close; + writeFinished = true; + } + ); + }{ + ("Failed writing the file: "++path).error; + ^false; + } + }); + if(writeFinished && overwriteConfigFilePath, { + configFilePath = fileName; + }); + } // return a control value as correct type and within its defined ControlSpec range getControlValue{ @@ -275,6 +371,7 @@ BowelyzerConfig{ var broken = false; //fail if there are no inputs defined if(config.includesKey(\inputs).not,{ + "No inputs defined!".error; ^false; }); // if there are no controls defined at all, add at least a Dictionary for them |