Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/speexdsp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2016-02-04 11:13:53 +0300
committerTristan Matthews <tmatth@videolan.org>2016-04-29 07:56:08 +0300
commit13d02a0f66e25c7fbcfbb833ec534251e4ab59db (patch)
tree3e4841e870beed73ec98e0157b516743bd83b858
parentd5fade684a4f0ea1419901173d8a254742a6f3a9 (diff)
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 <tmatth@videolan.org>
-rw-r--r--libspeexdsp/Makefile.am4
-rw-r--r--libspeexdsp/testresample2.c93
2 files changed, 96 insertions, 1 deletions
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 <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+
+#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<INBLOCK*2;i++)
+ fin[i] = sinf ((float)i/PERIOD * 2 * M_PI) * 0.9;
+
+ fout = malloc(INBLOCK*4*sizeof(float));
+
+ while (1)
+ {
+ spx_uint32_t in_len;
+ spx_uint32_t out_len;
+
+ in_len = avail;
+ out_len = (in_len * rate + RATE-1) / RATE;
+
+ fprintf (stderr, "%d %d %d %d -> ", 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;
+}
+