| @@ -9,7 +9,7 @@ class FaustEngine : public ScriptEngine { | |||
| public: | |||
| FaustEngine():fFactory(nullptr), fDSP(nullptr), fInputs(nullptr), fOutputs(nullptr) | |||
| FaustEngine():fDSPFactory(nullptr), fDSP(nullptr), fInputs(nullptr), fOutputs(nullptr) | |||
| {} | |||
| ~FaustEngine() | |||
| @@ -17,7 +17,7 @@ class FaustEngine : public ScriptEngine { | |||
| delete [] fInputs; | |||
| delete [] fOutputs; | |||
| delete fDSP; | |||
| deleteDSPFactory(fFactory); | |||
| deleteDSPFactory(fDSPFactory); | |||
| } | |||
| std::string getEngineName() override | |||
| @@ -27,16 +27,32 @@ class FaustEngine : public ScriptEngine { | |||
| int run(const std::string& path, const std::string& script) override | |||
| { | |||
| std::string filename = path.substr(path.find_last_of("/")); | |||
| #if defined ARCH_MAC | |||
| std::string tempDir = "/private/var/tmp/"; | |||
| #else | |||
| std::string tempDir = ""; | |||
| #endif | |||
| std::string error_msg; | |||
| fFactory = createDSPFactoryFromString("FaustDSP", script, 0, NULL, "", error_msg, -1); | |||
| if (!fFactory) { | |||
| display("ERROR: cannot create Faust factory !"); | |||
| return -1; | |||
| } else { | |||
| display("Compiling factory finished"); | |||
| // Try to load the machine code cache | |||
| fDSPFactory = readDSPFactoryFromMachineFile(tempDir + filename, "", error_msg); | |||
| if (!fDSPFactory) { | |||
| // Otherwise recompile the DSP | |||
| fDSPFactory = createDSPFactoryFromString("FaustDSP", script, 0, NULL, "", error_msg, -1); | |||
| if (!fDSPFactory) { | |||
| display("ERROR: cannot create Faust factory !"); | |||
| return -1; | |||
| } else { | |||
| // And save the cache | |||
| display("Compiling factory finished"); | |||
| writeDSPFactoryToMachineFile(fDSPFactory, tempDir + filename, ""); | |||
| } | |||
| } | |||
| fDSP = fFactory->createDSPInstance(); | |||
| // Create DSP | |||
| fDSP = fDSPFactory->createDSPInstance(); | |||
| if (!fDSP) { | |||
| display("ERROR: cannot create Faust instance !"); | |||
| return -1; | |||
| @@ -44,7 +60,7 @@ class FaustEngine : public ScriptEngine { | |||
| display("Created DSP"); | |||
| } | |||
| // Prepare inputs/ouputs | |||
| // Prepare inputs/outputs | |||
| if (fDSP->getNumInputs() > 6) { | |||
| display("ERROR: DSP has " + std::to_string(fDSP->getNumInputs()) + " inputs !"); | |||
| return -1; | |||
| @@ -60,12 +76,13 @@ class FaustEngine : public ScriptEngine { | |||
| // Prepare buffers for process | |||
| ProcessBlock* block = getProcessBlock(); | |||
| fInputs = new FAUSTFLOAT*[fDSP->getNumInputs()]; | |||
| fOutputs = new FAUSTFLOAT*[fDSP->getNumOutputs()]; | |||
| fInputs = new FAUSTFLOAT*[fDSP->getNumInputs()]; | |||
| for (int chan = 0; chan < fDSP->getNumInputs(); chan++) { | |||
| fInputs[chan] = block->inputs[chan]; | |||
| } | |||
| fOutputs = new FAUSTFLOAT*[fDSP->getNumOutputs()]; | |||
| for (int chan = 0; chan < fDSP->getNumOutputs(); chan++) { | |||
| fOutputs[chan] = block->outputs[chan]; | |||
| } | |||
| @@ -86,7 +103,7 @@ class FaustEngine : public ScriptEngine { | |||
| } | |||
| private: | |||
| llvm_dsp_factory* fFactory; | |||
| llvm_dsp_factory* fDSPFactory; | |||
| llvm_dsp* fDSP; | |||
| FAUSTFLOAT** fInputs; | |||
| FAUSTFLOAT** fOutputs; | |||