From 13d02a0f66e25c7fbcfbb833ec534251e4ab59db Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 4 Feb 2016 09:13:53 +0100 Subject: test: add test for dynamic sample rate changes Add a test that resamples a sine wave with varying samplerates to create a sweep. Signed-off-by: Tristan Matthews --- libspeexdsp/Makefile.am | 4 +- libspeexdsp/testresample2.c | 93 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 libspeexdsp/testresample2.c diff --git a/libspeexdsp/Makefile.am b/libspeexdsp/Makefile.am index d0499b9..bed1cc8 100644 --- a/libspeexdsp/Makefile.am +++ b/libspeexdsp/Makefile.am @@ -32,7 +32,7 @@ libspeexdsp_la_LDFLAGS = -no-undefined -version-info @SPEEXDSP_LT_CURRENT@:@SPEE libspeexdsp_la_LIBADD = $(LIBM) if BUILD_EXAMPLES -noinst_PROGRAMS = testdenoise testecho testjitter testresample +noinst_PROGRAMS = testdenoise testecho testjitter testresample testresample2 testdenoise_SOURCES = testdenoise.c testdenoise_LDADD = libspeexdsp.la @FFT_LIBS@ testecho_SOURCES = testecho.c @@ -41,4 +41,6 @@ testjitter_SOURCES = testjitter.c testjitter_LDADD = libspeexdsp.la @FFT_LIBS@ testresample_SOURCES = testresample.c testresample_LDADD = libspeexdsp.la @FFT_LIBS@ @LIBM@ +testresample2_SOURCES = testresample2.c +testresample2_LDADD = libspeexdsp.la @FFT_LIBS@ @LIBM@ endif diff --git a/libspeexdsp/testresample2.c b/libspeexdsp/testresample2.c new file mode 100644 index 0000000..99a830d --- /dev/null +++ b/libspeexdsp/testresample2.c @@ -0,0 +1,93 @@ +/* Copyright (C) 2007 Jean-Marc Valin + + File: testresample2.c + Testing the resampling code + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "speex/speex_resampler.h" +#include +#include +#include + +#define PERIOD 32 +#define INBLOCK 1024 +#define RATE 48000 + +int main() +{ + spx_uint32_t i; + float *fin, *fout; + int rate = 1000, off = 0, avail = INBLOCK; + SpeexResamplerState *st = speex_resampler_init(1, RATE, RATE, 4, NULL); + speex_resampler_set_rate(st, RATE, rate); + speex_resampler_skip_zeros(st); + + fin = malloc(INBLOCK*2*sizeof(float)); + for (i=0; i ", rate, off, in_len, out_len); + + speex_resampler_process_float(st, 0, fin + off, &in_len, fout, &out_len); + + fprintf (stderr, "%d %d\n", in_len, out_len); + off += in_len; + avail = avail - in_len + INBLOCK; + + if (off >= INBLOCK) + off -= INBLOCK; + + fwrite(fout, sizeof(float), out_len, stdout); + + rate += 100; + if (rate > 128000) + break; + + speex_resampler_set_rate(st, RATE, rate); + } + speex_resampler_destroy(st); + free(fin); + free(fout); + return 0; +} + -- cgit v1.2.3