zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit 97b4f97c87782e3eeeda3b31b605a6a7d8c0d407
parent de6bb600b3588bc75c7cbc2343164b64b5900c16
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Thu, 12 Nov 2015 19:38:58 -0500

Fix LFO Paste

Diffstat:
Msrc/Misc/PresetExtractor.cpp | 41++++++++++++++++++++++-------------------
Msrc/Tests/MessageTest.h | 31+++++++++++++++++++++++++------
2 files changed, 47 insertions(+), 25 deletions(-)

diff --git a/src/Misc/PresetExtractor.cpp b/src/Misc/PresetExtractor.cpp @@ -70,7 +70,6 @@ const rtosc::Ports real_preset_ports = assert(d.obj); std::string args = rtosc_argument_string(msg); d.reply(d.loc, "s", "clipboard paste..."); - printf("\nClipboard Paste...\n"); if(args == "s") presetPaste(mw, rtosc_argument(msg, 0).s, ""); else if(args == "ss") @@ -146,7 +145,7 @@ class Capture:public rtosc::RtData virtual void reply(const char *path, const char *args, ...) { - printf("reply(%p)(%s)(%s)...\n", msgbuf, path, args); + //printf("reply(%p)(%s)(%s)...\n", msgbuf, path, args); //printf("size is %d\n", sizeof(msgbuf)); va_list va; va_start(va,args); @@ -199,7 +198,7 @@ std::string doCopy(MiddleWare &mw, string url, string name) mw.doReadOnlyOp([&xml, url, name, &mw](){ Master *m = mw.spawnMaster(); //Get the pointer - printf("capture at <%s>\n", (url+"self").c_str()); + //printf("capture at <%s>\n", (url+"self").c_str()); T *t = (T*)capture<void*>(m, url+"self"); assert(t); //Extract Via mxml @@ -216,6 +215,10 @@ void doPaste(MiddleWare &mw, string url, string type, XMLwrapper &xml, Ts&&... a //Generate a new object T *t = new T(std::forward<Ts>(args)...); + //Old workaround for LFO parameters + if(strstr(type.c_str(), "Plfo")) + type = "Plfo"; + if(xml.enterbranch(type) == 0) return; @@ -227,7 +230,7 @@ void doPaste(MiddleWare &mw, string url, string type, XMLwrapper &xml, Ts&&... a rtosc_message(buffer, 1024, path.c_str(), "b", sizeof(void*), &t); if(!Master::ports.apropos(path.c_str())) fprintf(stderr, "Warning: Missing Paste URL: '%s'\n", path.c_str()); - printf("Sending info to '%s'\n", buffer); + //printf("Sending info to '%s'\n", buffer); mw.transmitMsg(buffer); //Let the pointer be reclaimed later @@ -237,7 +240,7 @@ template<class T> std::string doArrayCopy(MiddleWare &mw, int field, string url, string name) { XMLwrapper xml; - printf("Getting info from '%s'<%d>\n", url.c_str(), field); + //printf("Getting info from '%s'<%d>\n", url.c_str(), field); mw.doReadOnlyOp([&xml, url, field, name, &mw](){ Master *m = mw.spawnMaster(); //Get the pointer @@ -270,7 +273,7 @@ void doArrayPaste(MiddleWare &mw, int field, string url, string type, rtosc_message(buffer, 1024, path.c_str(), "bi", sizeof(void*), &t, field); if(!Master::ports.apropos(path.c_str())) fprintf(stderr, "Warning: Missing Paste URL: '%s'\n", path.c_str()); - printf("Sending info to '%s'<%d>\n", buffer, field); + //printf("Sending info to '%s'<%d>\n", buffer, field); mw.transmitMsg(buffer); //Let the pointer be reclaimed later @@ -285,7 +288,7 @@ void doArrayPaste(MiddleWare &mw, int field, string url, string type, */ void doClassPaste(std::string type, std::string type_, MiddleWare &mw, string url, XMLwrapper &data) { - printf("Class Paste\n"); + //printf("Class Paste\n"); if(type == "EnvelopeParams") doPaste<EnvelopeParams>(mw, url, type_, data); else if(type == "LFOParams") @@ -311,7 +314,7 @@ void doClassPaste(std::string type, std::string type_, MiddleWare &mw, string ur std::string doClassCopy(std::string type, MiddleWare &mw, string url, string name) { - printf("doClassCopy(%p)\n", mw.spawnMaster()->uToB); + //printf("doClassCopy(%p)\n", mw.spawnMaster()->uToB); if(type == "EnvelopeParams") return doCopy<EnvelopeParams>(mw, url, name); else if(type == "LFOParams") @@ -361,14 +364,14 @@ std::string getUrlPresetType(std::string url, MiddleWare &mw) //Get the pointer result = capture<std::string>(m, url+"preset-type"); }); - printf("preset type = %s\n", result.c_str()); + //printf("preset type = %s\n", result.c_str()); return result; } std::string getUrlType(std::string url) { assert(!url.empty()); - printf("Searching for '%s'\n", (url+"self").c_str()); + //printf("Searching for '%s'\n", (url+"self").c_str()); auto self = Master::ports.apropos((url+"self").c_str()); if(!self) fprintf(stderr, "Warning: URL Metadata Not Found For '%s'\n", url.c_str()); @@ -409,12 +412,12 @@ void presetCopy(MiddleWare &mw, std::string url, std::string name) { (void) name; doClassCopy(getUrlType(url), mw, url, name); - printf("PresetCopy()\n"); + //printf("PresetCopy()\n"); } void presetPaste(MiddleWare &mw, std::string url, std::string name) { (void) name; - printf("PresetPaste()\n"); + //printf("PresetPaste()\n"); string data = ""; XMLwrapper xml; if(name.empty()) { @@ -433,13 +436,13 @@ void presetPaste(MiddleWare &mw, std::string url, std::string name) void presetCopyArray(MiddleWare &mw, std::string url, int field, std::string name) { (void) name; - printf("PresetArrayCopy()\n"); + //printf("PresetArrayCopy()\n"); doClassArrayCopy(getUrlType(url), field, mw, url, name); } void presetPasteArray(MiddleWare &mw, std::string url, int field, std::string name) { (void) name; - printf("PresetArrayPaste()\n"); + //printf("PresetArrayPaste()\n"); string data = ""; XMLwrapper xml; if(name.empty()) { @@ -452,7 +455,7 @@ void presetPasteArray(MiddleWare &mw, std::string url, int field, std::string na if(xml.loadXMLfile(name)) return; } - printf("Performing Paste...\n"); + //printf("Performing Paste...\n"); doClassArrayPaste(getUrlType(url), getUrlPresetType(url, mw), field, mw, url, xml); } #if 0 @@ -464,19 +467,19 @@ void presetPaste(std::string url, int) #endif void presetDelete(int) { - printf("PresetDelete()\n"); + printf("PresetDelete()<UNIMPLEMENTED>\n"); } void presetRescan() { - printf("PresetRescan()\n"); + printf("PresetRescan()<UNIMPLEMENTED>\n"); } std::string presetClipboardType() { - printf("PresetClipboardType()\n"); + printf("PresetClipboardType()<UNIMPLEMENTED>\n"); return "dummy"; } bool presetCheckClipboardType() { - printf("PresetCheckClipboardType()\n"); + printf("PresetCheckClipboardType()<UNIMPLEMENTED>\n"); return true; } diff --git a/src/Tests/MessageTest.h b/src/Tests/MessageTest.h @@ -61,8 +61,7 @@ class MessageTest:public CxxTest::TestSuite delete synth; } -#if 0 - void _testKitEnable(void) + void testKitEnable(void) { const char *msg = NULL; mw->transmitMsg("/part0/kit0/Psubenabled", "T"); @@ -74,9 +73,9 @@ class MessageTest:public CxxTest::TestSuite TS_ASSERT_EQUALS(string("/part0/kit0/Psubenabled"), msg); } - void _testBankCapture(void) + void testBankCapture(void) { - mw->transmitMsg("/bank/slots", ""); + mw->transmitMsg("/bank/slot23", ""); TS_ASSERT(!ms->uToB->hasNext()); mw->transmitMsg("/bank/fake", ""); TS_ASSERT(ms->uToB->hasNext()); @@ -84,7 +83,7 @@ class MessageTest:public CxxTest::TestSuite TS_ASSERT_EQUALS(string("/bank/fake"), msg); } - void _testOscCopyPaste(void) + void testOscCopyPaste(void) { //Enable pad synth mw->transmitMsg("/part0/kit0/Ppadenabled", "T"); @@ -122,7 +121,7 @@ class MessageTest:public CxxTest::TestSuite t.join(); TS_ASSERT_EQUALS(ms->part[0]->kit[0].padpars->oscilgen->Pbasefuncpar, 32); } -#endif + void start_realtime(void) { @@ -203,6 +202,26 @@ class MessageTest:public CxxTest::TestSuite mw->transmitMsg("/load_xlz", "s", "test-midi-learn.xlz"); } + void testLfoPaste(void) + { + start_realtime(); + ms->part[0]->kit[0].adpars->GlobalPar.FreqLfo->Pfreqrand = 32; + TS_ASSERT_EQUALS(ms->part[0]->kit[0].adpars->GlobalPar.FreqLfo->Pfreqrand, 32); + + //Copy + mw->transmitMsg("/presets/copy", "s", "/part0/kit0/adpars/GlobalPar/FreqLfo/"); + + ms->part[0]->kit[0].adpars->GlobalPar.FreqLfo->Pfreqrand = 99; + TS_ASSERT_EQUALS(ms->part[0]->kit[0].adpars->GlobalPar.FreqLfo->Pfreqrand, 99); + + //Paste + mw->transmitMsg("/presets/paste", "s", "/part0/kit0/adpars/GlobalPar/FreqLfo/"); + stop_realtime(); + + TS_ASSERT_EQUALS(ms->part[0]->kit[0].adpars->GlobalPar.FreqLfo->Pfreqrand, 32); + } + + private: SYNTH_T *synth; MiddleWare *mw;