33 static unsigned int gcd (
unsigned int a,
unsigned int b)
61 r_up.setup(sampleRate, sampleRate*fact, 1, qual);
64 r_up.inp_count = r_up.inpsize() - 1;
66 r_up.inp_data = r_up.out_data = 0;
69 r_down.setup(sampleRate*fact, sampleRate, 1, qual);
72 r_down.inp_count = r_down.inpsize() - 1;
74 r_down.inp_data = r_down.out_data = 0;
80 r_up.inp_count = count;
81 r_up.inp_data = input;
82 r_up.out_count = count * m_fact;
83 r_up.out_data = output;
85 assert(r_up.inp_count == 0);
86 assert(r_up.out_count == 0);
91 r_down.inp_count = count * m_fact;
92 r_down.inp_data = input;
93 r_down.out_count = count+1;
94 r_down.out_data = output;
96 assert(r_down.inp_count == 0);
97 assert(r_down.out_count == 1);
102 int d = gcd(fs_inp, fs_outp);
103 int ratio_a = fs_inp / d;
104 int ratio_b = fs_outp / d;
107 if (setup(fs_inp, fs_outp, 1, qual) != 0) {
116 if (Resampler::process() != 0) {
120 int nout = out_count = (ilen * ratio_b + ratio_a - 1) / ratio_a;
122 float *p = out_data =
new float[out_count];
123 if (Resampler::process() != 0) {
129 if (Resampler::process() != 0) {
133 assert(inp_count == 0);
134 assert(out_count <= 1);
135 *olen = nout - out_count;
141 int d = gcd(srcRate, dstRate);
142 ratio_a = srcRate / d;
143 ratio_b = dstRate / d;
146 if (Resampler::setup(srcRate, dstRate, nchan, qual) != 0) {
149 inp_count = inpsize()/2-1;
153 if (Resampler::process() != 0) {
156 assert(inp_count == 0);
157 assert(out_count == 1);
167 if (Resampler::process() != 0) {
170 assert(inp_count == 0);
171 return olen - out_count;
180 inp_count = inpsize()/2;
183 if (Resampler::process() != 0) {
186 assert(inp_count == 0);
187 return olen - out_count;
193 inputRate = _inputRate;
194 outputRate = _outputRate;
195 if (inputRate >= outputRate) {
199 int ret = r_up.setup(inputRate, outputRate, 1, qual);
205 r_up.inp_count = r_up.filtlen() - 1;
207 r_up.inp_data = r_up.out_data = 0;
210 ret = r_down.setup(outputRate, inputRate, 1, qual);
216 r_down.inp_count = r_down.filtlen() - 2;
217 r_down.out_count = 1;
218 r_down.inp_data = r_down.out_data = 0;
225 if (inputRate >= outputRate) {
226 memcpy(output, input, count*
sizeof(
float));
227 r_down.out_count = count;
230 r_up.inp_count = count;
231 r_down.out_count = count+1;
232 r_up.inp_data = input;
235 r_up.out_data = output;
237 assert(r_up.inp_count == 0);
238 assert(r_up.out_count <= 1);
239 r_down.inp_count = m - r_up.out_count;
240 return r_down.inp_count;
245 if (inputRate >= outputRate) {
246 memcpy(output, input, r_down.out_count*
sizeof(
float));
249 r_down.inp_data = input;
250 r_down.out_data = output;
252 assert(r_down.inp_count == 0);
253 assert(r_down.out_count == 1);