diff options
-rw-r--r-- | dssi/RELEASE | 9 | ||||
-rw-r--r-- | dssi/doc/help-dssi.pd | 203 | ||||
-rw-r--r-- | dssi/src/dssi~.c | 66 | ||||
-rw-r--r-- | dssi/src/dssi~.h | 2 |
4 files changed, 165 insertions, 115 deletions
diff --git a/dssi/RELEASE b/dssi/RELEASE index 8c1dec6..948c9ea 100644 --- a/dssi/RELEASE +++ b/dssi/RELEASE @@ -1,3 +1,12 @@ + +0.93 + +- Fixed control in bug and a few others + +0.91 + +-Fixed bugs created by adding LADSPA support + 0.89 -Added support for LADSPA plugins mostly using code from plugin~ diff --git a/dssi/doc/help-dssi.pd b/dssi/doc/help-dssi.pd index 821779f..b4e5ba3 100644 --- a/dssi/doc/help-dssi.pd +++ b/dssi/doc/help-dssi.pd @@ -1,5 +1,5 @@ -#N canvas 65 172 1411 654 10; -#X obj 1177 528 catch~ mix; +#N canvas 186 66 1411 654 10; +#X obj 1268 524 catch~ mix; #X text 602 15 dssi~ - a DSSI host for Pure Data --------------------------------- ; #X obj 7 63 cnv 15 1400 300 empty empty dssi~_instance_1 20 12 0 14 @@ -10,16 +10,8 @@ #X msg 443 122 0; #X floatatom 300 185 5 0 0 0 - - -; #X floatatom 443 165 5 0 0 0 - - -; -#X obj 345 295 dssi~ /usr/local/lib/dssi/hexter.so 2; -#X msg 1214 136 show 2; -#X obj 598 274 list; -#X msg 1130 137 hide; -#X msg 1171 136 show; -#X msg 915 162 configure GLOBAL:polyphony 10; #X msg 72 256 n \$1; #X obj 110 256 r chan; -#X msg 731 140 load TX-SYX/TFI2.SYX 2; -#X msg 732 160 load TX-SYX/TFI1.SYX 1; #X obj 51 231 list prepend n 2; #X obj 300 226 list prepend c 2; #X obj 51 208 pack f f; @@ -27,19 +19,19 @@ #X msg 78 147 80; #X msg 300 205 7 \$1; #X obj 441 247 list prepend b 2 0; -#X obj 344 322 throw~ mix; +#X obj 441 324 throw~ mix; #X obj 119 148 hsl 128 15 60 80 0 0 empty empty empty -2 -6 0 8 -262144 --1 -1 9200 1; +-1 -1 0 1; #X obj 167 206 select -1; #X obj 356 250 r chan; #X obj 303 146 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144 -1 -1 0 1; #X obj 446 144 hsl 128 15 -63 63 0 1 empty empty empty -2 -6 0 8 -262144 -1 -1 6350 1; -#X obj 598 254 r dssi1-config; -#X obj 730 185 s dssi1-config; -#X obj 916 184 s dssi1-config; -#X obj 1129 186 s dssi1-config; +#X obj 600 291 r dssi1-config; +#X obj 708 179 s dssi1-config; +#X obj 912 178 s dssi1-config; +#X obj 1194 180 s dssi1-config; #X floatatom 595 142 5 0 0 0 - - -; #X msg 318 250 c \$1; #X obj 528 268 r chan; @@ -52,90 +44,129 @@ #X text 585 97 --program change--; #X text 105 96 -----notes-----; #X text 718 97 --sysex patch/bank load--; -#X msg 914 140 configure polyphony 10 2; -#X obj 5 371 cnv 15 400 300 empty empty dssi~_instance_2 20 12 0 14 +#X obj 5 371 cnv 15 600 300 empty empty dssi~_instance_2 20 12 0 14 -225280 -66577 0; -#X obj 38 540 dssi~ /usr/lib/dssi/less_trivial_synth.so; -#X msg 319 495 show; -#X obj 321 519 list; -#X msg 357 496 hide; -#X obj 39 512 list prepend n 1; -#X msg 40 435 80; -#X obj 37 561 throw~ mix; -#X obj 39 492 pack f f; -#X msg 88 436 60; -#X text 563 480 Usage: [dssi~ <path to plugin> <number of plugin instances>] -; +#X obj 435 620 throw~ mix; #X obj 474 122 loadbang; -#X text 806 212 LAST ARGUMENT GIVES PLUGIN INSTANCE TO BE CONFIGURED -NO LAST ARGUMENT=(ALL INSTANCES); #X msg 613 221 p \$1 0; #X text 940 96 --configuration--; #X text 947 113 (key value pair); #X text 867 279 Select channel (hexter instance) for note \, bend \, program and control data:; #X obj 595 199 list prepend p 2 0; -#X obj 39 461 makenote 100 1000; #X text 1126 98 --show/hide GUI--; -#X obj 1175 551 dssi/output~; +#X obj 1266 547 dssi/output~; #X obj 49 186 makenote 80 10000; #X msg 1282 136 reset; #X msg 1340 136 reset 1; #X text 1286 98 -reset plugin-; #X text 1286 115 (all notes off); -#X connect 0 0 69 0; -#X connect 0 0 69 1; +#X obj 229 315 print; +#X msg 78 305 listplugins; +#X msg 101 329 info; +#X msg 709 134 dssi load TX-SYX/TFI2.SYX 2; +#X msg 710 154 dssi load TX-SYX/TFI1.SYX 1; +#X msg 910 134 dssi configure polyphony 10 2; +#X msg 911 156 dssi configure GLOBAL:polyphony 10; +#X msg 1134 114 dssi hide; +#X msg 1135 135 dssi show; +#X msg 1206 114 dssi show 2; +#X text 806 212 LAST ARGUMENT GIVES PLUGIN INSTANCE TO BE CONFIGURED +\, NO LAST ARGUMENT=(ALL INSTANCES); +#X obj 388 620 print; +#X text 738 458 Usage: [dssi~ <[path to libary:plugin name] or [plugin +name]> <number of plugin instances>]; +#X obj 229 291 dssi~ /usr/local/lib/dssi/hexter.so:hexter 2; +#X msg 193 342 control #1 445; +#X obj 451 394 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 7900 1; +#X obj 378 582 dssi~ sine_faaa 6 -------------; +#X obj 284 438 expr $f1 \; $f1*2 \; $f1*3 \; $f1*4 \; $f1*5 \; $f1*6 +; +#X obj 285 397 loadbang; +#X msg 285 419 220; +#X obj 471 394 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 6700 1; +#X obj 491 394 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 6700 1; +#X obj 511 394 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 6100 1; +#X obj 531 394 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 551 394 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X text 591 561 <- Audio rate control inputs can be audio or control +values; +#X text 14 491 Experimental - use with caution!; +#X msg 54 509 plug sine_faac 6; +#X connect 0 0 49 0; +#X connect 0 0 49 1; #X connect 3 0 5 0; #X connect 4 0 3 0; -#X connect 5 0 25 0; -#X connect 6 0 31 0; -#X connect 7 0 24 0; +#X connect 5 0 17 0; +#X connect 6 0 23 0; +#X connect 7 0 16 0; #X connect 8 0 4 0; -#X connect 9 0 26 0; -#X connect 9 1 26 0; -#X connect 10 0 35 0; -#X connect 11 0 9 1; -#X connect 12 0 35 0; -#X connect 13 0 35 0; -#X connect 14 0 34 0; -#X connect 15 0 19 1; -#X connect 16 0 15 0; -#X connect 17 0 33 0; -#X connect 18 0 33 0; -#X connect 19 0 9 0; -#X connect 20 0 9 0; -#X connect 21 0 19 0; -#X connect 22 0 70 0; -#X connect 23 0 70 0; -#X connect 24 0 20 0; -#X connect 25 0 9 0; -#X connect 27 0 70 0; -#X connect 28 1 70 0; -#X connect 29 0 37 0; -#X connect 30 0 7 0; -#X connect 31 0 8 0; -#X connect 32 0 11 0; -#X connect 36 0 66 0; -#X connect 37 0 20 1; -#X connect 38 0 39 0; -#X connect 39 0 25 1; -#X connect 41 0 40 0; -#X connect 43 0 62 0; -#X connect 48 0 34 0; -#X connect 50 0 56 0; -#X connect 51 0 52 0; -#X connect 52 0 50 1; -#X connect 53 0 52 0; -#X connect 54 0 50 0; -#X connect 55 0 67 0; -#X connect 57 0 54 0; -#X connect 58 0 67 0; -#X connect 60 0 6 0; -#X connect 62 0 66 1; -#X connect 66 0 9 0; -#X connect 67 0 57 0; -#X connect 67 1 57 1; -#X connect 70 0 21 0; -#X connect 70 1 21 1; -#X connect 71 0 35 0; -#X connect 72 0 35 0; +#X connect 9 0 11 1; +#X connect 10 0 9 0; +#X connect 11 0 68 0; +#X connect 12 0 68 0; +#X connect 13 0 11 0; +#X connect 14 0 50 0; +#X connect 15 0 50 0; +#X connect 16 0 12 0; +#X connect 17 0 68 0; +#X connect 19 0 50 0; +#X connect 20 1 50 0; +#X connect 21 0 29 0; +#X connect 22 0 7 0; +#X connect 23 0 8 0; +#X connect 24 0 68 0; +#X connect 28 0 47 0; +#X connect 29 0 12 1; +#X connect 30 0 31 0; +#X connect 31 0 17 1; +#X connect 33 0 32 0; +#X connect 35 0 43 0; +#X connect 42 0 6 0; +#X connect 43 0 47 1; +#X connect 47 0 68 0; +#X connect 50 0 13 0; +#X connect 50 1 13 1; +#X connect 51 0 27 0; +#X connect 52 0 27 0; +#X connect 56 0 68 0; +#X connect 57 0 68 0; +#X connect 58 0 25 0; +#X connect 59 0 25 0; +#X connect 60 0 26 0; +#X connect 61 0 26 0; +#X connect 62 0 27 0; +#X connect 63 0 27 0; +#X connect 64 0 27 0; +#X connect 68 0 55 0; +#X connect 68 1 18 0; +#X connect 68 2 18 0; +#X connect 69 0 68 0; +#X connect 70 0 71 2; +#X connect 71 0 66 0; +#X connect 71 1 41 0; +#X connect 71 2 41 0; +#X connect 71 3 41 0; +#X connect 71 4 41 0; +#X connect 71 5 41 0; +#X connect 71 6 41 0; +#X connect 72 0 71 1; +#X connect 72 1 71 3; +#X connect 72 2 71 5; +#X connect 72 3 71 7; +#X connect 72 4 71 9; +#X connect 72 5 71 11; +#X connect 73 0 74 0; +#X connect 74 0 72 0; +#X connect 75 0 71 4; +#X connect 76 0 71 6; +#X connect 77 0 71 8; +#X connect 78 0 71 10; +#X connect 79 0 71 12; +#X connect 82 0 71 0; diff --git a/dssi/src/dssi~.c b/dssi/src/dssi~.c index 619e773..9dd6af4 100644 --- a/dssi/src/dssi~.c +++ b/dssi/src/dssi~.c @@ -341,8 +341,9 @@ static void dssi_tilde_connect_ports(t_dssi_tilde *x, t_int instance){ } -static void dssi_tilde_activate(t_dssi_tilde *x, t_int instance){ +static void dssi_tilde_activate_plugin(t_dssi_tilde *x, t_float instance_f){ + t_int instance = (t_int)instance_f; if(x->descriptor->LADSPA_Plugin->activate) x->descriptor->LADSPA_Plugin->activate(x->instanceHandles[instance]); #if DEBUG @@ -350,6 +351,16 @@ static void dssi_tilde_activate(t_dssi_tilde *x, t_int instance){ #endif } +static void dssi_tilde_deactivate_plugin(t_dssi_tilde *x, t_float instance_f){ + + t_int instance = (t_int)instance_f; + if(x->descriptor->LADSPA_Plugin->deactivate) + x->descriptor->LADSPA_Plugin->deactivate(x->instanceHandles[instance]); +#if DEBUG + post("plugin deactivated!"); +#endif +} + static void osc_error(int num, const char *msg, const char *where) { post("dssi~: osc error %d in path %s: %s\n",num, where, msg); @@ -602,16 +613,14 @@ static void dssi_tilde_control (t_dssi_tilde *x, /* Change the value of a named control port of the plug-in */ { unsigned parm_num = 0; - t_int instance = (t_int)instance_f; + t_int instance = (t_int)instance_f - 1; int n_instances = x->n_instances; if (instance > x->n_instances || instance < 0){ - post("dssi~: control: invalid instance number"); + post("dssi~: control: invalid instance number %d", instance); return; } - instance -= 1; - #if DEBUG post("Received LADSPA control data for instance %d", instance); #endif @@ -645,22 +654,24 @@ static void dssi_tilde_control (t_dssi_tilde *x, static void dssi_tilde_info (t_dssi_tilde *x){ unsigned int i; - t_atom argv[6]; + t_atom argv[7]; for(i = 0; i < x->descriptor->LADSPA_Plugin->PortCount; i++){ memcpy(&argv[0], &x->port_info[i].type, sizeof(t_atom)); memcpy(&argv[1], &x->port_info[i].data_type, sizeof(t_atom)); - memcpy(&argv[2], &x->port_info[i].name, + memcpy(&argv[3], &x->port_info[i].name, sizeof(t_atom)); - memcpy(&argv[3], &x->port_info[i].lower_bound, + memcpy(&argv[4], &x->port_info[i].lower_bound, sizeof(t_atom)); - memcpy(&argv[4], &x->port_info[i].upper_bound, + memcpy(&argv[5], &x->port_info[i].upper_bound, sizeof(t_atom)); - memcpy(&argv[5], &x->port_info[i].p_default, + memcpy(&argv[6], &x->port_info[i].p_default, sizeof(t_atom)); - outlet_anything (x->control_outlet, gensym ("port"), 6, argv); + argv[2].a_type = A_FLOAT; + argv[2].a_w.w_float = (t_float)i - 1; + outlet_anything (x->control_outlet, gensym ("port"), 7, argv); } } @@ -750,16 +761,18 @@ static int osc_debug_handler(const char *path, const char *types, lo_arg **argv, static void dssi_tilde_get_current_program(t_dssi_tilde *x, int instance){ int i; - t_atom argv[2]; + t_atom argv[3]; argv[0].a_type = A_FLOAT; - argv[1].a_type = A_SYMBOL; + argv[1].a_type = A_FLOAT; + argv[2].a_type = A_SYMBOL; i = x->instances[instance].currentProgram; - argv[0].a_w.w_float = x->instances[instance].pluginPrograms[i].Program; - argv[1].a_w.w_symbol = + argv[0].a_w.w_float = (t_float)instance; + argv[1].a_w.w_float = x->instances[instance].pluginPrograms[i].Program; + argv[2].a_w.w_symbol = gensym ((char*)x->instances[instance].pluginPrograms[i].Name); - outlet_anything (x->control_outlet, gensym ("program"), 2, argv); + outlet_anything (x->control_outlet, gensym ("program"), 3, argv); } @@ -1405,7 +1418,7 @@ static t_int dssi_tilde_configure_buffer_free(t_dssi_tilde *x){ static t_int dssi_tilde_reset(t_dssi_tilde *x, t_float instance_f){ - t_int instance = (t_int)instance_f; + t_int instance = (t_int)instance_f - 1; if (instance == -1){ for(instance = 0; instance < x->n_instances; instance++) { if (x->descriptor->LADSPA_Plugin->deactivate && @@ -1927,10 +1940,11 @@ static void dssi_tilde_quit_plugin(t_dssi_tilde *x){ } /* no -- see comment in osc_exiting_handler */ /* if (!instances[i].inactive) { */ - if (x->descriptor->LADSPA_Plugin->deactivate) { +/* if (x->descriptor->LADSPA_Plugin->deactivate) { x->descriptor->LADSPA_Plugin->deactivate (x->instanceHandles[instance]); - } + }*/ + dssi_tilde_deactivate_plugin(x, (t_float)instance); /* } */ if (x->descriptor->LADSPA_Plugin && x->descriptor->LADSPA_Plugin->cleanup) { @@ -2170,7 +2184,7 @@ static void *dssi_tilde_load_plugin(t_dssi_tilde *x, t_int argc, t_atom *argv){ for(i = 0;i < x->n_instances; i++) dssi_tilde_connect_ports(x, i); for(i = 0;i < x->n_instances; i++) - dssi_tilde_activate(x, i); + dssi_tilde_activate_plugin(x, (t_float)i); if(x->is_DSSI){ for(i = 0;i < x->n_instances; i++) dssi_tilde_osc_setup(x, i); @@ -2233,12 +2247,6 @@ static void dssi_tilde_plug_plugin(t_dssi_tilde *x, t_symbol *s, int argc, t_ato dssi_tilde_load_plugin(x, argc, argv); } -static void dssi_tilde_activate_plugin(t_dssi_tilde *x){ - - x->dsp = 1; - -} - static void *dssi_tilde_new(t_symbol *s, t_int argc, t_atom *argv){ t_dssi_tilde *x = (t_dssi_tilde *)pd_new(dssi_tilde_class); @@ -2288,8 +2296,10 @@ void dssi_tilde_setup(void) { gensym ("reset"), A_DEFFLOAT, 0); class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_plug_plugin, gensym ("plug"),A_GIMME,0); - class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_activate_plugin, - gensym ("active"),A_DEFFLOAT,0); +/* class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_activate_plugin, + gensym ("activate"),A_DEFFLOAT - 1,0); + class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_deactivate_plugin, + gensym ("deactivate"),A_DEFFLOAT - 1,0);*/ class_sethelpsymbol(dssi_tilde_class, gensym("help-dssi")); CLASS_MAINSIGNALIN(dssi_tilde_class, t_dssi_tilde, f); } diff --git a/dssi/src/dssi~.h b/dssi/src/dssi~.h index 0a85248..9a4084e 100644 --- a/dssi/src/dssi~.h +++ b/dssi/src/dssi~.h @@ -41,7 +41,7 @@ #define DX7_DUMP_SIZE_BULK 4096+8 -#define VERSION 0.92 +#define VERSION 0.93 #define EVENT_BUFSIZE 1024 #define OSC_BASE_MAX 1024 #define TYPE_STRING_SIZE 20 /* Max size of event type string (must be two more bytes than needed) */ |