xref: /aosp_15_r20/external/speex/libspeexdsp/testresample.c (revision 28e138c64d234588b5cd2a8a403b584bd3036e4e)
1*28e138c6SAndroid Build Coastguard Worker /* Copyright (C) 2007 Jean-Marc Valin
2*28e138c6SAndroid Build Coastguard Worker 
3*28e138c6SAndroid Build Coastguard Worker    File: testresample.c
4*28e138c6SAndroid Build Coastguard Worker    Testing the resampling code
5*28e138c6SAndroid Build Coastguard Worker 
6*28e138c6SAndroid Build Coastguard Worker    Redistribution and use in source and binary forms, with or without
7*28e138c6SAndroid Build Coastguard Worker    modification, are permitted provided that the following conditions are
8*28e138c6SAndroid Build Coastguard Worker    met:
9*28e138c6SAndroid Build Coastguard Worker 
10*28e138c6SAndroid Build Coastguard Worker    1. Redistributions of source code must retain the above copyright notice,
11*28e138c6SAndroid Build Coastguard Worker    this list of conditions and the following disclaimer.
12*28e138c6SAndroid Build Coastguard Worker 
13*28e138c6SAndroid Build Coastguard Worker    2. Redistributions in binary form must reproduce the above copyright
14*28e138c6SAndroid Build Coastguard Worker    notice, this list of conditions and the following disclaimer in the
15*28e138c6SAndroid Build Coastguard Worker    documentation and/or other materials provided with the distribution.
16*28e138c6SAndroid Build Coastguard Worker 
17*28e138c6SAndroid Build Coastguard Worker    3. The name of the author may not be used to endorse or promote products
18*28e138c6SAndroid Build Coastguard Worker    derived from this software without specific prior written permission.
19*28e138c6SAndroid Build Coastguard Worker 
20*28e138c6SAndroid Build Coastguard Worker    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21*28e138c6SAndroid Build Coastguard Worker    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22*28e138c6SAndroid Build Coastguard Worker    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23*28e138c6SAndroid Build Coastguard Worker    DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
24*28e138c6SAndroid Build Coastguard Worker    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25*28e138c6SAndroid Build Coastguard Worker    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26*28e138c6SAndroid Build Coastguard Worker    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27*28e138c6SAndroid Build Coastguard Worker    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28*28e138c6SAndroid Build Coastguard Worker    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29*28e138c6SAndroid Build Coastguard Worker    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30*28e138c6SAndroid Build Coastguard Worker    POSSIBILITY OF SUCH DAMAGE.
31*28e138c6SAndroid Build Coastguard Worker */
32*28e138c6SAndroid Build Coastguard Worker 
33*28e138c6SAndroid Build Coastguard Worker #ifdef HAVE_CONFIG_H
34*28e138c6SAndroid Build Coastguard Worker #include "config.h"
35*28e138c6SAndroid Build Coastguard Worker #endif
36*28e138c6SAndroid Build Coastguard Worker 
37*28e138c6SAndroid Build Coastguard Worker #include "speex/speex_resampler.h"
38*28e138c6SAndroid Build Coastguard Worker #include <stdio.h>
39*28e138c6SAndroid Build Coastguard Worker #include <math.h>
40*28e138c6SAndroid Build Coastguard Worker #include <stdlib.h>
41*28e138c6SAndroid Build Coastguard Worker 
42*28e138c6SAndroid Build Coastguard Worker #define NN 256
43*28e138c6SAndroid Build Coastguard Worker 
main()44*28e138c6SAndroid Build Coastguard Worker int main()
45*28e138c6SAndroid Build Coastguard Worker {
46*28e138c6SAndroid Build Coastguard Worker    spx_uint32_t i;
47*28e138c6SAndroid Build Coastguard Worker    short *in;
48*28e138c6SAndroid Build Coastguard Worker    short *out;
49*28e138c6SAndroid Build Coastguard Worker    float *fin, *fout;
50*28e138c6SAndroid Build Coastguard Worker    int count = 0;
51*28e138c6SAndroid Build Coastguard Worker    SpeexResamplerState *st = speex_resampler_init(1, 8000, 12000, 10, NULL);
52*28e138c6SAndroid Build Coastguard Worker    speex_resampler_set_rate(st, 96000, 44100);
53*28e138c6SAndroid Build Coastguard Worker    speex_resampler_skip_zeros(st);
54*28e138c6SAndroid Build Coastguard Worker 
55*28e138c6SAndroid Build Coastguard Worker    in = malloc(NN*sizeof(short));
56*28e138c6SAndroid Build Coastguard Worker    out = malloc(2*NN*sizeof(short));
57*28e138c6SAndroid Build Coastguard Worker    fin = malloc(NN*sizeof(float));
58*28e138c6SAndroid Build Coastguard Worker    fout = malloc(2*NN*sizeof(float));
59*28e138c6SAndroid Build Coastguard Worker    while (1)
60*28e138c6SAndroid Build Coastguard Worker    {
61*28e138c6SAndroid Build Coastguard Worker       spx_uint32_t in_len;
62*28e138c6SAndroid Build Coastguard Worker       spx_uint32_t out_len;
63*28e138c6SAndroid Build Coastguard Worker       fread(in, sizeof(short), NN, stdin);
64*28e138c6SAndroid Build Coastguard Worker       if (feof(stdin))
65*28e138c6SAndroid Build Coastguard Worker          break;
66*28e138c6SAndroid Build Coastguard Worker       for (i=0;i<NN;i++)
67*28e138c6SAndroid Build Coastguard Worker          fin[i]=in[i];
68*28e138c6SAndroid Build Coastguard Worker       in_len = NN;
69*28e138c6SAndroid Build Coastguard Worker       out_len = 2*NN;
70*28e138c6SAndroid Build Coastguard Worker       /*if (count==2)
71*28e138c6SAndroid Build Coastguard Worker          speex_resampler_set_quality(st, 10);*/
72*28e138c6SAndroid Build Coastguard Worker       speex_resampler_process_float(st, 0, fin, &in_len, fout, &out_len);
73*28e138c6SAndroid Build Coastguard Worker       for (i=0;i<out_len;i++)
74*28e138c6SAndroid Build Coastguard Worker          out[i]=floor(.5+fout[i]);
75*28e138c6SAndroid Build Coastguard Worker       /*speex_warning_int("writing", out_len);*/
76*28e138c6SAndroid Build Coastguard Worker       fwrite(out, sizeof(short), out_len, stdout);
77*28e138c6SAndroid Build Coastguard Worker       count++;
78*28e138c6SAndroid Build Coastguard Worker    }
79*28e138c6SAndroid Build Coastguard Worker    speex_resampler_destroy(st);
80*28e138c6SAndroid Build Coastguard Worker    free(in);
81*28e138c6SAndroid Build Coastguard Worker    free(out);
82*28e138c6SAndroid Build Coastguard Worker    free(fin);
83*28e138c6SAndroid Build Coastguard Worker    free(fout);
84*28e138c6SAndroid Build Coastguard Worker    return 0;
85*28e138c6SAndroid Build Coastguard Worker }
86*28e138c6SAndroid Build Coastguard Worker 
87