void SceneGraphComponent::update() { // save the current transformation for calculation of trajectory memcpy(m_net_lasttransformation, m_transformation, sizeof(float) * 16); // 2011-05-03: code transfered to checkTransformation(), so internal calls to update() could be eliminated. checkTransformation(); // apply pending trajectories traject(); }
/* ----------------------------------------------------------------- init --- */ int MROOM::init(double p[], int n_args) { float outskip = p[0]; float inskip = p[1]; float dur = p[2]; ovamp = p[3]; xdim = p[4]; ydim = p[5]; float rvbtime = p[6]; reflect = p[7]; innerwidth = p[8]; inchan = n_args > 9 ? (int)p[9] : AVERAGE_CHANS; int quant = n_args > 10 ? (int)p[10] : DEFAULT_QUANTIZATION; if (outputchans != 2) return die("MROOM", "Requires stereo output."); float ringdur = (rvbtime > MAX_DELAY) ? rvbtime : MAX_DELAY; if (rtsetoutput(outskip, dur + ringdur, this) == -1) return DONT_SCHEDULE; if (rtsetinput(inskip, this) == -1) return DONT_SCHEDULE; insamps = (int)(dur * SR + 0.5); if (inchan >= inputChannels()) return die("MROOM", "You asked for channel %d of a %d-channel input file.", inchan, inputChannels()); if (inputChannels() == 1) inchan = 0; // ***FIXME: input validation for trajectory points? int ntimes = get_timeset(timepts, xvals, yvals); if (ntimes == 0) return die("MROOM", "Must have at least two timeset calls before MROOM."); traject(ntimes); tableset(SR, dur, POS_ARRAY_SIZE, xpostabs); tableset(SR, dur, POS_ARRAY_SIZE, ypostabs); int delsamps = (int)(MAX_DELAY * SR + 0.5); delayline = new float[delsamps]; delset(SR, delayline, deltabs, MAX_DELAY); /* Array dimensions taken from lib/rvbset.c (+ 2 extra for caution). */ int rvbsamps = (int)((0.1583 * SR) + 18 + 2); rvbarrayl = new float[rvbsamps]; rvbarrayr = new float[rvbsamps]; rvbset(SR, rvbtime, 0, rvbarrayl); rvbset(SR, rvbtime, 0, rvbarrayr); amparray = floc(1); if (amparray) { int amplen = fsize(1); tableset(SR, dur, amplen, amptabs); } else rtcmix_advise("MROOM", "Setting phrase curve to all 1's."); aamp = ovamp; /* in case amparray == NULL */ skip = (int)(SR / (float)resetval); quantskip = (int)(SR / (float)quant); return nSamps(); }