static void list2send_list(t_list2send *x, t_symbol *s, int ac, t_atom *av) { if((ac >= 2) && (IS_A_FLOAT(av,0))) { int identifier_index = (int)atom_getintarg(0, ac, av); if(identifier_index < x->x_max) { if(x->x_snd_able[identifier_index]) { t_symbol *sender = x->x_send_entries[identifier_index]; if(sender->s_thing) { if(ac == 2) { if(IS_A_FLOAT(av, 1)) pd_float(sender->s_thing, atom_getfloatarg(1, ac, av)); else if(IS_A_SYMBOL(av, 1)) pd_symbol(sender->s_thing, atom_getsymbolarg(1, ac, av)); } else pd_list(sender->s_thing, &s_list, ac-1, av+1); } } } } }
static void bindlist_list(t_bindlist *x, t_symbol *s, int argc, t_atom *argv) { t_bindelem *e; for (e = x->b_list; e; e = e->e_next) pd_list(e->e_who, s, argc, argv); }
void inmidi_clk(double timing) { static t_float prev = 0; static t_float count = 0; t_float cur,diff; if (pd_this->pd_midiclkin_sym->s_thing) { t_atom at[2]; diff =timing - prev; count++; if (count == 3) { /* 24 count per quoter note */ SETFLOAT(at, 1 ); count = 0; } else SETFLOAT(at, 0); SETFLOAT(at+1, diff); pd_list(pd_this->pd_midiclkin_sym->s_thing, &s_list, 2, at); prev = timing; } }
void radio_output(t_radio *x) { int i; t_atom av[256]; if(x->f_mode) { for(i = 0; i < x->f_nitems; i++) atom_setfloat(av+i, (float)x->f_items[i]); outlet_list(x->f_out, &s_list, x->f_nitems, av); if(ebox_getsender((t_ebox *) x)) pd_list(ebox_getsender((t_ebox *) x), &s_list, x->f_nitems, av); } else { for(i = 0; i < x->f_nitems; i++) { if(x->f_items[i] != 0) { outlet_float(x->f_out, (float)i); if(ebox_getsender((t_ebox *) x)) pd_float(ebox_getsender((t_ebox *) x), (float)i); } } } }
void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv) { t_outconnect *oc; char c; if (&c < stacklimit) outlet_stackerror(x); else for (oc = x->o_connections; oc; oc = oc->oc_next) pd_list(oc->oc_to, s, argc, argv); }
static void dist_list(t_dist *x, t_symbol *s, int argc, t_atom *argv) { int i; for(i = 0; i <= x->x_rec; i++) { if (x->x_sym[i]->s_thing) pd_list(x->x_sym[i]->s_thing, s, argc, argv); } }
static void inlet_list(t_inlet *x, t_symbol *s, int argc, t_atom *argv) { t_atom at; if (x->i_symfrom == &s_list || x->i_symfrom == &s_float || x->i_symfrom == &s_symbol || x->i_symfrom == &s_pointer) typedmess(x->i_dest, x->i_symto, argc, argv); else if (!x->i_symfrom) pd_list(x->i_dest, s, argc, argv); else inlet_wrong(x, &s_list); }
void inmidi_sysex(int portno, int byte) { t_atom at[2]; if (pd_this->pd_sysexin_sym->s_thing) { SETFLOAT(at, byte); SETFLOAT(at+1, portno); pd_list(pd_this->pd_sysexin_sym->s_thing, 0, 2, at); } }
void inmidi_realtimein(int portno, int SysMsg) { if (pd_this->pd_midirealtimein_sym->s_thing) { t_atom at[2]; SETFLOAT(at, portno); SETFLOAT(at+1, SysMsg); pd_list(pd_this->pd_midirealtimein_sym->s_thing, &s_list, 2, at); } }
void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv) { t_outconnect *oc; if(++stackcount >= STACKITER) outlet_stackerror(x); else for (oc = x->o_connections; oc; oc = oc->oc_next) pd_list(oc->oc_to, s, argc, argv); --stackcount; }
static void grab_list(t_grab *x, t_symbol *s, int ac, t_atom *av) { t_pd *grabbed; grab_start(x); while (grabbed = grab_next(x)) { pd_list(grabbed, s, ac, av); grab_restore(x); } }
void inmidi_programchange(int portno, int channel, int value) { if (pd_this->pd_pgmin_sym->s_thing) { t_atom at[2]; SETFLOAT(at, value + 1); SETFLOAT(at+1, (channel + (portno << 4) + 1)); pd_list(pd_this->pd_pgmin_sym->s_thing, &s_list, 2, at); } }
void inmidi_aftertouch(int portno, int channel, int value) { if (pd_this->pd_touchin_sym->s_thing) { t_atom at[2]; SETFLOAT(at, value); SETFLOAT(at+1, (channel + (portno << 4) + 1)); pd_list(pd_this->pd_touchin_sym->s_thing, &s_list, 2, at); } }
void inmidi_pitchbend(int portno, int channel, int value) { if (bendin_sym->s_thing) { t_atom at[2]; SETFLOAT(at, value); SETFLOAT(at+1, (channel + (portno << 4) + 1)); pd_list(bendin_sym->s_thing, &s_list, 2, at); } }
void inmidi_byte(int portno, int byte) { t_atom at[2]; if (midiin_sym->s_thing) { SETFLOAT(at, byte); SETFLOAT(at+1, portno + 1); pd_list(midiin_sym->s_thing, 0, 2, at); } }
void pd_forwardmess(t_pd *x, int argc, t_atom *argv) { if (argc) { t_atomtype t = argv->a_type; if (t == A_SYMBOL) pd_typedmess(x, argv->a_w.w_symbol, argc-1, argv+1); else if (t == A_POINTER) { if (argc == 1) pd_pointer(x, argv->a_w.w_gpointer); else pd_list(x, &s_list, argc, argv); } else if (t == A_FLOAT) { if (argc == 1) pd_float(x, argv->a_w.w_float); else pd_list(x, &s_list, argc, argv); } else bug("pd_forwardmess"); } }
static void bindlist_list(t_bindlist *x, t_symbol *s, int argc, t_atom *argv) { t_bindelem *e; change_bindlist_via_graph = 1; for (e = x->b_list; e; e = e->e_next) if (e->e_who != NULL) pd_list(e->e_who, s, argc, argv); if (change_bindlist_via_graph > 1) bindlist_cleanup(x); change_bindlist_via_graph = 0; }
void inmidi_polyaftertouch(int portno, int channel, int pitch, int value) { if (pd_this->pd_polytouchin_sym->s_thing) { t_atom at[3]; SETFLOAT(at, pitch); SETFLOAT(at+1, value); SETFLOAT(at+2, (channel + (portno << 4) + 1)); pd_list(pd_this->pd_polytouchin_sym->s_thing, &s_list, 3, at); } }
void inmidi_noteon(int portno, int channel, int pitch, int velo) { if (pd_this->pd_notein_sym->s_thing) { t_atom at[3]; SETFLOAT(at, pitch); SETFLOAT(at+1, velo); SETFLOAT(at+2, (channel + (portno << 4) + 1)); pd_list(pd_this->pd_notein_sym->s_thing, &s_list, 3, at); } }
void inmidi_controlchange(int portno, int channel, int ctlnumber, int value) { if (pd_this->pd_ctlin_sym->s_thing) { t_atom at[3]; SETFLOAT(at, ctlnumber); SETFLOAT(at+1, value); SETFLOAT(at+2, (channel + (portno << 4) + 1)); pd_list(pd_this->pd_ctlin_sym->s_thing, &s_list, 3, at); } }
void matrixctrl_output(t_matrixctrl *x, int i, int j) { t_atom av[3]; if(i < x->f_size.x && j < x->f_size.y) { atom_setfloat(av, i); atom_setfloat(av+1, j); atom_setfloat(av+2, x->f_values[j * (long)x->f_size.x + i]); } outlet_list(x->f_out_cell, &s_list, 3, av); if(ebox_getsender((t_ebox *) x)) pd_list(ebox_getsender((t_ebox *) x), &s_list, 3, av);}
int libpd_list(const char *recv, int n, t_atom *v) { t_pd *dest; sys_lock(); dest = get_object(recv); if (dest == NULL) { sys_unlock(); return -1; } pd_list(dest, &s_list, n, v); sys_unlock(); return 0; }
void hoa_space_output(t_hoa_space *x) { for(int i = 0; i < x->f_number_of_microphones; i++) atom_setfloat(x->f_tempory_values+i, x->f_microphonesValues[i]); outlet_list(x->f_out, 0L, x->f_number_of_microphones, x->f_tempory_values); ebox_invalidate_layer((t_ebox *)x, gensym("harmonics_layer")); ebox_invalidate_layer((t_ebox *)x, gensym("microphones_layer")); ebox_invalidate_layer((t_ebox *)x, gensym("center_layer")); ebox_redraw((t_ebox *)x); if(ebox_getsender((t_ebox *) x)) pd_list(ebox_getsender((t_ebox *) x), &s_list, x->f_number_of_microphones, x->f_tempory_values); }
static void inlet_list(t_inlet *x, t_symbol *s, int argc, t_atom *argv) { if (x->i_symfrom == &s_list || x->i_symfrom == &s_float || x->i_symfrom == &s_symbol || x->i_symfrom == &s_pointer) typedmess(x->i_dest, x->i_symto, argc, argv); else if (!x->i_symfrom) pd_list(x->i_dest, s, argc, argv); else if (!argc) inlet_bang(x); else if (argc==1 && argv->a_type == A_FLOAT) inlet_float(x, atom_getfloat(argv)); else if (argc==1 && argv->a_type == A_SYMBOL) inlet_symbol(x, atom_getsymbol(argv)); else inlet_wrong(x, &s_list); }
static void plane_output(t_plane *x) { t_atom argv[2]; t_pd* send = ebox_getsender((t_ebox *) x); const float xval = ebox_parameter_getvalue((t_ebox *)x, 1); const float yval = ebox_parameter_getvalue((t_ebox *)x, 2); atom_setfloat(argv, xval); atom_setfloat(argv+1, yval); outlet_list(x->f_out_x, &s_list, 2, argv); outlet_float(x->f_out_y, yval); if(send) { pd_list(send, &s_list, 2, argv); } }
void plane_output(t_plane *x) { t_atom argv[2]; if(ebox_isdrawable((t_ebox *)x)) { outlet_float(x->f_out_x, x->f_position.x); outlet_float(x->f_out_y, x->f_position.y); if(ebox_getsender((t_ebox *) x)) { atom_setfloat(argv, x->f_position.x); atom_setfloat(argv+1, x->f_position.y); pd_list(ebox_getsender((t_ebox *) x), &s_list, 2, argv); } } }
static void breakpoints_dump(t_breakpoints* e) { t_atom argv[50]; int argc= 0; t_atom* a = argv; int i; SETFLOAT(a,e->finalvalues[0]);argc++; for (i=1;i <= e->last_state;i++) { SETFLOAT(argv+argc,e->duration[i] - e->duration[i-1]); argc++; SETFLOAT(argv+argc,e->finalvalues[i]); argc++; } outlet_list(e->out2,&s_list,argc,(t_atom*)&argv); if (e->d_sym != &s_) pd_list(e->d_sym->s_thing, &s_list, argc, argv); //pd_float(x->s_sym->s_thing, val); //EXTERN void pd_float(t_pd *x, t_float f); //EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv); //EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv); ///////////////////////////////////////////////////// }
static void send_list(t_send *x, t_symbol *s, int argc, t_atom *argv) { if (x->x_sym->s_thing) pd_list(x->x_sym->s_thing, s, argc, argv); }
static void eproxy_list(t_eproxy *x, t_symbol* s, int argc, t_atom* argv) { t_eobj *z = (t_eobj *)x->p_owner; z->o_current_proxy = x->p_index; pd_list((t_pd *)x->p_owner, s, argc, argv); }
int pd_extern_sched(char *flags) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int i, j, rate, advance, callback, chin, chout, fill = 0, c, blocksize; t_binbuf *b = binbuf_new(); sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback, &blocksize); chin = (naudioindev < 1 ? 0 : chindev[0]); chout = (naudiooutdev < 1 ? 0 : choutdev[0]); /* fprintf(stderr, "Pd plug-in scheduler called, chans %d %d, sr %d\n", chin, chout, (int)rate); */ sys_setchsr(chin, chout, rate); sys_audioapi = API_NONE; while ((c = getchar()) != EOF) { if (c == ';') { int n; t_atom *ap; binbuf_text(b, inbuf, fill); n = binbuf_getnatom(b); ap = binbuf_getvec(b); fill = 0; if (n > 0 && ap[0].a_type == A_FLOAT) { /* a list -- take it as incoming signals. */ int chan, nchan = n/DEFDACBLKSIZE; t_sample *fp; for (i = chan = 0, fp = sys_soundin; chan < nchan; chan++) for (j = 0; j < DEFDACBLKSIZE; j++) *fp++ = atom_getfloat(ap++); for (; chan < chin; chan++) for (j = 0; j < DEFDACBLKSIZE; j++) *fp++ = 0; sched_tick(sys_time+sys_time_per_dsp_tick); sys_pollgui(); #if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__GNU__) pollwatchdog(); #endif printf(";\n"); for (i = chout*DEFDACBLKSIZE, fp = sys_soundout; i--; fp++) { printf("%g\n", *fp); *fp = 0; } printf(";\n"); fflush(stdout); } else if (n > 1 && ap[0].a_type == A_SYMBOL) { t_pd *whom = ap[0].a_w.w_symbol->s_thing; if (!whom) error("%s: no such object", ap[0].a_w.w_symbol->s_name); else if (ap[1].a_type == A_SYMBOL) typedmess(whom, ap[1].a_w.w_symbol, n-2, ap+2); else pd_list(whom, 0, n-1, ap+1); } } else if (fill < BUFSIZE) inbuf[fill++] = c; else if (fill == BUFSIZE) fprintf(stderr, "pd-extern: input buffer overflow\n"); } return (0); }