75 fprintf(stderr,
"liblo :-( %d-%s@%s\n",
i,
m,loc);
92 memset(types, 0,
sizeof(types));
93 memset(args, 0,
sizeof(args));
106 if(strstr(
p.name, needle) !=
p.name || !
p.name)
109 args[pos++].
s =
p.name;
111 if(
p.metadata && *
p.metadata) {
112 args[pos].
b.
data = (
unsigned char*)
p.metadata;
114 args[pos++].
b.
len = tmp.length();
116 args[pos].
b.
data = (
unsigned char*)
NULL;
117 args[pos++].
b.
len = 0;
124 char buffer[1024*20];
127 lo_message
msg = lo_message_deserialise((
void*)buffer,
length,
NULL);
128 lo_address addr = lo_address_new_from_url(url);
130 lo_send_message(addr, buffer,
msg);
131 lo_address_free(addr);
132 lo_message_free(
msg);
137 int argc, lo_message
msg,
void *user_data)
143 lo_address addr = lo_message_get_source(
msg);
145 const char *tmp = lo_address_get_url(addr);
154 memset(buffer, 0,
sizeof(buffer));
156 lo_message_serialise(
msg, path, buffer, &
size);
159 }
else if(buffer[0]==
'/' && strrchr(buffer,
'/')[1]) {
169template <
class T,
class V>
170std::vector<T>
keys(
const std::map<T,V> &
m)
174 vec.push_back(kv.first);
185 if(!strcmp(str,
"Part"))
187 else if(!strcmp(str,
"Master"))
189 else if(!strcmp(str,
"fft_t"))
191 else if(!strcmp(str,
"KbmInfo"))
193 else if(!strcmp(str,
"SclInfo"))
195 else if(!strcmp(str,
"Microtonal"))
198 fprintf(stderr,
"Unknown type '%s', leaking pointer %p!!\n", str,
v);
212 std::mutex rtdata_mutex;
213 unsigned num =
p->sampleGenerator([&rtdata_mutex,&path,&
d]
214 (
unsigned N, PADnoteParameters::Sample &
s)
219 d.chain((path+
to_s(
N)).c_str(),
"ifb",
220 s.size,
s.basefreq,
sizeof(
float*), &
s.smp);
221 rtdata_mutex.unlock();
222 }, []{
return false;});
225 d.chain((path+
to_s(
i)).c_str(),
"ifb",
226 0, 440.0f,
sizeof(
float*),
NULL);
258 auto &obj = part->
kit[
j];
266 std::string base =
"/part"+
to_s(
i)+
"/kit"+
to_s(
j)+
"/";
268 std::string nbase = base+
"adpars/VoicePar"+
to_s(
k)+
"/";
271 objmap[nbase+
"OscilSmp/"] = nobj.OscilSmp;
272 objmap[nbase+
"FMSmp/"] = nobj.FMSmp;
274 objmap[nbase+
"OscilSmp/"] =
nullptr;
275 objmap[nbase+
"FMSmp/"] =
nullptr;
282 std::string base =
"/part"+
to_s(
i)+
"/kit"+
to_s(
j)+
"/";
285 objmap[base+
"padpars/"] = padpars;
288 objmap[base+
"padpars/"] =
nullptr;
289 objmap[base+
"padpars/oscilgen/"] =
nullptr;
304 void *
get(std::string loc)
310 string obj_rl(
d.message,
msg);
311 void *osc =
get(obj_rl);
313 strcpy(
d.loc, obj_rl.c_str());
318 string obj_rl(
d.message,
msg);
319 void *pad =
get(obj_rl);
320 if(!strcmp(
msg,
"prepare")) {
323 d.reply((obj_rl+
"needPrepare").c_str(),
"F");
327 strcpy(
d.loc, obj_rl.c_str());
329 PADnoteParameters::non_realtime_ports.dispatch(
msg,
d);
331 if(!strcmp(
msg,
"oscilgen/prepare"))
334 d.reply((obj_rl+
"needPrepare").c_str(),
"T");
358 memset(
add, 0,
sizeof(
add));
359 memset(
pad, 0,
sizeof(
pad));
360 memset(
sub, 0,
sizeof(
sub));
366 auto kit = part->
kit[
j];
367 add[
i][
j] = kit.adpars;
368 sub[
i][
j] = kit.subpars;
369 pad[
i][
j] = kit.padpars;
440 int res =
master->part[npart]->saveXML(fname.c_str());
447 if(((
unsigned int)par < bank.
banks.size())
462 auto alloc = std::async(std::launch::async,
466 config->cfg.GzipCompression,
467 config->cfg.Interpolation,
469 (
"/part"+
to_s(npart)+
"/").c_str());
471 fprintf(stderr,
"Warning: failed to load part<%s>!\n",
filename);
473 auto isLateLoad = [
this,npart]{
477 p->applyparameters(isLateLoad);
482 while(alloc.wait_for(std::chrono::seconds(0)) != std::future_status::ready) {
487 Part *
p = alloc.get();
490 config->cfg.GzipCompression,
491 config->cfg.Interpolation,
495 fprintf(stderr,
"Warning: failed to load part<%s>!\n",
filename);
497 auto isLateLoad = [
this,npart]{
501 p->applyparameters(isLateLoad);
505 kits.extractPart(
p, npart);
509 parent->transmitMsg(
"/load-part",
"ib", npart,
sizeof(
Part*), &
p);
521 config->cfg.GzipCompression,
522 config->cfg.Interpolation,
524 p->applyparameters();
526 kits.extractPart(
p, npart);
530 parent->transmitMsg(
"/load-part",
"ib", npart,
sizeof(
Part *), &
p);
546 m->applyparameters();
556 parent->transmitMsg(
"/load-master",
"b",
sizeof(
Master*), &
m);
564 d.reply(
"/alert",
"s",
"Error: Could not load the xsz file.");
567 d.chain(
"/microtonal/paste",
"b",
sizeof(
void*), µ);
576 d.reply(
"/alert",
"s",
"Error: Could not save the xsz file.");
584 d.reply(
"/alert",
"s",
"Error: Could not load the scl file.");
587 d.chain(
"/microtonal/paste_scl",
"b",
sizeof(
void*), &scl);
595 d.reply(
"/alert",
"s",
"Error: Could not load the kbm file.");
598 d.chain(
"/microtonal/paste_kbm",
"b",
sizeof(
void*), &kbm);
606 kits.extractPart(
m->part[
i],
i);
622 while(lo_server_recv_noblock(
server, 0));
624 while(
bToU->hasNext()) {
625 const char *rtmsg =
bToU->read();
651 void write(
const char *path,
const char *args, ...);
652 void write(
const char *path,
const char *args, va_list va);
739 buffer =
new char[4*4096];
740 memset(
buffer, 0, 4*4096);
757 virtual void reply(
const char *path,
const char *args, ...)
override
762 if(!strcmp(path,
"/forward")) {
764 path = va_arg(va,
const char *);
775 if(!strcmp(path,
"/forward")) {
784 mwi->sendToCurrentRemote(
msg);
796 virtual void chain(
const char *path,
const char *args, ...)
override
817static std::vector<std::string>
getFiles(
const char *folder,
bool finddir)
819 DIR *dir = opendir(folder);
826 std::vector<string>
files;
828 while((
fn = readdir(dir))) {
830 bool is_dir =
fn->d_type & DT_DIR;
833 string path = string(folder) +
"/" +
fn->d_name;
835 memset((
void*)&buf, 0,
sizeof(buf));
836 int err = stat(path.c_str(), &buf);
838 printf(
"[Zyn:Error] stat cannot handle <%s>:%d\n", path.c_str(), err);
844 std::string darn_windows = folder + std::string(
"/") + std::string(
fn->d_name);
848 bool is_dir = GetFileAttributes(darn_windows.c_str()) & FILE_ATTRIBUTE_DIRECTORY;
850 if(finddir == is_dir && strcmp(
".",
fn->d_name))
863 const char *
mm =
msg;
864 while(*
mm && !isdigit(*
mm)) ++
mm;
879#define rBegin [](const char *msg, RtData &d) { (void)msg;(void)d;\
880 rObject &impl = *((rObject*)d.obj);(void)impl;
897 impl.rescanforbanks();
900 for(
auto &elm : impl.banks)
901 d.reply(
"/bank/bank_select",
"iss",
i++, elm.name.c_str(), elm.dir.c_str());
902 d.reply(
"/bank/bank_select",
"i", impl.bankpos);
904 impl.loadbank(impl.banks[0].dir);
908 d.reply(
"/bankview",
"iss",
909 i, impl.ins[
i].name.c_str(),
910 impl.ins[
i].filename.c_str());
915 d.reply(
"/bankview",
"iss",
i,
"",
"");
925 for(
auto &elm : impl.banks) {
926 types[
i] = types [
i + 1] =
's';
927 args[
i++].
s = elm.name.c_str();
928 args[
i++].
s = elm.dir.c_str();
930 d.replyArray(
"/bank/bank_list", types, args);
935 const char *types[17];
938 types[ 2] =
"Chromatic Percussion";
940 types[ 4] =
"Guitar";
942 types[ 6] =
"Solo Strings";
943 types[ 7] =
"Ensemble";
947 types[11] =
"Synth Lead";
948 types[12] =
"Synth Pad";
949 types[13] =
"Synth Effects";
950 types[14] =
"Ethnic";
951 types[15] =
"Percussive";
952 types[16] =
"Sound Effects";
955 for(
int i=0;
i<17; ++
i) {
957 args[
i].
s = types[
i];
959 d.replyArray(
"/bank/types",
t, args);
963 const char *types[8];
969 types[ 5] =
"ambient";
974 for(
int i=0;
i<8; ++
i) {
976 args[
i].
s = types[
i];
978 d.replyArray(
d.loc,
t, args);
986 d.reply(
"/bankview",
"iss",
987 loc, impl.ins[loc].name.c_str(),
988 impl.ins[loc].filename.c_str());
993 for(
auto &elm : impl.banks)
994 d.reply(
"/bank/bank_select",
"iss",
i++, elm.name.c_str(), elm.dir.c_str());
996 {
"bank_select::i", 0, 0,
1000 d.reply(
d.loc,
"i", pos);
1001 if(impl.bankpos != pos) {
1003 impl.loadbank(impl.banks[pos].dir);
1007 d.reply(
"/bankview",
"iss",
1008 i, impl.ins[
i].name.c_str(),
1009 impl.ins[
i].filename.c_str());
1012 d.reply(
"/bank/bank_select",
"i", impl.bankpos);
1014 {
"rename_slot:is", 0, 0,
1018 const int err = impl.setname(slot,
name, -1);
1020 d.reply(
"/alert",
"s",
1021 "Failed To Rename Bank Slot, please check file permissions");
1024 {
"swap_slots:ii", 0, 0,
1028 const int err = impl.swapslot(slota, slotb);
1030 d.reply(
"/alert",
"s",
1031 "Failed To Swap Bank Slots, please check file permissions");
1033 {
"clear_slot:i", 0, 0,
1036 const int err = impl.clearslot(slot);
1038 d.reply(
"/alert",
"s",
1039 "Failed To Clear Bank Slot, please check file permissions");
1046 d.reply(
d.loc,
"i", impl.bank_msb);
1053 d.reply(
d.loc,
"i", impl.bank_lsb);
1059 d.reply(
"/alert",
"s",
"Error: Could not make a new bank (directory)..");
1064#define MAX_SEARCH 300
1069 res_dat[
i].
s = res[
i].c_str();
1071 d.replyArray(
"/bank/search_results", res_type, res_dat);
1077#define MAX_SEARCH 300
1082 res_dat[
i].
s = res[
i].c_str();
1084 d.replyArray(
"/bank/search_results", res_type, res_dat);
1087 {
"search_results:", 0, 0,
1089 d.reply(
"/bank/search_results",
"");
1104#define rObject MiddleWareImpl
1107#define STRINGIFY2(a) #a
1108#define STRINGIFY(a) STRINGIFY2(a)
1138 d.obj = &impl.master->bank;
1141 {
"bank/save_to_slot:ii", 0, 0,
1147 impl.doReadOnlyOp([&impl,slot,part_id,&err](){
1148 err = impl.master->bank.savetoslot(slot, impl.master->part[part_id]);});
1152 "Failed To Save To Bank Slot, please check file permissions");
1158 d.obj = impl.config;
1170 {
"part*/kit*/{Padenabled,Ppadenabled,Psubenabled}:T:F", 0, 0,
1172 impl.kitEnable(
msg);
1175 {
"save_xlz:s", 0, 0,
1177 impl.doReadOnlyOp([&]() {
1184 {
"load_xlz:s", 0, 0,
1192 d.chain(
"/automate/load-blob",
"b",
sizeof(
void*), &mgr);
1194 {
"clear_xlz:", 0, 0,
1196 d.chain(
"/automate/clear",
"");
1199 {
"load_xsz:s", 0, 0,
1202 impl.loadXsz(
file,
d);
1204 {
"save_xsz:s", 0, 0,
1207 impl.saveXsz(
file,
d);
1209 {
"load_scl:s", 0, 0,
1212 impl.loadScl(
file,
d);
1214 {
"load_kbm:s", 0, 0,
1217 impl.loadKbm(
file,
d);
1219 {
"save_xmz:s", 0, 0,
1223 impl.doReadOnlyOp([&impl,
file](){
1224 int res = impl.master->saveXML(
file);
1227 {
"save_xiz:is", 0, 0,
1231 impl.savePart(part_id,
file);
1233 {
"file_home_dir:", 0, 0,
1235 const char *home =
getenv(
"PWD");
1239 home =
getenv(
"USERPROFILE");
1241 home =
getenv(
"HOMEPATH");
1245 string home_ = home;
1247 if(home_[home_.length()-1] !=
'/')
1250 d.reply(
d.loc,
"s", home_.c_str());
1252 {
"file_list_files:s", 0, 0,
1258 const int N =
files.size();
1260 char *types =
new char[
N+1];
1262 for(
int i=0;
i<
N; ++
i) {
1267 d.replyArray(
d.loc, types, args);
1271 {
"file_list_dirs:s", 0, 0,
1277 const int N =
files.size();
1279 char *types =
new char[
N+1];
1281 for(
int i=0;
i<
N; ++
i) {
1286 d.replyArray(
d.loc, types, args);
1290 {
"reload_auto_save:i", 0, 0,
1293 const string save_dir = string(
getenv(
"HOME")) +
"/.local";
1294 const string save_file =
"zynaddsubfx-"+
to_s(save_id)+
"-autosave.xmz";
1295 const string save_loc = save_dir +
"/" + save_file;
1296 impl.loadMaster(save_loc.c_str());
1299 remove(save_loc.c_str());
1301 {
"delete_auto_save:i", 0, 0,
1304 const string save_dir = string(
getenv(
"HOME")) +
"/.local";
1305 const string save_file =
"zynaddsubfx-"+
to_s(save_id)+
"-autosave.xmz";
1306 const string save_loc = save_dir +
"/" + save_file;
1307 remove(save_loc.c_str());
1309 {
"load_xmz:s", 0, 0,
1312 impl.loadMaster(
file);
1313 d.reply(
"/damage",
"s",
"/");
1315 {
"reset_master:", 0, 0,
1317 impl.loadMaster(
NULL);
1318 d.reply(
"/damage",
"s",
"/");
1320 {
"load_xiz:is", 0, 0,
1324 impl.pending_load[part_id]++;
1325 impl.loadPart(part_id,
file, impl.master);
1327 {
"load-part:is", 0, 0,
1331 impl.pending_load[part_id]++;
1332 impl.loadPart(part_id,
file, impl.master);
1334 {
"load-part:iss", 0, 0,
1339 impl.pending_load[part_id]++;
1340 impl.loadPart(part_id,
file, impl.master);
1341 impl.uToB->write((
"/part"+
to_s(part_id)+
"/Pname").c_str(),
"s",
1344 {
"setprogram:i:c", 0, 0,
1346 Bank &bank = impl.master->bank;
1349 impl.pending_load[0]++;
1350 impl.loadPart(0, impl.master->bank.ins[slot].filename.c_str(), impl.master);
1351 impl.uToB->write(
"/part0/Pname",
"s", impl.master->bank.ins[slot].name.c_str());
1354 {
"part#16/clear:", 0, 0,
1357 impl.loadClearPart(
id);
1358 d.reply(
"/damage",
"s", (
"/part"+
to_s(
id)).c_str());
1362 impl.undo.seekHistory(-1);
1366 impl.undo.seekHistory(+1);
1415 {
"ui/title:", 0, 0, [](
const char *
msg,
RtData &
d) {}},
1424 if(!strcmp(
type,
"OSC_URL"))
1425 impl.currentUrl(url);
1433 {
"request-memory:", 0, 0,
1437 size_t N = 5*1024*1024;
1439 impl.uToB->write(
"/add-rt-memory",
"bi",
sizeof(
void*), &mem,
N);
1441 {
"setprogram:cc:ii", 0, 0,
1443 Bank &bank = impl.master->bank;
1446 impl.loadPart(part, impl.master->bank.ins[program].filename.c_str(), impl.master);
1447 impl.uToB->write((
"/part"+
to_s(part)+
"/Pname").c_str(),
"s", impl.master->bank.ins[program].name.c_str());
1453 {
"undo_pause:", 0, 0,
rBegin; impl.recording_undo =
false;
rEnd},
1454 {
"undo_resume:", 0, 0,
rBegin; impl.recording_undo =
true;
rEnd},
1455 {
"undo_change", 0, 0,
1457 if(impl.recording_undo)
1458 impl.undo.recordEvent(
msg);
1460 {
"broadcast:", 0, 0,
rBegin; impl.broadcast =
true;
rEnd},
1461 {
"forward:", 0, 0,
rBegin; impl.forward =
true;
rEnd},
1476 std::string home =
getenv(
"HOME");
1477 std::string save_file = home+
"/.local/zynaddsubfx-"+
to_s(getpid())+
"-autosave.xmz";
1478 printf(
"doing an autosave <%s>...\n", save_file.c_str());
1479 int res =
master->saveXML(save_file.c_str());
1486 if(preferrred_port != -1)
1487 server = lo_server_new_with_proto(
to_s(preferrred_port).c_str(),
1494 fprintf(stderr,
"lo server running on %d\n", lo_server_get_port(
server));
1496 fprintf(stderr,
"lo server could not be started :-/\n");
1500 cb = [](
void*,
const char*){};
1514 pending_load[
i] = 0;
1519 undo.setCallback([
this](
const char *
msg) {
1530 struct timespec
time;
1531 clock_gettime(CLOCK_MONOTONIC, &
time);
1532 start_time_sec =
time.tv_sec;
1533 start_time_nsec =
time.tv_nsec;
1577 uToB->write(
"/freeze_state",
"");
1579 std::list<const char *> fico;
1581 while(tries++ < 10000) {
1582 if(!
bToU->hasNext()) {
1586 const char *
msg =
bToU->read();
1587 if(!strcmp(
"/state_frozen",
msg))
1590 char *save_buf =
new char[bytes];
1592 fico.push_back(save_buf);
1597 std::atomic_thread_fence(std::memory_order_acquire);
1603 uToB->write(
"/thaw_state",
"");
1625 struct timespec
time;
1626 clock_gettime(CLOCK_MONOTONIC, &
time);
1637 if(last_beat == last_ack) {
1646 if(last_beat == last_ack) {
1654 if(last_beat-last_ack > 0 && now-last_beat > 20) {
1673 std::atomic_thread_fence(std::memory_order_acquire);
1680 std::atomic_thread_fence(std::memory_order_acquire);
1690 uToB->write(
"/freeze_state",
"");
1692 std::list<const char *> fico;
1694 while(tries++ < 2000) {
1695 if(!
bToU->hasNext()) {
1699 const char *
msg =
bToU->read();
1700 if(!strcmp(
"/state_frozen",
msg))
1703 char *save_buf =
new char[bytes];
1705 fico.push_back(save_buf);
1710 uToB->write(
"/thaw_state",
"");
1720 std::atomic_thread_fence(std::memory_order_acquire);
1726 uToB->write(
"/thaw_state",
"");
1750 printf(
"[Warning] Invalid message in sendToRemote <%s>...\n", rtmsg);
1758 }
else if(!dest.empty()) {
1759 lo_message
msg = lo_message_deserialise((
void*)rtmsg,
1762 printf(
"[ERROR] OSC to <%s> Failed To Parse In Liblo\n", rtmsg);
1767 lo_address addr = lo_address_new_from_url(dest.c_str());
1769 lo_send_message(addr, rtmsg,
msg);
1770 lo_address_free(addr);
1771 lo_message_free(
msg);
1784 assert(strcmp(rtmsg,
"/part0/kit0/Ppadenableda"));
1785 assert(strcmp(rtmsg,
"/ze_state"));
1788 if(strcmp(rtmsg,
"/vu-meter") &&
false) {
1789 fprintf(stdout,
"%c[%d;%d;%dm", 0x1B, 0, 1 + 30, 0 + 40);
1792 fprintf(stdout,
"%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
1802 fprintf(stderr,
"[ERROR] Unexpected Null OSC In Zyn\n");
1808 if(
d.matches == 0) {
1830 if(strstr(
msg,
"Padenabled"))
1832 else if(strstr(
msg,
"Ppadenabled"))
1834 else if(strstr(
msg,
"Psubenabled"))
1839 const char *tmp = strstr(
msg,
"part");
1844 const int part = atoi(tmp+4);
1846 tmp = strstr(
msg,
"kit");
1851 const int kit = atoi(tmp+3);
1859 string url =
"/part"+
to_s(part)+
"/kit"+
to_s(kit)+
"/";
1864 url +=
"adpars-data";
1869 url +=
"padpars-data";
1873 url +=
"subpars-data";
1878 uToB->write(url.c_str(),
"b",
sizeof(
void*), &ptr);
1890 assert(strcmp(
msg,
"/part0/Psysefxvol"));
1892 assert(strcmp(
msg,
"part0/part0/Ppanning"));
1893 assert(strcmp(
msg,
"sysefx0sysefx0/preset"));
1895 assert(strcmp(
msg,
"Psysefxvol0/part0"));
1897 if(strcmp(
"/get-vu",
msg) &&
false) {
1898 fprintf(stdout,
"%c[%d;%d;%dm", 0x1B, 0, 6 + 30, 0 + 40);
1900 fprintf(stdout,
"%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
1903 const char *last_path = strrchr(
msg,
'/');
1905 printf(
"Bad message in handleMsg() <%s>\n",
msg);
1914 if(
d.matches == 0 ||
d.forwarded) {
1929 write(path, args, va);
1936 char *buffer =
uToB->buffer();
1937 unsigned len =
uToB->buffer_size();
1944 warnx(
"Failed to write message to '%s'", path);
1962 impl->updateResources(
m);
1969 return impl->master;
1974 impl->autoSave.dt = interval_sec;
1980 const std::string home =
getenv(
"HOME");
1981 const std::string save_dir = home+
"/.local/";
1983 DIR *dir = opendir(save_dir.c_str());
1989 int reload_save = -1;
1991 while((
fn = readdir(dir))) {
1993 const char *prefix =
"zynaddsubfx-";
1999 int id = atoi(
filename+strlen(prefix));
2001 bool in_use =
false;
2003 std::string proc_file =
"/proc/" +
to_s(
id) +
"/comm";
2004 std::ifstream ifs(proc_file);
2006 std::string comm_name;
2008 in_use = (comm_name ==
"zynaddsubfx");
2024 std::string home =
getenv(
"HOME");
2025 std::string save_file = home+
"/.local/zynaddsubfx-"+
to_s(getpid())+
"-autosave.xmz";
2026 remove(save_file.c_str());
2053 impl->idle_ptr = ptr;
2069 fprintf(stderr,
"Error in transmitMsg(...)\n");
2079 fprintf(stderr,
"Error in transmitMsg(va)n");
2084 auto *mem =
impl->multi_thread_source.alloc();
2086 fprintf(stderr,
"Middleware::messageAnywhere memory pool out of memory...\n");
2091 impl->multi_thread_source.write(mem);
2093 fprintf(stderr,
"Middleware::messageAnywhere message too big...\n");
2094 impl->multi_thread_source.free(mem);
2101 impl->bToU->write(
"/setbank",
"c", bank);
2105 impl->pending_load[part]++;
2106 impl->bToU->write(
"/setprogram",
"cc", part, program);
2111 return impl->last_url;
2127 return lo_server_get_url(
impl->server);
2134 return impl->presetsstore;
2139 return impl->presetsstore;
#define warnx(...)
Definition SVFilter.cpp:22
#define rEnd
Definition Alienwah.cpp:26
#define rBegin
Definition Alienwah.cpp:25
#define BANK_SIZE
Definition Bank.h:23
#define NUM_KIT_ITEMS
Definition globals.h:135
#define NUM_MIDI_PARTS
Definition globals.h:99
#define PAD_MAX_SAMPLES
Definition globals.h:93
#define NUM_VOICES
Definition globals.h:109
class MasterUI * ui
Definition Connection.cpp:39
#define nullptr
Definition DistrhoDefines.h:75
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition Fl_Osc_Interface.h:56
Definition PADnoteParameters.h:41
OscilGen * oscilgen
Definition PADnoteParameters.h:151
Definition automations.h:72
void set_ports(const struct Ports &p)
Definition automations.cpp:295
Definition thread-link.h:43
Definition undo-history.h:12
Definition ADnoteParameters.h:310
ADnoteVoiceParam VoicePar[NUM_VOICES]
Definition ADnoteParameters.h:317
int loadbank(std::string bankdirname) NONREALTIME
uint8_t bank_lsb
Definition Bank.h:112
std::string bankfiletitle
Definition Bank.h:57
std::vector< bankstruct > banks
Definition Bank.h:71
static const rtosc::Ports & ports
Definition Config.h:72
rtosc::ThreadLink * uToB
Definition Master.h:190
static void saveAutomation(XMLwrapper &xml, const rtosc::AutomationMgr &midi)
Definition Master.cpp:622
rtosc::ThreadLink * bToU
Definition Master.h:189
static const rtosc::Ports & ports
Definition Master.h:172
static void loadAutomation(XMLwrapper &xml, rtosc::AutomationMgr &midi)
Definition Master.cpp:661
Definition Microtonal.h:61
static int loadscl(SclInfo &scl, const char *filename)
Definition Microtonal.cpp:581
int loadXML(const char *filename)
Definition Microtonal.cpp:830
static int loadkbm(KbmInfo &kbm, const char *filename)
Definition Microtonal.cpp:634
Definition MiddleWare.h:27
void tick(void)
Definition MiddleWare.cpp:2034
int checkAutoSave(void)
Definition MiddleWare.cpp:1977
void doReadOnlyOp(std::function< void()>)
Definition MiddleWare.cpp:2039
const PresetsStore & getPresetsStore() const
Definition MiddleWare.cpp:2132
const char * getServerAddress(void) const
Definition MiddleWare.cpp:2124
void messageAnywhere(const char *msg, const char *args,...)
Definition MiddleWare.cpp:2082
MiddleWare(SYNTH_T synth, class Config *config, int preferred_port=-1)
Definition MiddleWare.cpp:1950
void enableAutoSave(int interval_sec=60)
Definition MiddleWare.cpp:1972
void setIdleCallback(void(*cb)(void *), void *ptr)
Definition MiddleWare.cpp:2050
void transmitMsg(const char *)
Definition MiddleWare.cpp:2056
void updateResources(Master *m)
Definition MiddleWare.cpp:1960
void removeAutoSave(void)
Definition MiddleWare.cpp:2022
const SYNTH_T & getSynth(void) const
Definition MiddleWare.cpp:2119
class Master * spawnMaster(void)
Definition MiddleWare.cpp:1965
class MiddleWareImpl * impl
Definition MiddleWare.h:86
void transmitMsg_va(const char *, const char *args, va_list va)
Definition MiddleWare.cpp:2073
void setUiCallback(void(*cb)(void *, const char *), void *ui)
Definition MiddleWare.cpp:2044
std::string activeUrl(void)
Definition MiddleWare.cpp:2109
void pendingSetBank(int bank)
Definition MiddleWare.cpp:2099
~MiddleWare(void)
Definition MiddleWare.cpp:1955
Fl_Osc_Interface * spawnUiApi(void)
Definition MiddleWare.cpp:2029
void pendingSetProgram(int part, int program)
Definition MiddleWare.cpp:2103
Definition MiddleWare.cpp:412
std::set< string > known_remotes
Definition MiddleWare.cpp:717
const SYNTH_T synth
Definition MiddleWare.cpp:720
void write(const char *path, const char *args,...)
Definition MiddleWare.cpp:1924
void bToUhandle(const char *rtmsg)
Definition MiddleWare.cpp:1781
bool in_order
Definition MiddleWare.cpp:614
NonRtObjStore obj_store
Definition MiddleWare.cpp:677
PresetsStore presetsstore
Definition MiddleWare.cpp:722
void * ui
Definition MiddleWare.cpp:696
Master * master
Definition MiddleWare.cpp:681
bool forward
Definition MiddleWare.cpp:612
void loadXsz(const char *filename, rtosc::RtData &d)
Definition MiddleWare.cpp:559
Config *const config
Definition MiddleWare.cpp:418
void savePart(int npart, const char *filename)
Definition MiddleWare.cpp:434
void doReadOnlyOp(std::function< void()> read_only_fn)
Definition MiddleWare.cpp:1574
void loadClearPart(int npart)
Definition MiddleWare.cpp:514
std::atomic_int actual_load[NUM_MIDI_PARTS]
Definition MiddleWare.cpp:699
void heartBeat(Master *m)
Definition MiddleWare.cpp:1618
MultiQueue multi_thread_source
Definition MiddleWare.cpp:712
string last_url
Definition MiddleWare.cpp:716
void loadPendingBank(int par, Bank &bank)
Definition MiddleWare.cpp:445
void * idle_ptr
Definition MiddleWare.cpp:691
bool offline
Definition MiddleWare.cpp:427
void loadMaster(const char *filename)
Definition MiddleWare.cpp:536
ParamStore kits
Definition MiddleWare.cpp:687
void loadKbm(const char *filename, rtosc::RtData &d)
Definition MiddleWare.cpp:590
CallbackRepeater autoSave
Definition MiddleWare.cpp:724
void broadcastToRemote(const char *msg)
Definition MiddleWare.cpp:1734
cb_t cb
Definition MiddleWare.cpp:694
void loadPart(int npart, const char *filename, Master *master)
Definition MiddleWare.cpp:452
void loadScl(const char *filename, rtosc::RtData &d)
Definition MiddleWare.cpp:579
int64_t start_time_nsec
Definition MiddleWare.cpp:426
MiddleWareImpl(MiddleWare *mw, SYNTH_T synth, Config *config, int preferred_port)
Definition MiddleWare.cpp:1470
void saveXsz(const char *filename, rtosc::RtData &d)
Definition MiddleWare.cpp:570
rtosc::UndoHistory undo
Definition MiddleWare.cpp:702
int64_t start_time_sec
Definition MiddleWare.cpp:425
void sendToCurrentRemote(const char *msg)
Definition MiddleWare.cpp:663
lo_server server
Definition MiddleWare.cpp:715
std::atomic_int pending_load[NUM_MIDI_PARTS]
Definition MiddleWare.cpp:698
void handleMsg(const char *msg)
Definition MiddleWare.cpp:1885
void currentUrl(string addr)
Definition MiddleWare.cpp:654
bool doReadOnlyOpNormal(std::function< void()> read_only_fn, bool canfail=false)
Definition MiddleWare.cpp:1687
bool recording_undo
Definition MiddleWare.cpp:616
bool broadcast
Definition MiddleWare.cpp:610
~MiddleWareImpl(void)
Definition MiddleWare.cpp:1538
Fl_Osc_Interface * osc
Definition MiddleWare.cpp:685
void sendToRemote(const char *msg, std::string dest)
Definition MiddleWare.cpp:1747
void updateResources(Master *m)
Definition MiddleWare.cpp:601
void doReadOnlyOpPlugin(std::function< void()> read_only_fn)
Definition MiddleWare.cpp:1668
MiddleWare * parent
Definition MiddleWare.cpp:414
void tick(void)
Definition MiddleWare.cpp:619
rtosc::ThreadLink * bToU
Definition MiddleWare.cpp:708
string curr_url
Definition MiddleWare.cpp:716
rtosc::ThreadLink * uToB
Definition MiddleWare.cpp:709
void(* idle)(void *)
Definition MiddleWare.cpp:690
void kitEnable(const char *msg)
Definition MiddleWare.cpp:1822
Definition MultiPseudoStack.h:51
Definition MiddleWare.cpp:732
virtual void chain(const char *path, const char *args,...) override
Definition MiddleWare.cpp:796
virtual void chain(const char *msg) override
Bypass message to some kind of backend if the message can not be handled.
Definition MiddleWare.cpp:789
bool forwarded
Definition MiddleWare.cpp:811
virtual void reply(const char *msg) override
Reply if information has been requested.
Definition MiddleWare.cpp:783
char * buffer
Definition MiddleWare.cpp:813
MiddleWareImpl * mwi
Definition MiddleWare.cpp:814
MwDataObj(MiddleWareImpl *mwi_)
Definition MiddleWare.cpp:734
~MwDataObj(void)
Definition MiddleWare.cpp:746
virtual void reply(const char *path, const char *args,...) override
Definition MiddleWare.cpp:757
virtual void replyArray(const char *path, const char *args, rtosc_arg_t *argd) override
Definition MiddleWare.cpp:772
virtual void forward(const char *) override
Definition MiddleWare.cpp:806
static const rtosc::Ports non_realtime_ports
Definition OscilGen.h:111
struct zyncarla::Part::Kit kit[NUM_KIT_ITEMS]
Definition PresetsStore.h:24
Definition SUBnoteParameters.h:24
Definition XMLwrapper.h:47
int saveXMLfile(const std::string &filename, int compression) const
Definition XMLwrapper.cpp:190
int loadXMLfile(const std::string &filename)
Definition XMLwrapper.cpp:312
* e
Definition inflate.c:1404
unsigned * m
Definition inflate.c:1559
struct huft * t
Definition inflate.c:943
register unsigned k
Definition inflate.c:946
register unsigned j
Definition inflate.c:1576
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned d
Definition inflate.c:940
struct huft * u[BMAX]
Definition inflate.c:1583
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned x[BMAX+1]
Definition inflate.c:1586
static char filename[]
Definition features.c:5
char * argv[]
Definition unzip.c:738
static const char * name
Definition pugl.h:1582
lo_server server
Definition guimain.cpp:28
int int32_t
Definition mid.cpp:97
unsigned int uint32_t
Definition mid.cpp:100
static char ** files
Definition misc.c:28
const char * msg
Definition missing_descriptor.c:20
Fl_Osc_Interface * genOscInterface(zyncarla::MiddleWare *)
Definition ConnectionDummy.cpp:32
void raiseUi(ui_handle_t, const char *)
Definition ConnectionDummy.cpp:22
@ undo
Definition juce_ApplicationCommandID.h:83
Definition juce_Uuid.h:141
std::string getSink(void)
Definition zynaddsubfx-src.cpp:578
rtosc::Ports ports
Definition MiddleWare.cpp:383
std::set< std::string > getSinks(void)
Definition zynaddsubfx-src.cpp:576
std::set< std::string > getSources(void)
Definition zynaddsubfx-src.cpp:575
bool setSink(std::string)
Definition zynaddsubfx-src.cpp:574
bool setSource(std::string)
Definition zynaddsubfx-src.cpp:573
std::string getSource(void)
Definition zynaddsubfx-src.cpp:577
Definition zynaddsubfx-src.cpp:569
static rtosc::Ports middlewareReplyPorts
Definition MiddleWare.cpp:1419
std::vector< T > keys(const std::map< T, V > &m)
Definition MiddleWare.cpp:170
static const rtosc::Ports ports
Definition Config.cpp:43
static int extractInt(const char *msg)
Definition MiddleWare.cpp:861
static void liblo_error_cb(int i, const char *m, const char *loc)
Definition MiddleWare.cpp:73
char * rtosc_splat(const char *path, std::set< std::string > v)
Definition Util.cpp:234
const AbsTime * time
Definition PADnoteParameters.h:189
void deallocate(const char *str, void *v)
Definition MiddleWare.cpp:182
std::string to_s(T x)
Definition Util.h:67
int Pexitprogram
Definition MiddleWare.cpp:64
static int handler_function(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data)
Definition MiddleWare.cpp:136
static const char * chomp(const char *msg)
Definition MiddleWare.cpp:870
static rtosc::Ports middwareSnoopPorts
Definition MiddleWare.cpp:1118
const Ports bankPorts
Definition MiddleWare.cpp:892
const SYNTH_T & synth
Definition PADnoteParameters.h:210
std::complex< fftw_real > fft_t
Definition globals.h:75
void os_usleep(long length)
Definition Util.cpp:152
const rtosc::Ports real_preset_ports
Definition PresetExtractor.cpp:40
void path_search(const char *m, const char *url)
Definition MiddleWare.cpp:78
void(* cb_t)(void *, const char *)
Definition MiddleWare.cpp:166
void preparePadSynth(string path, PADnoteParameters *p, rtosc::RtData &d)
Definition MiddleWare.cpp:206
static std::vector< std::string > getFiles(const char *folder, bool finddir)
Definition MiddleWare.cpp:817
#define N
Definition nseel-cfunc.c:36
Master * master
Definition main.cpp:66
png_uint_32 length
Definition png.c:2247
#define STRINGIFY(a)
Definition port-sugar.h:48
size_t rtosc_message_length(const char *msg, size_t len)
Definition rtosc.c:848
size_t rtosc_vmessage(char *buffer, size_t len, const char *address, const char *arguments, va_list ap)
Definition rtosc.c:497
unsigned rtosc_narguments(const char *msg)
Definition rtosc.c:19
size_t rtosc_amessage(char *buffer, size_t len, const char *address, const char *arguments, const rtosc_arg_t *args)
Definition rtosc.c:515
const char * rtosc_argument_string(const char *msg)
Definition rtosc.c:11
size_t rtosc_message(char *buffer, size_t len, const char *address, const char *arguments,...)
Definition rtosc.c:161
rtosc_arg_t rtosc_argument(const char *msg, unsigned idx)
Definition rtosc.c:732
static char * collapsePath(char *p)
Definition ports.cpp:1401
data object for the dispatch routine
Definition ports.h:55
char * loc
Definition ports.h:63
size_t loc_size
Definition ports.h:64
void * obj
runtime object to dispatch this object to
Definition ports.h:65
uint8_t * data
Definition rtosc.h:43
int32_t len
Definition rtosc.h:42
Definition CallbackRepeater.h:19
Definition Microtonal.h:29
Definition MiddleWare.cpp:245
bool has(std::string loc)
Definition MiddleWare.cpp:299
void * get(std::string loc)
Definition MiddleWare.cpp:304
void extractPAD(PADnoteParameters *padpars, int i, int j)
Definition MiddleWare.cpp:280
void extractAD(ADnoteParameters *adpars, int i, int j)
Definition MiddleWare.cpp:264
void clear(void)
Definition MiddleWare.cpp:294
void handlePad(const char *msg, rtosc::RtData &d)
Definition MiddleWare.cpp:317
std::map< std::string, void * > objmap
Definition MiddleWare.cpp:246
void extractMaster(Master *master)
Definition MiddleWare.cpp:248
void handleOscil(const char *msg, rtosc::RtData &d)
Definition MiddleWare.cpp:309
void extractPart(Part *part, int i)
Definition MiddleWare.cpp:255
Definition MiddleWare.cpp:355
PADnoteParameters * pad[NUM_MIDI_PARTS][NUM_KIT_ITEMS]
Definition MiddleWare.cpp:375
ADnoteParameters * add[NUM_MIDI_PARTS][NUM_KIT_ITEMS]
Definition MiddleWare.cpp:373
void extractPart(Part *part, int i)
Definition MiddleWare.cpp:363
SUBnoteParameters * sub[NUM_MIDI_PARTS][NUM_KIT_ITEMS]
Definition MiddleWare.cpp:374
ParamStore(void)
Definition MiddleWare.cpp:356
Definition Microtonal.h:52
const char const char const char const char char * fn
Definition swell-functions.h:168
int32_t i
Definition rtosc.h:47
rtosc_blob_t b
Definition rtosc.h:55
const char * s
Definition rtosc.h:54
uch * p
Definition crypt.c:594
memcpy(hh, h, RAND_HEAD_LEN)
#define dirent
Definition unix.c:70
closedir((DIR *) G.wild_dir)
#define void
Definition unzip.h:396
#define S_ISDIR(m)
Definition unzpriv.h:1322
struct zdirent * file
Definition win32.c:1500
int argc
Definition zipinfo.c:455
mm
Definition zipinfo.c:2291