Path: blob/master/libsnes/bsnes/nall/dsp/resample/cosine.hpp
2 views
#ifdef NALL_DSP_INTERNAL_HPP12struct ResampleCosine : Resampler {3inline void setFrequency();4inline void clear();5inline void sample();6ResampleCosine(DSP &dsp) : Resampler(dsp) {}78real fraction;9real step;10};1112void ResampleCosine::setFrequency() {13fraction = 0.0;14step = dsp.settings.frequency / frequency;15}1617void ResampleCosine::clear() {18fraction = 0.0;19}2021void ResampleCosine::sample() {22while(fraction <= 1.0) {23real *channel = (real*)alloca(dsp.settings.channels * sizeof(real));242526for(unsigned n = 0; n < dsp.settings.channels; n++) {27real a = dsp.buffer.read(n, -1);28real b = dsp.buffer.read(n, -0);2930real mu = fraction;31mu = (1.0 - cos(mu * 3.14159265)) / 2.0;3233channel[n] = a * (1.0 - mu) + b * mu;34}3536dsp.write(channel);37fraction += step;38}3940dsp.buffer.rdoffset++;41fraction -= 1.0;42}4344#endif454647