33 template <
typename InputSource,
size_t OutputSampleRate,
typename ContextType>
41 for (
size_t i = 0; i <
TapCount; i++)
48 static_assert(std::is_signed<SampleType>::value,
"Input sample type must be floating point.");
55 static constexpr
size_t TapCount = FilterOptions::TapCount;
85 size_t subdivisionIndex = inputIndex * OutputToInputRatio::num;
87 size_t outputIndex = subdivisionIndex / OutputToInputRatio::den;
88 if (subdivisionIndex % OutputToInputRatio::den != 0)
93 size_t lastInputIndex = inputIndex + inputLength;
95 size_t lastSubdivisionIndex = lastInputIndex * OutputToInputRatio::num;
96 size_t lastOutputIndex = lastSubdivisionIndex / OutputToInputRatio::den;
98 if ((OutputToInputRatio::den - (lastSubdivisionIndex % OutputToInputRatio::den) < OutputToInputRatio::num))
103 size_t outputLength = lastOutputIndex - outputIndex;
105 return {outputIndex, outputLength};
114 size_t outputSubdivisionIndex = index * OutputToInputRatio::den;
116 size_t inputIndex = outputSubdivisionIndex / OutputToInputRatio::num;
117 size_t inputPhase = outputSubdivisionIndex % OutputToInputRatio::num;
122 inputPhase = OutputToInputRatio::num - inputPhase;
125 size_t coefficientIndex = TapCount * inputPhase;
134 for (
size_t i = 0; i <
TapCount; i++)
144 return ClampAndCastSample<SampleType>(value);
152 static constexpr
double Cutoff = FilterOptions::Cutoff *
static_cast<double>(OutputToInputRatio::num) / static_cast<double>(OutputToInputRatio::den);
SampleRange ExtendSampleRange(SampleRange range, SampleRange extension)
Definition: dsputilities.h:106
SampleCache< double, TapCount > mSampleCache
Definition: resampleoperator.h:167
Definition: resampleoperator.h:34
double mGainNormalization
Definition: resampleoperator.h:168
static constexpr size_t CoefficientPhaseSubdivisions
Definition: resampleoperator.h:161
SampleRange GetSampleRange() const
Definition: resampleoperator.h:77
InputSource mInputSource
Definition: resampleoperator.h:148
Definition: dsputilities.h:202
static constexpr size_t InputSampleRate
Definition: resampleoperator.h:50
size_t sampleCount
Definition: dsputilities.h:80
static constexpr double Cutoff
Definition: resampleoperator.h:152
Definition: dsputilities.h:259
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
#define assert(expr)
Definition: assertion.h:47
void Unbind()
Definition: resampleoperator.h:64
Definition: dsputilities.h:60
Definition: dsputilities.h:240
typename ContextType::FilterOptions FilterOptions
Definition: resampleoperator.h:53
static constexpr double Range
Definition: resampleoperator.h:153
InputSource & GetInputSource()
Definition: resampleoperator.h:59
size_t startIndex
Definition: dsputilities.h:75
Definition: dsputilities.h:280
LookupTable< CycledCoefficientFunction, CoefficientPhaseSubdivisions > mCoefficients
Definition: resampleoperator.h:165
ResampleOperator(ContextType &context)
Definition: resampleoperator.h:37
static constexpr size_t SampleRate
Definition: resampleoperator.h:51
typename InputSource::SampleType SampleType
Definition: resampleoperator.h:47
void Populate(size_t startIndex, PopulatorType &&populator)
Definition: samplecache.h:71
static constexpr size_t TapCount
Definition: resampleoperator.h:55
Definition: resampleoperator.h:150
SampleRange GetRange() const
Definition: samplecache.h:54
typename FilterOptions::WindowFunction WindowFunction
Definition: resampleoperator.h:158
SampleType operator[](size_t index) const
Definition: resampleoperator.h:109
std::ratio< OutputSampleRate, InputSampleRate > OutputToInputRatio
Definition: resampleoperator.h:56