Exemple #1
0
// 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);
}
Exemple #2
0
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();
    */
}
Exemple #3
0
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);
    }
}
Exemple #4
0
//-------------------------------------------------------------------------
// 									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;
}
Exemple #5
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);

}
Exemple #7
0
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;
}
Exemple #8
0
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;
}