// the heart void haas_run(float *inl, float *inr, float *outl, float *outr, int frames) { int i; float l,r; for (i=0; i<frames; i++) { l = inl[i]; r = inr[i]; l = delay(&left.delay, l); r = delay(&right.delay, r); l = detune(&left.detune, l); r = detune(&right.detune, r); l = onepole(&left.lpf, l); r = onepole(&right.lpf, r); pan(l, r, outl+i, outr+i); } }
void DetunerPlugin::processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages) { int blockSamples = buffer.getNumSamples(); detune(inputBuffer, outputBuffer, blockSamples); setMagnus(outputBuffer->getMagnitude(0, buffer.getNumSamples())); // in case we have more outputs than inputs, we'll clear any output // channels that didn't contain input data, (because these aren't // guaranteed to be empty - they may contain garbage). for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) { buffer.clear (i, 0, buffer.getNumSamples()); } // if any midi messages come in, use them to update the keyboard state object. This // object sends notification to the UI component about key up/down changes keyboardState.processNextMidiBuffer (midiMessages, 0, buffer.getNumSamples(), true); // have a go at getting the current time from the host, and if it's changed, tell // our UI to update itself. AudioPlayHead::CurrentPositionInfo pos; if (getPlayHead() != 0 && getPlayHead()->getCurrentPosition (pos)) { if (memcmp (&pos, &lastPosInfo, sizeof (pos)) != 0) { lastPosInfo = pos; sendChangeMessage (this); } } else { zeromem (&lastPosInfo, sizeof (lastPosInfo)); lastPosInfo.timeSigNumerator = 4; lastPosInfo.timeSigDenominator = 4; lastPosInfo.bpm = 120; } }