libsidplayfp
2.0.2
|
#include <SincResampler.h>
Public Member Functions | |
SincResampler (double clockFrequency, double samplingFrequency, double highestAccurateFrequency) | |
bool | input (int input) override |
int | output () const override |
void | reset () override |
![]() | |
short | getOutput () const |
Additional Inherited Members |
This is the theoretically correct (and computationally intensive) audio sample generation. The samples are generated by resampling to the specified sampling frequency. The work rate is inversely proportional to the percentage of the bandwidth allocated to the filter transition band.
This implementation is based on the paper "A Flexible Sampling-Rate Conversion Method", by J. O. Smith and P. Gosset, or rather on the expanded tutorial on the Digital Audio Resampling Home Page.
By building shifted FIR tables with samples according to the sampling frequency, this implementation dramatically reduces the computational effort in the filter convolutions, without any loss of accuracy. The filter convolutions are also vectorizable on current hardware.
reSIDfp::SincResampler::SincResampler | ( | double | clockFrequency, |
double | samplingFrequency, | ||
double | highestAccurateFrequency | ||
) |
Use a clock freqency of 985248Hz for PAL C64, 1022730Hz for NTSC C64. The default end of passband frequency is pass_freq = 0.9*sample_freq/2 for sample frequencies up to ~ 44.1kHz, and 20kHz for higher sample frequencies.
For resampling, the ratio between the clock frequency and the sample frequency is limited as follows: 125*clock_freq/sample_freq < 16384 E.g. provided a clock frequency of ~ 1MHz, the sample frequency can not be set lower than ~ 8kHz. A lower sample frequency would make the resampling code overfill its 16k sample ring buffer.
The end of passband frequency is also limited: pass_freq <= 0.9*sample_freq/2
E.g. for a 44.1kHz sampling rate the end of passband frequency is limited to slightly below 20kHz. This constraint ensures that the FIR table is not overfilled.
clockFrequency | System clock frequency at Hz |
samplingFrequency | Desired output sampling rate |
highestAccurateFrequency |
|
overridevirtual |
Input a sample into resampler. Output "true" when resampler is ready with new sample.
sample | input sample |
Implements reSIDfp::Resampler.