diff --git a/README.md b/README.md index c9d6a76..d60abe2 100644 --- a/README.md +++ b/README.md @@ -107,9 +107,10 @@ For an example, see Pd_Gain.pdv. between 0 and 1 inclusive. PROGRAMSARECHUNKS = - 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. + All vst parameters are saved in the host session and additionally + you can set/get some "Pd list" in the session or to a .fxp/.fxb file + via [s svstdata] and [r rvstdata] + # Pd/VST audio/midi Communication diff --git a/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pd b/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pd index 585e0d1..c3af6cc 100644 --- a/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pd +++ b/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pd @@ -1,4 +1,4 @@ -#N canvas 19 118 885 488 12; +#N canvas 19 118 947 544 12; #X obj 78 87 adc~, f 6; #X obj 73 241 loadbang; #X msg 73 271 \; pd dsp 1 \;; @@ -18,18 +18,14 @@ #X text 320 114 range is 0..1; #X obj 64 393 r rvstplugname; #X symbolatom 64 425 26 0 0 0 - - - 0; -#X obj 478 422 r rvstdata; -#X obj 476 331 s svstdata; -#X obj 478 454 print; +#X obj 478 447 r rvstdata; +#X obj 476 356 s svstdata; +#X obj 478 479 print; #X symbolatom 673 132 26 0 0 0 - - - 0; #X obj 673 100 r rvstprogname; #X obj 503 100 r rvstprognumber; #X floatatom 503 124 5 0 0 0 - - - 0; -#X text 464 273 1 send some data to the host's data chunk; -#X text 463 358 2 from the host save the file as .fxp or .fxb; -#X msg 476 299 hello world 1.2; -#X text 462 392 3 from the host open the file you saved; -#X text 500 11 When the host chamges the program these 2 are updated. Additionally you can use this to set lots of parameters that are not exposed to host. The program used is stored and recalled in the host/DAW project., f 49; +#X msg 476 324 hello world 1.2; #N canvas 182 182 450 300 additionally 0; #X msg 121 99 12 34 56 hello; #X msg 150 136 0.2 0.4 0.78 foo; @@ -53,6 +49,10 @@ #X listbox 503 182 23 0 0 0 - - - 0; #X text 466 223 Experimental. Not all hosts supports it correctly. See the .pdv file. This only works if PROGRAMSARECHUNKS = TRUE is set., f 50; #X obj 242 213 t f f; +#X text 464 273 1 all vstparameters are tracked and additionally you can send some Pd list to the host's data chunk; +#X text 463 383 2 from the host save your current session (or to a file as .fxp or .fxb); +#X text 462 417 3 from the host open your session (or the file you saved); +#X text 500 11 When the host chamges the program these 2 are updated. Additionally you can use this to set lots of parameters that are not exposed to the host. The program used is stored and recalled in the host/DAW project., f 52; #X connect 0 0 7 0; #X connect 0 1 6 0; #X connect 1 0 2 0; @@ -65,14 +65,14 @@ #X connect 9 0 15 0; #X connect 10 0 11 0; #X connect 11 0 12 0; -#X connect 14 0 34 0; +#X connect 14 0 30 0; #X connect 15 0 14 0; #X connect 17 0 18 0; #X connect 19 0 21 0; #X connect 23 0 22 0; #X connect 24 0 25 0; -#X connect 25 0 31 0; -#X connect 28 0 20 0; -#X connect 31 0 32 0; -#X connect 34 0 10 0; -#X connect 34 1 13 0; +#X connect 25 0 27 0; +#X connect 26 0 20 0; +#X connect 27 0 28 0; +#X connect 30 0 10 0; +#X connect 30 1 13 0; diff --git a/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pdv b/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pdv index f0381ba..5c26ef5 100644 --- a/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pdv +++ b/build/Release32/Pd_Chunks-test/Pd_Chunks-test.pdv @@ -25,10 +25,10 @@ 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 = FALSE +# All vst parameters are saved in the host session and additionally +# you can set/get some "Pd list" in the session or to a .fxp/.fxb file +# via [s svstdata] and [r rvstdata] +PROGRAMSARECHUNKS = TRUE # Number of VST parameters (up to 128) PARAMETERS = 1 diff --git a/build/Release32/Pd_Chunks-test/read-chunk-test.fxp b/build/Release32/Pd_Chunks-test/read-chunk-test.fxp deleted file mode 100644 index c704760..0000000 Binary files a/build/Release32/Pd_Chunks-test/read-chunk-test.fxp and /dev/null differ diff --git a/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pd b/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pd index 585e0d1..c3af6cc 100644 --- a/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pd +++ b/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pd @@ -1,4 +1,4 @@ -#N canvas 19 118 885 488 12; +#N canvas 19 118 947 544 12; #X obj 78 87 adc~, f 6; #X obj 73 241 loadbang; #X msg 73 271 \; pd dsp 1 \;; @@ -18,18 +18,14 @@ #X text 320 114 range is 0..1; #X obj 64 393 r rvstplugname; #X symbolatom 64 425 26 0 0 0 - - - 0; -#X obj 478 422 r rvstdata; -#X obj 476 331 s svstdata; -#X obj 478 454 print; +#X obj 478 447 r rvstdata; +#X obj 476 356 s svstdata; +#X obj 478 479 print; #X symbolatom 673 132 26 0 0 0 - - - 0; #X obj 673 100 r rvstprogname; #X obj 503 100 r rvstprognumber; #X floatatom 503 124 5 0 0 0 - - - 0; -#X text 464 273 1 send some data to the host's data chunk; -#X text 463 358 2 from the host save the file as .fxp or .fxb; -#X msg 476 299 hello world 1.2; -#X text 462 392 3 from the host open the file you saved; -#X text 500 11 When the host chamges the program these 2 are updated. Additionally you can use this to set lots of parameters that are not exposed to host. The program used is stored and recalled in the host/DAW project., f 49; +#X msg 476 324 hello world 1.2; #N canvas 182 182 450 300 additionally 0; #X msg 121 99 12 34 56 hello; #X msg 150 136 0.2 0.4 0.78 foo; @@ -53,6 +49,10 @@ #X listbox 503 182 23 0 0 0 - - - 0; #X text 466 223 Experimental. Not all hosts supports it correctly. See the .pdv file. This only works if PROGRAMSARECHUNKS = TRUE is set., f 50; #X obj 242 213 t f f; +#X text 464 273 1 all vstparameters are tracked and additionally you can send some Pd list to the host's data chunk; +#X text 463 383 2 from the host save your current session (or to a file as .fxp or .fxb); +#X text 462 417 3 from the host open your session (or the file you saved); +#X text 500 11 When the host chamges the program these 2 are updated. Additionally you can use this to set lots of parameters that are not exposed to the host. The program used is stored and recalled in the host/DAW project., f 52; #X connect 0 0 7 0; #X connect 0 1 6 0; #X connect 1 0 2 0; @@ -65,14 +65,14 @@ #X connect 9 0 15 0; #X connect 10 0 11 0; #X connect 11 0 12 0; -#X connect 14 0 34 0; +#X connect 14 0 30 0; #X connect 15 0 14 0; #X connect 17 0 18 0; #X connect 19 0 21 0; #X connect 23 0 22 0; #X connect 24 0 25 0; -#X connect 25 0 31 0; -#X connect 28 0 20 0; -#X connect 31 0 32 0; -#X connect 34 0 10 0; -#X connect 34 1 13 0; +#X connect 25 0 27 0; +#X connect 26 0 20 0; +#X connect 27 0 28 0; +#X connect 30 0 10 0; +#X connect 30 1 13 0; diff --git a/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv b/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv index 18cc354..1ec15e4 100644 --- a/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv +++ b/build/Release64/Pd_Chunks-test/Pd_Chunks-test.pdv @@ -25,9 +25,9 @@ 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. +# All vst parameters are saved in the host session and additionally +# you can set/get some "Pd list" in the session or to a .fxp/.fxb file +# via [s svstdata] and [r rvstdata] PROGRAMSARECHUNKS = TRUE # Number of VST parameters (up to 128) diff --git a/build/Release64/Pd_Chunks-test/read-chunk-test.fxp b/build/Release64/Pd_Chunks-test/read-chunk-test.fxp deleted file mode 100644 index c704760..0000000 Binary files a/build/Release64/Pd_Chunks-test/read-chunk-test.fxp and /dev/null differ diff --git a/vst-template/pdvst.cpp b/vst-template/pdvst.cpp index 79cd913..83ef0f0 100644 --- a/vst-template/pdvst.cpp +++ b/vst-template/pdvst.cpp @@ -626,32 +626,23 @@ bool pdvst::getOutputProperties(VstInt32 index, VstPinProperties* properties) VstInt32 pdvst::getChunk (void** data, bool isPreset) { - Chunk = new pdvstProgramAreChunks; - - MessageBoxA(NULL, "getchunk call", "debug", MB_OK); // all host gets here - - + Chunk = new pdvstProgramAreChunks; + //MessageBoxA(NULL, "getchunk call", "debug", MB_OK); // all host gets here for (int i = 0; i < nParameters; i++) { Chunk->vstParam[i] = vstParam[i]; - } - - if(1) + } + //MessageBoxA(NULL, "getchunk if data", "debug", MB_OK); // not all hosts gets here + WaitForSingleObject(pdvstTransferMutex, 10); { - //MessageBoxA(NULL, "getchunk if data", "debug", MB_OK); // not all hosts gets here - WaitForSingleObject(pdvstTransferMutex, 10); - { - memset(&Chunk->Data, '\0', MAXSTRLEN); - strcpy (Chunk->Data, pdvstData->datachunk.value.stringData); - ReleaseMutex(pdvstTransferMutex); - } + memset(&Chunk->Data, '\0', MAXSTRLEN); + strcpy (Chunk->Data, pdvstData->datachunk.value.stringData); + ReleaseMutex(pdvstTransferMutex); + } - debugLog("luc:debug-size-of-chunk %d", sizeof(*Chunk)); - *data = (void*)Chunk; - return sizeof(*Chunk); - } - else - return 0; + debugLog("luc:debug-size-of-chunk %d", sizeof(*Chunk)); + *data = (void*)Chunk; + return sizeof(*Chunk); } VstInt32 pdvst::setChunk (void* data, VstInt32 byteSize, bool isPreset) @@ -667,7 +658,6 @@ VstInt32 pdvst::setChunk (void* data, VstInt32 byteSize, bool isPreset) pdvstData->datachunk.type = STRING_TYPE; memset(&pdvstData->datachunk.value.stringData, '\0', MAXSTRLEN); strcpy(pdvstData->datachunk.value.stringData, Chunk->Data); - //memcpy(pdvstData->datachunk.value.stringData, Chunk->Data, MAXSTRLEN); pdvstData->datachunk.updated = 1;