diff options
Diffstat (limited to 'externals/grill/vst/src/main.cpp')
-rw-r--r-- | externals/grill/vst/src/main.cpp | 126 |
1 files changed, 64 insertions, 62 deletions
diff --git a/externals/grill/vst/src/main.cpp b/externals/grill/vst/src/main.cpp index 9a4b3a6c..d1c369c3 100644 --- a/externals/grill/vst/src/main.cpp +++ b/externals/grill/vst/src/main.cpp @@ -26,7 +26,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. #endif -#define VST_VERSION "0.1.0pre21" +#define VST_VERSION "0.1.0pre23" class vst @@ -64,12 +64,19 @@ protected: void mg_winx(int &x) const { x = plug?plug->GetX():0; } void mg_winy(int &y) const { y = plug?plug->GetY():0; } + void mg_winw(int &x) const { x = plug?plug->GetW():0; } + void mg_winh(int &y) const { y = plug?plug->GetH():0; } void ms_winx(int x) { if(plug) plug->SetX(x); } void ms_winy(int y) { if(plug) plug->SetY(y); } + void ms_winw(int x) { if(plug) plug->SetW(x); } + void ms_winh(int y) { if(plug) plug->SetH(y); } void ms_wincaption(bool c) { if(plug) plug->SetCaption(c); } void mg_wincaption(bool &c) const { c = plug && plug->GetCaption(); } + void ms_winhandle(bool c) { if(plug) plug->SetHandle(c); } + void mg_winhandle(bool &c) const { c = plug && plug->GetHandle(); } void ms_wintitle(const AtomList &t); void mg_wintitle(AtomList &t) const { if(plug) { t(1); SetString(t[0],plug->GetTitle()); } } + void m_winfront() const { if(plug) plug->ToFront(); } void mg_chnsin(int &c) const { c = plug?plug->GetNumInputs():0; } void mg_chnsout(int &c) const { c = plug?plug->GetNumOutputs():0; } @@ -98,13 +105,19 @@ protected: void m_ptext(int pnum); void m_ptexts(int argc,const t_atom *argv); -// void m_control(const t_symbol *ctrl_name,int ctrl_value); - void m_pitchbend(int ctrl_value) { if(plug) plug->AddPitchBend(ctrl_value ); } - void m_programchange(int ctrl_value) { if(plug) plug->AddProgramChange(ctrl_value ); } - void m_aftertouch(int ctrl_value) { if(plug) plug->AddAftertouch(ctrl_value ); } - void m_ctrlchange(int control,int ctrl_value) { if(plug) plug->AddControlChange(control,ctrl_value ); } + void mg_channel(int &chn) const { chn = plug?plug->GetChannel():0; } + void ms_channel(int chn) { if(plug) plug->SetChannel(chn); } + void m_note(int note,int vel); void m_noteoff(int note) { m_note(note,0); } + void m_programchange(int ctrl_value) { if(plug) plug->AddProgramChange(ctrl_value); } + void m_ctrlchange(int control,int ctrl_value) { if(plug) plug->AddControlChange(control,ctrl_value); } + void m_aftertouch(int ctrl_value) { if(plug) plug->AddAftertouch(ctrl_value); } + void m_polyaftertouch(int note,int ctrl_value) { if(plug) plug->AddPolyAftertouch(note,ctrl_value); } + void m_pitchbend(int ctrl_value) { if(plug) plug->AddPitchBend(ctrl_value); } + + void mg_dumpevents(bool &ev) const { ev = plug?plug->GetEvents():false; } + void ms_dumpevents(bool ev) { if(plug) plug->SetEvents(ev); } void mg_playing(bool &p) { p = plug && plug->GetPlaying(); } void ms_playing(bool p) { if(plug) plug->SetPlaying(p); } @@ -140,7 +153,7 @@ private: VSTPlugin *plug; std::string plugname,subplug; - bool echoparam,visible,bypass,mute; + bool visible,bypass,mute; int paramnames; int blsz; @@ -171,12 +184,17 @@ private: FLEXT_ATTRVAR_B(bypass) FLEXT_ATTRVAR_B(mute) -// FLEXT_CALLBACK_2(m_control,t_symptr,int) - FLEXT_CALLBACK_I(m_pitchbend) - FLEXT_CALLBACK_I(m_aftertouch) - FLEXT_CALLBACK_I(m_programchange) + FLEXT_CALLVAR_I(mg_channel,ms_channel) + FLEXT_CALLBACK_II(m_note) + FLEXT_CALLBACK_I(m_noteoff) FLEXT_CALLBACK_II(m_ctrlchange) + FLEXT_CALLBACK_I(m_aftertouch) + FLEXT_CALLBACK_II(m_polyaftertouch) + FLEXT_CALLBACK_I(m_pitchbend) + + FLEXT_CALLVAR_B(mg_dumpevents,ms_dumpevents) + FLEXT_CALLBACK_I(m_programchange) FLEXT_CALLVAR_I(mg_program,ms_program) FLEXT_CALLBACK_V(mg_progname) @@ -190,14 +208,14 @@ private: FLEXT_CALLBACK_I(m_ptext) FLEXT_CALLBACK_V(m_ptexts) - FLEXT_CALLBACK_II(m_note) - FLEXT_CALLBACK_I(m_noteoff) - - FLEXT_ATTRVAR_B(echoparam) FLEXT_CALLVAR_I(mg_winx,ms_winx) FLEXT_CALLVAR_I(mg_winy,ms_winy) + FLEXT_CALLVAR_I(mg_winw,ms_winw) + FLEXT_CALLVAR_I(mg_winh,ms_winh) FLEXT_CALLVAR_B(mg_wincaption,ms_wincaption) + FLEXT_CALLVAR_B(mg_winhandle,ms_winhandle) FLEXT_CALLVAR_V(mg_wintitle,ms_wintitle) + FLEXT_CALLBACK(m_winfront) FLEXT_CALLGET_I(mg_chnsin) FLEXT_CALLGET_I(mg_chnsout) @@ -250,12 +268,15 @@ void vst::Setup(t_classid c) FLEXT_CADDATTR_VAR1(c,"mute",mute); FLEXT_CADDMETHOD_(c,0,"print",m_print); - FLEXT_CADDMETHOD_II(c,0,"note",m_note); + FLEXT_CADDATTR_VAR(c,"channel",mg_channel,ms_channel); FLEXT_CADDMETHOD_I(c,0,"noteoff",m_noteoff); -// FLEXT_CADDMETHOD_2(c,0,"control",m_control,t_symptr,int); - FLEXT_CADDMETHOD_(c,0,"pbend",m_pitchbend); - FLEXT_CADDMETHOD_(c,0,"atouch",m_aftertouch); + FLEXT_CADDMETHOD_II(c,0,"note",m_note); + FLEXT_CADDMETHOD_II(c,0,"patouch",m_polyaftertouch); FLEXT_CADDMETHOD_II(c,0,"ctlchg",m_ctrlchange); + FLEXT_CADDMETHOD_(c,0,"atouch",m_aftertouch); + FLEXT_CADDMETHOD_(c,0,"pbend",m_pitchbend); + + FLEXT_CADDATTR_VAR(c,"events",mg_dumpevents,ms_dumpevents); FLEXT_CADDMETHOD_(c,0,"progchg",m_programchange); FLEXT_CADDATTR_VAR(c,"program",mg_program,ms_program); @@ -270,11 +291,14 @@ void vst::Setup(t_classid c) FLEXT_CADDMETHOD_(c,0,"getptext",m_ptext); FLEXT_CADDMETHOD_(c,0,"getptext",m_ptexts); - FLEXT_CADDATTR_VAR1(c,"echo",echoparam); FLEXT_CADDATTR_VAR(c,"x",mg_winx,ms_winx); FLEXT_CADDATTR_VAR(c,"y",mg_winy,ms_winy); - FLEXT_CADDATTR_VAR(c,"caption",mg_wincaption,ms_wincaption); + FLEXT_CADDATTR_VAR(c,"w",mg_winw,ms_winw); + FLEXT_CADDATTR_VAR(c,"h",mg_winh,ms_winh); FLEXT_CADDATTR_VAR(c,"title",mg_wintitle,ms_wintitle); + FLEXT_CADDATTR_VAR(c,"caption",mg_wincaption,ms_wincaption); + FLEXT_CADDATTR_VAR(c,"handle",mg_winhandle,ms_winhandle); + FLEXT_CADDMETHOD_(c,0,"front",m_winfront); FLEXT_CADDATTR_GET(c,"ins",mg_chnsin); FLEXT_CADDATTR_GET(c,"outs",mg_chnsout); @@ -318,7 +342,7 @@ vst::vst(int argc,const t_atom *argv): plug(NULL),visible(false), blsz(0), vstfun(NULL),vstin(NULL),vstout(NULL),tmpin(NULL),tmpout(NULL), - echoparam(false),bypass(false),mute(false),paramnames(0) + bypass(false),mute(false),paramnames(0) { #if FLEXT_OS == FLEXT_OS_WIN // this is necessary for Waveshell @@ -346,9 +370,9 @@ vst::~vst() void vst::ClearPlug() { if(plug) { - plug->Edit(false); ClearBuf(); // needs valid plug - delete plug; plug = NULL; + VSTPlugin::Delete(plug); + plug = NULL; } } @@ -440,15 +464,17 @@ static std::string findFilePath(const std::string &path,const std::string &dllna return std::string(); } - +// \todo this should be in the background, because it can take some time +// ideally vst would get a response from VSTPlugin when readily, loaded and +// vst would dump out a respective signal to the patcher bool vst::LoadPlug() { if(plug) ClearPlug(); - plug = new VSTPlugin(this); + VSTPlugin *p = VSTPlugin::New(this); // try loading the dll from the raw filename - bool ok = plug->Instance(plugname.c_str(),subplug.c_str()); + bool ok = p->Instance(plugname.c_str(),subplug.c_str()); if(ok) FLEXT_LOG("raw filename loaded fine"); else { @@ -468,7 +494,7 @@ bool vst::LoadPlug() dllname += "\\"; dllname += name; - ok = plug->Instance(dllname.c_str()); + ok = p->Instance(dllname.c_str()); } #endif } @@ -497,7 +523,7 @@ bool vst::LoadPlug() realpath += plugname; FLEXT_LOG1("trying %s",(const char *)realpath.c_str()); - ok = plug->Instance(realpath.c_str()); + ok = p->Instance(realpath.c_str()); if(ok) { FLEXT_LOG("plugin loaded via VST_PATH"); break; @@ -505,7 +531,7 @@ bool vst::LoadPlug() } tok = strtok( NULL , ";" ); - if(!tok) post("%s - couldn't find plugin",thisName()); +// if(!tok) post("%s - couldn't find plugin",thisName()); } delete[] tok_path; @@ -514,10 +540,12 @@ bool vst::LoadPlug() if(!ok) { post("%s - unable to load plugin '%s'",thisName(),plugname.c_str()); - ClearPlug(); + VSTPlugin::Delete(p); } - else + else { + plug = p; InitPlug(); + } return ok; } @@ -674,32 +702,6 @@ void vst::CbSignal() flext_dsp::CbSignal(); } - -#if 0 - -void vst::m_control(const t_symbol *ctrl_name,int ctrl_value) -{ - if(!plug) return; - - int parm_num = 0; - - if (!*GetString(ctrl_name) || !strlen(GetString(ctrl_name))) { - error ("plugin~: control messages must have a name and a value"); - return; - } - //parm_num = vst_tilde_get_parm_number (x, ctrl_name->s_name); - //if (parm_num) - //{ - //vst_tilde_set_control_input_by_index (x, parm_num - 1, ctrl_value); - //} - //else - //{ - //vst_tilde_set_control_input_by_name (x, ctrl_name->s_name, ctrl_value); - //} -} - -#endif - void vst::mg_progname(int argc,const t_atom *argv) const { if(plug) { @@ -788,8 +790,8 @@ void vst::m_print(int ac,const t_atom *av) } if ( header ) { - post("VST~ plugin: %s " , plug->GetName() ); - post("made by: %s " , plug->GetVendorName() ); + post("VST~ plugin: %s ", plug->GetName() ); + post("made by: %s ", plug->GetVendorName() ); post("parameters %d\naudio: %d in(s)/%d out(s) \nLoaded from library \"%s\".\n", plug->GetNumParams(), CntInSig(), @@ -868,12 +870,12 @@ void vst::ms_param(int pnum,float val) { if(!plug || pnum < 0 || pnum >= plug->GetNumParams()) return; - float xval = plug->GetParamValue( pnum ); +// float xval = plug->GetParamValue( pnum ); // if(xval <= 1.0f) // What's that???? if(true) { plug->SetParamFloat( pnum, val ); - if(echoparam) display_parameter(pnum , true ); +// if(echoparam) display_parameter(pnum , true ); } else FLEXT_ASSERT(false); |