// Transposes the sample rate of the given samples using linear interpolation. // Returns the number of samples returned in the "dest" buffer int TransposerBase::transpose(FIFOSampleBuffer &dest, FIFOSampleBuffer &src) { int numSrcSamples = src.numSamples(); int sizeDemand = (int)((double)numSrcSamples / rate) + 8; int numOutput; SAMPLETYPE *psrc = src.ptrBegin(); SAMPLETYPE *pdest = dest.ptrEnd(sizeDemand); #ifndef USE_MULTICH_ALWAYS if (numChannels == 1) { numOutput = transposeMono(pdest, psrc, numSrcSamples); } else if (numChannels == 2) { numOutput = transposeStereo(pdest, psrc, numSrcSamples); } else #endif // USE_MULTICH_ALWAYS { assert(numChannels > 0); numOutput = transposeMulti(pdest, psrc, numSrcSamples); } dest.putSamples(numOutput); src.receiveSamples(numSrcSamples); return numOutput; }
/// Applies the filter to the given src & dest pipes, so that processed amount of /// samples get removed from src, and produced amount added to dest /// Note : The amount of outputted samples is by value of 'filter length' /// smaller than the amount of input samples. uint AAFilter::evaluate(FIFOSampleBuffer &dest, FIFOSampleBuffer &src) const { SAMPLETYPE *pdest; const SAMPLETYPE *psrc; uint numSrcSamples; uint result; int numChannels = src.getChannels(); assert(numChannels == dest.getChannels()); numSrcSamples = src.numSamples(); psrc = src.ptrBegin(); pdest = dest.ptrEnd(numSrcSamples); result = pFIR->evaluate(pdest, psrc, numSrcSamples, numChannels); src.receiveSamples(result); dest.putSamples(result); return result; }