summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2014-12-05 20:34:12 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2014-12-05 20:34:12 +0100
commit3b0d9e0c9c5e08b2e449aa266617fb1db86b5a22 (patch)
treef203a59c944714925d73ae2d33ad9c67d5b17070 /test
parent29ec8552826f64bfa8cad01a433306886328c522 (diff)
parent2e7176bc558cb03d4e7c27769bab9cd45c703332 (diff)
Merge branch 'resample'
Add resample support.
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am14
-rw-r--r--test/resampler.cc112
2 files changed, 122 insertions, 4 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index 77a0f96..e43a6ba 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,18 +1,15 @@
# Rules for the test code (use `make check` to execute)
include $(top_srcdir)/src/Makefile.am.drumgizmo
-TESTS = engine gui
+TESTS = engine gui resampler
check_PROGRAMS = $(TESTS)
engine_CXXFLAGS = -DOUTPUT=\"engine\" $(CPPUNIT_CFLAGS) \
-I$(top_srcdir)/src -I$(top_srcdir)/include \
-I$(top_srcdir)/hugin -DDISABLE_HUGIN
-
engine_CFLAGS = -DDISABLE_HUGIN
-
engine_LDFLAGS = $(CPPUNIT_LIBS) $(DRUMGIZMO_LIBS) $(PTHREAD_LIBS)
-
engine_SOURCES = \
$(DRUMGIZMO_SOURCES) \
$(top_srcdir)/hugin/hugin.c \
@@ -24,3 +21,12 @@ gui_LDFLAGS = $(CPPUNIT_LIBS)
gui_SOURCES = \
test.cc \
gui.cc
+
+resampler_CXXFLAGS = -DOUTPUT=\"resampler\" $(CPPUNIT_CFLAGS) \
+ $(ZITA_CXXFLAGS) $(SAMPLERATE_CFLAGS) \
+ -I$(top_srcdir)/hugin -DDISABLE_HUGIN
+resampler_LDFLAGS = $(ZITA_LIBS) $(SAMPLERATE_LIBS) $(CPPUNIT_LIBS)
+resampler_SOURCES = \
+ $(top_srcdir)/src/chresampler.cc \
+ test.cc \
+ resampler.cc \ No newline at end of file
diff --git a/test/resampler.cc b/test/resampler.cc
new file mode 100644
index 0000000..445a5b3
--- /dev/null
+++ b/test/resampler.cc
@@ -0,0 +1,112 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * resampler.cc
+ *
+ * Sun Oct 5 20:16:22 CEST 2014
+ * Copyright 2014 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "../src/chresampler.h"
+#include <unistd.h>
+
+#define BUFSZ 500
+
+static float round(float a) { return a<0.5?0:1; }
+
+class test_resampler : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE(test_resampler);
+ CPPUNIT_TEST(resampling);
+ CPPUNIT_TEST(resampling_buffer_sizes);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ void setUp() {}
+ void tearDown() {}
+
+ void resampling()
+ {
+ CHResampler r;
+ CPPUNIT_ASSERT_EQUAL(1.0, r.ratio());
+
+ r.setup(44100, 48000);
+ CPPUNIT_ASSERT_EQUAL(44100.0/48000.0, r.ratio());
+
+ float in[BUFSZ];
+ for(int i = 0; i < BUFSZ; i++) in[i] = 0;//(float)i/(float)BUFSZ;
+ in[100] = 1.0;
+
+ float out[BUFSZ];
+ r.setInputSamples(in, sizeof(in) / sizeof(float));
+ r.setOutputSamples(out, sizeof(out) / sizeof(float));
+ r.process();
+ CPPUNIT_ASSERT_EQUAL((size_t)0, r.getInputSampleCount());
+
+ // CPPUNIT_ASSERT_EQUAL(, r.getOutputSampleCount());
+
+ int outidx = -1;
+ int inidx = -1;
+ for(int i = 0; i < BUFSZ - (int)r.getOutputSampleCount(); i++) {
+ if(in[i] == 1.0) inidx = i;
+ if(round(out[i]) == 1.0) outidx = i;
+ //printf("in[% 4d]\t= %f\t", i, in[i]);
+ //printf("out[% 4d]\t= %f\n", i, out[i]);
+ }
+
+ CPPUNIT_ASSERT(inidx != -1);
+ CPPUNIT_ASSERT(outidx != -1);
+
+ //printf("inidx: %d - outidx: %d\n", inidx, outidx);
+ //CPPUNIT_ASSERT_EQUAL(71, inidx - outidx); // This does not make sense...
+ }
+
+ void resampling_buffer_sizes()
+ {
+ CHResampler r;
+ CPPUNIT_ASSERT_EQUAL(1.0, r.ratio());
+
+ double infs = 24000;
+ double outfs = 48000;
+ r.setup(infs, outfs);
+ CPPUNIT_ASSERT_EQUAL(infs / outfs, r.ratio());
+
+ float in[BUFSZ];
+ float out[(int)(BUFSZ / r.ratio())];
+
+ // Preload resampler
+ r.setOutputSamples(out, 1);
+ while(r.getOutputSampleCount()) {
+ r.setInputSamples(in, 1);
+ r.process();
+ }
+
+ r.setInputSamples(in, sizeof(in) / sizeof(float));
+ r.setOutputSamples(out, sizeof(out) / sizeof(float));
+ r.process();
+ CPPUNIT_ASSERT_EQUAL((size_t)0, r.getInputSampleCount());
+ CPPUNIT_ASSERT_EQUAL((size_t)0, r.getOutputSampleCount());
+ }
+};
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_resampler);