rParamI(Pharmonicshift, "Amount of shift on harmonics"), rToggle(Pharmonicshiftfirst, "If harmonics are shifted before waveshaping/filtering"), rOption(Pmodulation, rOptions(None, Rev, Sine, Power), "Frequency Modulation To Combined Spectra"), rParamZyn(Pmodulationpar1, "modulation parameter"), rParamZyn(Pmodulationpar2, "modulation parameter"), rParamZyn(Pmodulationpar3, "modulation parameter"), //TODO update to rArray and test {"phase#128::c:i", rProp(parameter) rLinear(0,127) rDoc("Sets harmonic phase"), NULL, [](const char *m, rtosc::RtData &d) { const char *mm = m; while(*mm && !isdigit(*mm)) ++mm; unsigned char &phase = ((OscilGen*)d.obj)->Phphase[atoi(mm)]; if(!rtosc_narguments(m)) d.reply(d.loc, "c", phase); else phase = rtosc_argument(m,0).i; }}, //TODO update to rArray and test {"magnitude#128::c:i", rProp(parameter) rLinear(0,127) rDoc("Sets harmonic magnitude"), NULL, [](const char *m, rtosc::RtData &d) { //printf("I'm at '%s'\n", d.loc); const char *mm = m; while(*mm && !isdigit(*mm)) ++mm; unsigned char &mag = ((OscilGen*)d.obj)->Phmag[atoi(mm)]; if(!rtosc_narguments(m)) d.reply(d.loc, "c", mag); else { mag = rtosc_argument(m,0).i;
#define rObject Config static const rtosc::Ports ports = { //rString(cfg.LinuxOSSWaveOutDev), //rString(cfg.LinuxOSSSeqInDev), rParamI(cfg.SampleRate, "samples of audio per second"), rParamI(cfg.SoundBufferSize, "Size of processed audio buffer"), rParamI(cfg.OscilSize, "Size Of Oscillator Wavetable"), rToggle(cfg.SwapStereo, "Swap Left And Right Channels"), rToggle(cfg.BankUIAutoClose, "Automatic Closing of BackUI After Patch Selection"), rParamI(cfg.GzipCompression, "Level of Gzip Compression For Save Files"), rParamI(cfg.Interpolation, "Level of Interpolation, Linear/Cubic"), {"cfg.presetsDirList", rProp(parameter) rDoc("list of preset search directories"), 0, [](const char *msg, rtosc::RtData &d) { Config &c = *(Config*)d.obj; if(rtosc_narguments(msg) != 0) { std::string args = rtosc_argument_string(msg); //clear everything c.clearpresetsdirlist(); for(int i=0; i<(int)args.size(); ++i) if(args[i] == 's') c.cfg.presetsDirList[i] = rtosc_argument(msg, i).s; } char types[MAX_BANK_ROOT_DIRS+1]; rtosc_arg_t args[MAX_BANK_ROOT_DIRS]; size_t pos = 0; //zero out data memset(types, 0, sizeof(types));
#include "../Misc/Allocator.h" #define rObject EffectMgr static const rtosc::Ports local_ports = { rSelf(EffectMgr), rPaste, rRecurp(filterpars, "Filter Parameter for Dynamic Filter"), {"parameter#128::i", rProp(alias) rDoc("Parameter Accessor"), NULL, [](const char *msg, rtosc::RtData &d) { EffectMgr *eff = (EffectMgr*)d.obj; const char *mm = msg; while(!isdigit(*mm))++mm; if(!rtosc_narguments(msg)) d.reply(d.loc, "i", eff->geteffectparrt(atoi(mm))); else { eff->seteffectparrt(atoi(mm), rtosc_argument(msg, 0).i); d.broadcast(d.loc, "i", eff->geteffectparrt(atoi(mm))); } }}, {"preset::i", rProp(alias) rDoc("Effect Preset Selector"), NULL, [](const char *msg, rtosc::RtData &d) { EffectMgr *eff = (EffectMgr*)d.obj; if(!rtosc_narguments(msg)) d.reply(d.loc, "i", eff->getpreset()); else { eff->changepresetrt(rtosc_argument(msg, 0).i); d.broadcast(d.loc, "i", eff->getpreset());