6#define R8B_PFFFT_DOUBLE 0
7#define R8B_FASTTIMING 0
10#include "dependencies/r8brain-free-src/CDSPResampler.h"
22template <
typename SampleType>
23static void resample (
const SampleType* sourceData, size_t sourceSizeFrames,
double sourceSampleRateHz, SampleType* destinationData, size_t destinationCapacityFrames,
double destinationSampleRateHz)
25 if (sourceData ==
nullptr)
28 if (destinationData ==
nullptr)
31 if (sourceSizeFrames == 0)
34 if (destinationCapacityFrames == 0)
37 if (sourceSampleRateHz < 0.0 ||
floatsEqual (sourceSampleRateHz
, 0.0
) || std::isnan (sourceSampleRateHz))
40 if (destinationSampleRateHz < 0.0 ||
floatsEqual (destinationSampleRateHz
, 0.0
) || std::isnan (destinationSampleRateHz))
43 const double sampleRatesRatio = destinationSampleRateHz / sourceSampleRateHz;
44 const double minDestinationCapacityFrames =
roundToSizeT (static_cast<
double> (sourceSizeFrames) * destinationSampleRateHz / sourceSampleRateHz
);
46 if (destinationCapacityFrames < minDestinationCapacityFrames)
50 r8b::CDSPResampler24 resampler (sourceSampleRateHz, destinationSampleRateHz, sourceSizeFrames);
53 resampler.oneshot (
const_cast<SampleType*> (sourceData),
static_cast<
int> (sourceSizeFrames), destinationData,
static_cast<
int> (destinationCapacityFrames));
Thrown when a nullptr could be handled gracefully.
Thrown when sample rate is mismatched or invalid.
Thrown when an unexpected container size is encountered.
#define HART_THROW_OR_RETURN_VOID(ExceptionType, message)
Throws an exception if HART_DO_NOT_THROW_EXCEPTIONS is set, prints a message and returns otherwise.
#define hassert(condition)
Triggers a HartAssertException if the condition is false
static size_t roundToSizeT(SampleType x)
Rounds a floating point value to a size_t value.
static void resample(const SampleType *sourceData, size_t sourceSizeFrames, double sourceSampleRateHz, SampleType *destinationData, size_t destinationCapacityFrames, double destinationSampleRateHz)
Resamples audio buffers.
static SampleType floatsEqual(SampleType a, SampleType b, SampleType epsilon=(SampleType) 1e-8)
Compares two floating point numbers within a given tolerance.