// Allocation of real LLVM DSP INSTANCE slave_dsp::slave_dsp(llvm_dsp_factory* smartFactory, const string& compression, const string& ip, const string& port, const string& mtu, const string& latency, Server* server) : fCV(compression), fIP(ip), fPort(port), fMTU(mtu), fLatency(latency), fServer(server){ fAudio = NULL; // fSlaveFactory = smartFactory->clone(); fDSP = createDSPInstance(smartFactory); }
void dsp_server_connection_info::getJson(llvm_dsp_factory* factory) { fNameApp = factory->getName(); // This instance is used only to build JSON interface, then it's deleted llvm_dsp* llvm_dsp = createDSPInstance(factory); dsp* dsp; if (atoi(fPoly.c_str())) { dsp = new mydsp_poly(atoi(fVoices.c_str()), llvm_dsp, true, atoi(fGroup.c_str())); } else{ dsp = llvm_dsp; } string code = factory->getDSPCode(); JSONUI json(fNameApp, dsp->getNumInputs(), dsp->getNumOutputs(), factory->getSHAKey(), base64_encode(code.c_str(), code.size())); metadataDSPFactory(factory, &json); dsp->buildUserInterface(&json); //deleteDSPInstance(dsp); delete dsp; fAnswer = json.JSON(); /* fNameApp = getCName(factory); // This instance is used only to build JSON interface, then it's deleted llvm_dsp* dsp = createDSPInstance(factory); string code = getCDSPCode(factory); char* base64_code = base64_encode(code.c_str(), code.size()); string sha_key = getCSHAKey(factory); printf("code %s\n", code.c_str()); printf("shakey %s\n", sha_key.c_str()); JSONUI* json = new JSONUI(fNameApp, dsp->getNumInputs(), dsp->getNumOutputs(), sha_key, base64_code); dsp->buildUserInterface(json); deleteDSPInstance(dsp); fAnswer = json->JSON(); */ }
audio_dsp::audio_dsp(llvm_dsp_factory* factory, bool poly, int voices, bool group, bool osc, bool httpd, bool midi, const string& name, const string& key, createInstanceDSPCallback cb1, void* cb1_arg, deleteInstanceDSPCallback cb2, void* cb2_arg) :fName(name), fInstanceKey(key), fAudio(NULL), fCreateDSPInstanceCb(cb1), fCreateDSPInstanceCb_arg(cb1_arg), fDeleteDSPInstanceCb(cb2), fDeleteDSPInstanceCb_arg(cb2_arg) { llvm_dsp* dsp = createDSPInstance(factory); if (!dsp) { throw -1; } if (poly) { fDSP = new mydsp_poly(voices, dsp, true, group); } else{ fDSP = dsp; } if (osc) { fOSCUI = new OSCUI(name.c_str(), 0, NULL); fDSP->buildUserInterface(fOSCUI); } else { fOSCUI = 0; } if (httpd) { fHttpdUI = new httpdUI(name.c_str(), fDSP->getNumInputs(),fDSP->getNumOutputs(), 0, NULL); fDSP->buildUserInterface(fHttpdUI); fHttpdUI->run(); } else { fHttpdUI = 0; } if (midi) { //fMidiUI = new MidiUI(); //fDSP->buildUserInterface(fMidiUI); fMidiUI = 0; } else { fMidiUI = 0; } if (fCreateDSPInstanceCb) { fCreateDSPInstanceCb(fDSP, fCreateDSPInstanceCb_arg); } }
//------------------------------------------------------------------------- // MAIN //------------------------------------------------------------------------- int main(int argc, char *argv[]) { char jackname[256]; snprintf(jackname, 256, "%s", basename(argv[0])); std::string error_msg; if (argc < 2) { printf("faust-llvm 'foo.dsp'\n"); exit(-1); } // Error check to add.... // llvm_dsp_factory* factory = createDSPFactoryFromFile(argv[1], argc-2, (const char**)&argv[2], "", error_msg, -1); // Another possibility by directly giving the Faust program as a string // Additional parameters given to the compiler int argc1 = 3; const char* argv1[argc]; argv1[0] = "-vec"; argv1[1] = "-lv"; argv1[2] = " 1"; // Faust program std::string faust_program = "process = 1;"; llvm_dsp_factory* factory = createDSPFactoryFromString("test", faust_program, argc1, argv1, "", error_msg, -1); dsp* DSP = createDSPInstance(factory); PrintUI interface; DSP->buildUserInterface(&interface); dummyaudio audio(BUFFER_TO_RENDER); audio.init(jackname, DSP); audio.start(); // Render BUFFER_TO_RENDER buffers... audio.stop(); return 0; }
string getJson(connection_info_struct* con_info){ myMeta metadata; metadataDSPFactory(con_info->fLLVMFactory, &metadata); con_info->fNameApp = metadata.name; //This instance is used only to build json interface, then it's deleted llvm_dsp* dsp = createDSPInstance(con_info->fLLVMFactory); JSONUI json(dsp->getNumInputs(), dsp->getNumOutputs()); dsp->buildUserInterface(&json); string answer = json.JSON(); printf("JSON = %s\n", answer.c_str()); deleteDSPInstance(dsp); // con_info->fNumInstances = 1; return answer; }
Block::Block( const QString& script, AudioEngine& params): AudioBlock{params} { std::string target; m_faustFactory = createDSPFactoryFromString( "name", "phasor(f) = f/48000 : (+,1.0:fmod) ~ _ ; " "process = phasor(220) * 6.28 : sin;",//script.toStdString(), 0, nullptr, "", target); if(m_faustFactory) { m_faustPlug = createDSPInstance(m_faustFactory); } for(auto& vec : in_vec_cnt) vec.resize(parameters().bufferSize); for(auto& vec : out_vec_cnt) vec.resize(parameters().bufferSize); }
int init_faustgen(CSOUND *csound, faustgen *p){ OPARMS parms; std::string err_msg; int size; int argc = 3; const char* argv[argc]; faustobj **pfdsp, *fdsp; llvm_dsp *dsp; controls *ctls = new controls(); const char *varname = "::dsp"; argv[0] = "-vec"; argv[1] = "-lv"; argv[2] = " 1"; #ifdef USE_DOUBLE argv[3] = "-double"; argc += 1; #endif p->factory = createDSPFactoryFromString("faustop", (const char *) p->code->data, argc, argv, "", err_msg, 3); if(p->factory == NULL) return csound->InitError(csound, Str("Faust compilation problem: %s\n"), err_msg.c_str()); dsp = createDSPInstance(p->factory); if(dsp == NULL) return csound->InitError(csound, Str("Faust instantiation problem \n")); dsp->buildUserInterface(ctls); pfdsp = (faustobj **) csound->QueryGlobalVariable(csound,varname); if(pfdsp == NULL) { csound->CreateGlobalVariable(csound, varname, sizeof(faustobj *)); pfdsp = (faustobj **) csound->QueryGlobalVariable(csound,varname); fdsp = (faustobj *) csound->Calloc(csound, sizeof(faustobj)); fdsp->obj = dsp; fdsp->ctls = ctls; fdsp->nxt = NULL; fdsp->cnt = 0; *pfdsp = fdsp; } else { fdsp = *pfdsp; while(fdsp->nxt){ fdsp = fdsp->nxt; } fdsp->nxt = (faustobj *) csound->Calloc(csound, sizeof(faustobj)); fdsp->nxt->cnt = fdsp->cnt++; fdsp = fdsp->nxt; fdsp->obj = dsp; fdsp->ctls = ctls; } p->engine = dsp; dsp->buildUserInterface(ctls); dsp->init(csound->GetSr(csound)); if(p->engine->getNumInputs() != p->INCOUNT-1) { deleteDSPInstance(p->engine); deleteDSPFactory(p->factory); return csound->InitError(csound, Str("wrong number of input args\n")); } if(p->engine->getNumOutputs() != p->OUTCOUNT-1){ deleteDSPInstance(p->engine); deleteDSPFactory(p->factory); return csound->InitError(csound, Str("wrong number of output args\n")); } /* memory for sampAccurate offsets */ csound->GetOParms(csound, &parms); if(parms.sampleAccurate){ int size; size = p->engine->getNumInputs()*sizeof(MYFLT *); if(p->memin.auxp == NULL || p->memin.size < size) csound->AuxAlloc(csound, size, &p->memin); size = p->engine->getNumOutputs()*sizeof(MYFLT *); if(p->memout.auxp == NULL || p->memout.size < size) csound->AuxAlloc(csound, size, &p->memout); } p->ctls = ctls; *p->ohptr = (MYFLT) fdsp->cnt; csound->RegisterDeinitCallback(csound, p, delete_faustgen); return OK; }
int init_faustaudio(CSOUND *csound, faustgen *p){ int factory = (int) *((MYFLT *)p->code); OPARMS parms; faustobj *fobj, **pfdsp, *fdsp; llvm_dsp *dsp; controls *ctls = new controls(); const char *varname = "::dsp"; fobj = *((faustobj **) csound->QueryGlobalVariable(csound,"::factory")); if(fobj == NULL) return csound->InitError(csound, Str("no factory available\n")); while(fobj->cnt != factory) { fobj = fobj->nxt; if(fobj == NULL) return csound->InitError(csound, Str("factory not found %d\n"), (int) factory); } dsp = createDSPInstance((llvm_dsp_factory *)fobj->obj); if(dsp == NULL) return csound->InitError(csound, Str("Faust instantiation problem \n")); dsp->buildUserInterface(ctls); pfdsp = (faustobj **) csound->QueryGlobalVariable(csound,varname); if(pfdsp == NULL) { csound->CreateGlobalVariable(csound, varname, sizeof(faustobj *)); pfdsp = (faustobj **) csound->QueryGlobalVariable(csound,varname); fdsp = (faustobj *) csound->Calloc(csound, sizeof(faustobj)); fdsp->obj = dsp; fdsp->ctls = ctls; fdsp->nxt = NULL; fdsp->cnt = 0; *pfdsp = fdsp; } else { fdsp = *pfdsp; while(fdsp->nxt){ fdsp = fdsp->nxt; } fdsp->nxt = (faustobj *) csound->Calloc(csound, sizeof(faustobj)); fdsp->nxt->cnt = fdsp->cnt+1; fdsp = fdsp->nxt; fdsp->obj = dsp; fdsp->ctls = ctls; } p->factory = NULL; // this opcode does not own the factory p->engine = (llvm_dsp *) fdsp->obj; p->engine->init(csound->GetSr(csound)); if(p->engine->getNumInputs() != p->INCOUNT-1) { deleteDSPInstance(p->engine); return csound->InitError(csound, Str("wrong number of input args\n")); } if(p->engine->getNumOutputs() != p->OUTCOUNT-1){ deleteDSPInstance(p->engine); return csound->InitError(csound, Str("wrong number of output args\n")); } /* memory for sampAccurate offsets */ csound->GetOParms(csound, &parms); if(parms.sampleAccurate){ int size; size = p->engine->getNumInputs()*sizeof(MYFLT *); if(p->memin.auxp == NULL || p->memin.size < size) csound->AuxAlloc(csound, size, &p->memin); size = p->engine->getNumOutputs()*sizeof(MYFLT *); if(p->memout.auxp == NULL || p->memout.size < size) csound->AuxAlloc(csound, size, &p->memout); } p->ctls = ctls; csound->RegisterDeinitCallback(csound, p, delete_faustgen); *p->ohptr = (MYFLT) fdsp->cnt; return OK; }