void MLProcDelayOutput::process(const int frames) { const MLSignal& delayTime = getInput(1); MLSignal& y = getOutput(); int delayInt; const float sr = getContextSampleRate(); MLSample delay; int delayedIndex; if (mParamsChanged) doParams(); if(mpDelayInputProc) { MLSignal& buffer = mpDelayInputProc->getBuffer(); if (delayTime.isConstant()) { delay = delayTime[0] * sr - mVectorDelay; if (delay < mVectorDelay) delay = mVectorDelay; delayInt = (int)(delay); for (int n=0; n<frames; ++n) { delayedIndex = mReadIndex - delayInt; delayedIndex &= mLengthMask; y[n] = buffer[delayedIndex]; mReadIndex++; } } else { for (int n=0; n<frames; ++n) { // read // zero order (integer delay) // get delay time. // if no signal is attached, 0. should result // and we get a single-vector delay. delay = delayTime[n] * sr - mVectorDelay; if (delay < mVectorDelay) delay = mVectorDelay; delayInt = (int)(delay); delayedIndex = mReadIndex - delayInt; delayedIndex &= mLengthMask; y[n] = buffer[delayedIndex]; mReadIndex++; } } } // linear interp: //y[n] = frac*x[m+1] + (1-frac)*x[m] // allpass interp: // y[n] = x[m+1] + (1-frac)*x[m] - (1-frac)*y[n-1] }
void MLProcDebug::process(const int frames) { const int intervalSeconds = 2; const int intervalFrames = getContextSampleRate() * intervalSeconds; if (mParamsChanged) doParams(); mTemp += frames; if (mTemp > intervalFrames) { const MLSignal& in = getInput(1); debug() << std::setw(6); debug() << std::setprecision(2); debug() << "sig " << getName() << " (" << static_cast<const void *>(&in) << "), n=" << frames << " = " << std::setprecision(4) << in[0] ; if(in.isConstant()) { debug() << "(const)"; } else { debug() << " min:" << in.getMin() << ", max:" << in.getMax(); } debug() << "\n"; mTemp -= intervalFrames; if (mVerbose) { debug() << frames << " frames\n"; debug() << "["; debug() << std::setw(6); debug() << std::setprecision(2); for(int j=0; j<frames; ++j) { debug() << in[j] << " " ; if ((j%8 == 7) && (j < frames-1)) debug() << "\n"; } debug() << "]\n\n"; } } }
void MLProcRingBuffer::process(const int frames) { int written; const MLSignal& x = getInput(1); // build if needed if (mParamsChanged) doParams(); if (mRing.getBuffer()) { if (x.isConstant()) { written = (int)PaUtil_WriteRingBufferConstant( &mBuf, x[0], frames ); } else { written = (int)PaUtil_WriteRingBuffer(&mBuf, (void *)x.getConstBuffer(), frames ); } // debug() << "wrote " << written << " from " << (void *)x.getConstBuffer() << "\n"; } }
static PyObject * sv_SetParam(PyObject *self, PyObject *args) { return doParams(self, args, svSetParam, 0); }
static PyObject * sv_GetParamRange(PyObject *self, PyObject *args) { return doParams(self, args, svGetParamRange, 1); }
MLProc::err MLProcDelayOutput::resize() { err e = OK; doParams(); return e; }