MCPcopy Create free account
hub / github.com/StrangeLoopsAudio/gRainbow / process

Method process

Source/DSP/Grain.cpp:13–40  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11#include "Grain.h"
12
13float Grain::process(float chanPerc, const juce::AudioBuffer<float>& audioBuffer, float envelopeGain, int time) {
14 // Time percentage over duration
15 mTimePerc = juce::jlimit(0.0f, 1.0f, static_cast<float>((time - trigTs)) / duration);
16
17 // Panning gain
18 mPanGain = computeChannelPanningGain(chanPerc);
19
20 mTotalGain = envelopeGain * mPanGain * getAmplitude();
21
22 mSampleIdx = duration * pbRate * mTimePerc;
23 mLowSample = std::floor(mSampleIdx);
24 mHighSample = std::ceil(mSampleIdx);
25 mSampleRem = mSampleIdx - mLowSample;
26 if (pbRate < 0.0f) {
27 std::swap(mLowSample, mHighSample);
28 mSampleRem = fabsf(mLowSample - mSampleIdx);
29 mLowSample += audioBuffer.getNumSamples();
30 mHighSample += audioBuffer.getNumSamples();
31 }
32
33 // Some quick interpolation between sample values
34 const float* fileBuf = audioBuffer.getReadPointer(0);
35 mSampleValue = juce::jmap(mSampleRem, fileBuf[(startPos + mLowSample) % audioBuffer.getNumSamples()],
36 fileBuf[(startPos + mHighSample) % audioBuffer.getNumSamples()]);
37
38 mSampleValue *= mTotalGain;
39 return mSampleValue;
40}
41
42float Grain::getAmplitude() {
43 if (mEnv.size() == 0) return 0.0f;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected