From 290c706d1a9928b98985e93b4663261d55716815 Mon Sep 17 00:00:00 2001 From: Lucas Cordiviola Date: Mon, 22 Apr 2024 09:17:15 -0300 Subject: [PATCH] programsarechunks flag working --- .../Pd_Chunks-test/Pd_Chunks-test.pdv | 5 ++ build/Release64/Pd_Chunks-test/test.fxp | Bin 60 -> 0 bytes .../Release64/Pd_Gain-nogui/Pd_Gain-nogui.pdv | 2 +- vst-scheduler/vstschedlib.c | 11 ++-- vst-template/pdvst.cpp | 48 +++++++++++------- vst-template/pdvst.hpp | 1 - vst-template/pdvstMain.cpp | 13 +++++ 7 files changed, 55 insertions(+), 25 deletions(-) delete mode 100644 build/Release64/Pd_Chunks-test/test.fxp diff --git a/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv b/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv index 706a883..9a610da 100644 --- a/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv +++ b/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv @@ -25,6 +25,11 @@ DEBUG = TRUE # ***OBSOLETE, use [declare] inside patch instead*** #LIB = +# Save and Get Pd lists in .fxp file via ([s svstdata] and [r rvstdata]) +# Some hosts don't work correctly with this. +# If in doubt just use FALSE. +PROGRAMSARECHUNKS = TRUE + # Number of VST parameters (up to 128) PARAMETERS = 1 diff --git a/build/Release64/Pd_Chunks-test/test.fxp b/build/Release64/Pd_Chunks-test/test.fxp deleted file mode 100644 index 883d8140e3c93c9450ec423c56e44e2a7c1bce3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60 ucmZ=x&hutqU@&p3aLxwOj0Gvl86X;j-AZ$E6r6Gri%Wn!G+^JrzyJVFuL%kO diff --git a/build/Release64/Pd_Gain-nogui/Pd_Gain-nogui.pdv b/build/Release64/Pd_Gain-nogui/Pd_Gain-nogui.pdv index 84e4099..41b1966 100644 --- a/build/Release64/Pd_Gain-nogui/Pd_Gain-nogui.pdv +++ b/build/Release64/Pd_Gain-nogui/Pd_Gain-nogui.pdv @@ -23,7 +23,7 @@ DEBUG = FALSE # External libraries (comma delimited list, relative to pdvst/) # ***OBSOLETE, use [declare] inside patch instead*** -#LIB = +#LIB = # Number of VST parameters (up to 128) PARAMETERS = 1 diff --git a/vst-scheduler/vstschedlib.c b/vst-scheduler/vstschedlib.c index fd74892..8ea6d37 100644 --- a/vst-scheduler/vstschedlib.c +++ b/vst-scheduler/vstschedlib.c @@ -292,9 +292,7 @@ void sendPdVstChunk(t_vstChunkReceiver *x, t_symbol *s, int argc, t_atom *argv) char *buf; int length; t_atom at; - t_binbuf*bbuf = binbuf_new(); - - memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRINGSIZE); + t_binbuf*bbuf = binbuf_new(); SETSYMBOL(&at, s); binbuf_add(bbuf, 1, &at); @@ -303,11 +301,12 @@ void sendPdVstChunk(t_vstChunkReceiver *x, t_symbol *s, int argc, t_atom *argv) binbuf_free(bbuf); WaitForSingleObject(pdvstTransferMutex, INFINITE); + memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRINGSIZE); pdvstData->datachunk.type = STRING_TYPE; pdvstData->datachunk.direction = PD_SEND; pdvstData->datachunk.updated = 1; - strcpy(pdvstData->datachunk.value.stringData,buf); - //memcpy(pdvstData->datachunk.value.stringData, buf, length); + //strcpy(pdvstData->datachunk.value.stringData,buf); + memcpy(pdvstData->datachunk.value.stringData, buf, length); ReleaseMutex(pdvstTransferMutex); freebytes(buf, length+1); @@ -492,7 +491,7 @@ int scheduler() pdvstData->plugName.updated=0; } - // lucarda get data chunk from file + // get data chunk from file if (pdvstData->datachunk.direction == PD_RECEIVE && \ pdvstData->datachunk.updated) { diff --git a/vst-template/pdvst.cpp b/vst-template/pdvst.cpp index ded91b2..b3c25af 100644 --- a/vst-template/pdvst.cpp +++ b/vst-template/pdvst.cpp @@ -56,6 +56,7 @@ extern char globalHostPdvstPath[MAXFILENAMELEN]; extern bool globalCustomGui; extern int globalCustomGuiWidth; extern int globalCustomGuiHeight; +extern bool globalProgramsAreChunks; extern bool globalIsASynth; extern pdvstProgram globalProgram[MAXPROGRAMS]; @@ -226,7 +227,7 @@ pdvst::pdvst(audioMasterCallback audioMaster) // {JYG see pdvst::setProgram below for explanation timeFromStartup=GetTickCount(); // JYG } - programsAreChunks(false); + programsAreChunks(globalProgramsAreChunks); sendPlugName(globalPluginName); } @@ -604,29 +605,42 @@ bool pdvst::getOutputProperties(VstInt32 index, VstPinProperties* properties) VstInt32 pdvst::getChunk (void** data, bool isPreset) { - //MessageBox(NULL,"debug","getchunk",MB_OK); - WaitForSingleObject(pdvstTransferMutex, 10); + VstInt32 len; + //MessageBoxA(NULL, "getchunk call", "debug", MB_OK); // all host gets here + if(*data) { - if(*data) - strcpy ((char *)*data, pdvstData->datachunk.value.stringData); - ReleaseMutex(pdvstTransferMutex); + //MessageBoxA(NULL, "getchunk if data", "debug", MB_OK); // not all hosts gets here + WaitForSingleObject(pdvstTransferMutex, 10); + { + //strcpy ((char *)*data, pdvstData->datachunk.value.stringData); + *data = pdvstData->datachunk.value.stringData; + len = (VstInt32)strlen(pdvstData->datachunk.value.stringData); + //memcpy(*data, pdvstData->datachunk.value.stringData, (size_t)len+1); + ReleaseMutex(pdvstTransferMutex); + } + return len+1; } - return strlen(pdvstData->datachunk.value.stringData); + else + return 0; } VstInt32 pdvst::setChunk (void* data, VstInt32 byteSize, bool isPreset) { - MessageBox(NULL,"debug","setchunk",MB_OK); - WaitForSingleObject(pdvstTransferMutex, 10); + //MessageBoxA(NULL, "setchunk call", "debug", MB_OK); + if(byteSize) { - pdvstData->datachunk.direction = PD_RECEIVE; - pdvstData->datachunk.type = STRING_TYPE; - memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRINGSIZE); - strncpy(pdvstData->datachunk.value.stringData,(char *)data, (size_t)byteSize); - pdvstData->datachunk.updated = 1; - ReleaseMutex(pdvstTransferMutex); + //MessageBoxA(NULL, "setchunk call if bytesize", "debug", MB_OK); + WaitForSingleObject(pdvstTransferMutex, 10); + { + pdvstData->datachunk.direction = PD_RECEIVE; + pdvstData->datachunk.type = STRING_TYPE; + memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRINGSIZE); + strncpy(pdvstData->datachunk.value.stringData,(char *)data, (size_t)byteSize); + pdvstData->datachunk.updated = 1; + ReleaseMutex(pdvstTransferMutex); + } } - return 1; + return 0; } VstInt32 pdvst::canDo(char* text) @@ -1124,7 +1138,7 @@ void pdvst::updatePdvstParameters() if (pdvstData->datachunk.direction == PD_SEND && \ pdvstData->datachunk.updated) { - if (pdvstData->datachunk.type = STRING_TYPE) + if (pdvstData->datachunk.type == STRING_TYPE) { pdvstData->datachunk.updated=0; } diff --git a/vst-template/pdvst.hpp b/vst-template/pdvst.hpp index 14c5cfa..881e168 100644 --- a/vst-template/pdvst.hpp +++ b/vst-template/pdvst.hpp @@ -173,7 +173,6 @@ protected: // JYG } - //void programsAreChunks (bool) {} }; #endif diff --git a/vst-template/pdvstMain.cpp b/vst-template/pdvstMain.cpp index 6c6b813..5059b85 100644 --- a/vst-template/pdvstMain.cpp +++ b/vst-template/pdvstMain.cpp @@ -44,6 +44,7 @@ bool globalCustomGui = false; int globalCustomGuiWidth= 320; int globalCustomGuiHeight= 150; pdvstProgram globalProgram[MAXPROGRAMS]; +bool globalProgramsAreChunks = false; char *trimWhitespace(char *str); void parseSetupFile(); @@ -376,6 +377,18 @@ void parseSetupFile() globalProgram[progNum].paramValue[paramNum] = \ (float)atof(value); } + // programsarechunks (save custom data in .fxp or .fxb file) + if (strcmp(param, "programsarechunks") == 0) + { + if (strcmp(strlwr(value), "true") == 0) + { + globalProgramsAreChunks = true; + } + else if (strcmp(strlwr(value), "false") == 0) + { + globalProgramsAreChunks = false; + } + } } } }