int track_proxy_getrow(t_track_proxy *x, t_symbol *pat, t_floatarg rownum) { t_int r = (t_int) rownum; Pattern *pattern = x->track->getPattern(pat->s_name); if(!pattern) { pd_error(x, "getrow: no such pattern: %s", pat->s_name); return -2; } SETSYMBOL(&result_argv[0], gensym("patternrow")); SETSYMBOL(&result_argv[1], pat); SETFLOAT(&result_argv[2], (t_float) r); result_argc = 3; for(unsigned int i = 0; i < pattern->getColumns(); i++) { if(result_argc >= MAX_RESULT_SIZE) { pd_error(x, "getrow: result too long"); return -2; } result_argv[result_argc] = pattern->getCell(r, i); result_argc++; } return 0; }
void track_proxy_save(t_gobj *z, t_binbuf *b) { t_track_proxy *x = (t_track_proxy*)z; Track *t = x->track; Song *s = t->getSong(); binbuf_addv(b, "ssiisss;", gensym("#X"), gensym("obj"), (t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix, gensym("track"), gensym(s->getName().c_str()), gensym(t->getName().c_str())); // save paterns for(Track::pattern_iterator i = t->pattern_begin(); i != t->pattern_end(); i++) { Pattern *pattern = i->second; binbuf_addv(b, "ss", gensym(TRACK_SELECTOR), gensym("data")); t_int r = pattern->getRows(); t_int c = pattern->getColumns(); binbuf_addv(b, "sii", gensym(pattern->getName().c_str()), r, c); t_atom tmp; for(unsigned int j = 0; j < r; j++) { for(unsigned int k = 0; k < c; k++) { tmp = pattern->getCell(j, k); switch(tmp.a_type) { case A_SYMBOL: binbuf_addv(b, "s", tmp.a_w.w_symbol); break; case A_FLOAT: binbuf_addv(b, "f", tmp.a_w.w_float); break; default: binbuf_addv(b, "s", gensym("?")); break; } } } binbuf_addv(b, ";"); } // save metadata for(Track::meta_iterator i = t->meta_begin(); i != t->meta_end(); i++) { binbuf_addv(b, "ssssss;", gensym(TRACK_SELECTOR), gensym("meta"), gensym("track"), gensym("set"), gensym(i->first.c_str()), gensym(i->second.c_str())); } binbuf_addv(b, "sss;", gensym(TRACK_SELECTOR), gensym("data"), gensym("end")); }
int track_proxy_getcell(t_track_proxy *x, t_symbol *pat, t_floatarg rownum, t_floatarg colnum) { t_int r = (t_int) rownum; t_int c = (t_int) colnum; Pattern *pattern = x->track->getPattern(pat->s_name); if(!pattern) { pd_error(x, "getcell: no such pattern: %s", pat->s_name); return -2; } SETSYMBOL(&result_argv[0], gensym("patterncell")); SETSYMBOL(&result_argv[1], pat); SETFLOAT(&result_argv[2], (t_float) r); SETFLOAT(&result_argv[3], (t_float) c); result_argv[4] = pattern->getCell(r, c); result_argc = 5; return 0; }