summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac99
-rw-r--r--plugin/Makefile.mingw32.in6
-rw-r--r--src/Makefile.am6
-rw-r--r--src/chresampler.cc220
-rw-r--r--src/chresampler.h107
-rw-r--r--src/drumgizmo.cc14
-rw-r--r--src/drumgizmo.h8
-rw-r--r--src/drumkitloader.h2
-rw-r--r--src/settings.h2
-rw-r--r--test/Makefile.am11
-rw-r--r--test/resampler.cc110
11 files changed, 46 insertions, 539 deletions
diff --git a/configure.ac b/configure.ac
index d635cf0..0a671e6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -536,78 +536,33 @@ dnl ======================
PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.20)
-AC_ARG_ENABLE([resampler],
- AS_HELP_STRING([--enable-resampler[=lib]],
- [Enable resampling using libzita-resampler, set to 'src' to force use of libsamplerate (slow). [default=yes]]),,
- [enable_resampler="yes"])
-
-AS_IF([test "x$enable_resampler" = "xyes"], [enable_resampler="zita"])
-
-has_src=no
-has_zita=no
-
-AS_IF([test x$enable_resampler != xno],
- [AC_MSG_WARN([*** Building resample support!])
- AC_DEFINE(WITH_RESAMPLER, [], [Use resample])
-
- AS_CASE([$enable_resampler],
- [src],
- [dnl ======================
- dnl Check for libsamplerate
- dnl ======================
- PKG_CHECK_MODULES(SAMPLERATE, samplerate >= 0.1.7, has_src=yes, has_src=no)],
- [zita],
- [dnl ======================
- dnl Check for the zitaresampler library
- dnl ======================
- AC_LANG_PUSH([C++])
- tmp_CXXFLAGS="$CXXFLAGS"
- tmp_CPPFLAGS="$CPPFLAGS"
- tmp_CFLAGS="$CFLAGS"
- tmp_LDFLAGS="$LDFLAGS"
- tmp_LIBS="$LIBS"
- CXXFLAGS=""
- CPPFLAGS="$ZITA_CPPFLAGS"
- CFLAGS=""
- LDFLAGS="$ZITA_LDFLAGS"
- LIBS="-lzita-resampler -lpthread"
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([#include <zita-resampler/resampler.h>],
- [Resampler r] ) ], has_zita=yes, has_zita=no)
- ZITA_CPPFLAGS="$CXXFLAGS $CPPFLAGS $CFLAGS"
- ZITA_LIBS="$LDFLAGS $LIBS"
- CXXFLAGS="$tmp_CXXFLAGS"
- CPPFLAGS="$tmp_CPPFLAGS"
- CFLAGS="$tmp_CFLAGS"
- LDFLAGS="$tmp_LDFLAGS"
- LIBS="$tmp_LIBS"
- AC_SUBST(ZITA_CPPFLAGS)
- AC_SUBST(ZITA_LIBS)
- AC_LANG_POP([C++])],
- [AC_MSG_ERROR([*** Bad argument '$enable_resampler'.])]
- )
- ]
-)
-
-AS_IF([test x$enable_resampler == xzita],
- [AS_IF([test x$has_zita == xyes],
- [AC_DEFINE(USE_ZITA, [], [zita-resampler is present])
- SAMPLERATE_CFLAGS=""
- SAMPLERATE_LIBS=""
- ],
- [AC_MSG_ERROR([*** zita-resampler library or headers not found. Set ZITA_LDFLAGS or ZITA_CPPFLAGS to add searchpath.])]
- )]
-)
-
-AS_IF([test x$enable_resampler == xsrc],
- [AS_IF([test x$has_src == xyes],
- [AC_DEFINE(USE_SRC, [], [libsamplerate is present])
- ZITA_CPPFLAGS=""
- ZITA_LIBS=""
- ],
- [AC_MSG_ERROR([*** Missing libsamplerate.])]
- )]
-)
+dnl ======================
+dnl Check for the zitaresampler library
+dnl ======================
+AC_LANG_PUSH([C++])
+tmp_CXXFLAGS="$CXXFLAGS"
+tmp_CPPFLAGS="$CPPFLAGS"
+tmp_CFLAGS="$CFLAGS"
+tmp_LDFLAGS="$LDFLAGS"
+tmp_LIBS="$LIBS"
+CXXFLAGS=""
+CPPFLAGS="$ZITA_CPPFLAGS"
+CFLAGS=""
+LDFLAGS="$ZITA_LDFLAGS"
+LIBS="-lzita-resampler -lpthread"
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([#include <zita-resampler/resampler.h>],
+ [Resampler r] ) ], has_zita=yes, has_zita=no)
+ZITA_CPPFLAGS="$CXXFLAGS $CPPFLAGS $CFLAGS"
+ZITA_LIBS="$LDFLAGS $LIBS"
+CXXFLAGS="$tmp_CXXFLAGS"
+CPPFLAGS="$tmp_CPPFLAGS"
+CFLAGS="$tmp_CFLAGS"
+LDFLAGS="$tmp_LDFLAGS"
+LIBS="$tmp_LIBS"
+AC_SUBST(ZITA_CPPFLAGS)
+AC_SUBST(ZITA_LIBS)
+AC_LANG_POP([C++])
dnl ======================
dnl Check for the rt library
diff --git a/plugin/Makefile.mingw32.in b/plugin/Makefile.mingw32.in
index 8615bb4..af07e79 100644
--- a/plugin/Makefile.mingw32.in
+++ b/plugin/Makefile.mingw32.in
@@ -17,7 +17,6 @@ DG_SRC = \
@top_srcdir@/src/audiofile.cc \
@top_srcdir@/src/channel.cc \
@top_srcdir@/src/channelmixer.cc \
- @top_srcdir@/src/chresampler.cc \
@top_srcdir@/src/configfile.cc \
@top_srcdir@/src/configparser.cc \
@top_srcdir@/src/drumgizmo.cc \
@@ -121,9 +120,6 @@ EXPAT_LIBS=@EXPAT_LIBS@
SNDFILE_CFLAGS=@SNDFILE_CFLAGS@
SNDFILE_LIBS=@SNDFILE_LIBS@
-SRC_CFLAGS=@SAMPLERATE_CFLAGS@
-SRC_LIBS=@SAMPLERATE_LIBS@
-
ZITA_CXXFLAGS=@ZITA_CPPFLAGS@
ZITA_LIBS=@ZITA_LIBS@
@@ -171,7 +167,7 @@ all:
g++ $(CXXFLAGS) @top_srcdir@/plugingui/resource_data.cc -c
gcc $(CFLAGS) $(DBG_CFLAGS) @top_srcdir@/hugin/hugin.c -c
gcc $(CFLAGS) $(DBG_CFLAGS) @top_srcdir@/hugin/hugin_syslog.c -c
- g++ $(CXXFLAGS) -std=c++11 -static -static-libgcc -O2 -g -Wall $(DBG_CFLAGS) $(DG_CFLAGS) $(DG_LIBS) $(VST_CFLAGS) hugin.o hugin_syslog.o resource_data.o $(DG_SRC) $(VST_SRC) ${SRC} ${GUI_SRC} ${GUI_CPPFLAGS} $(GUI_LIBS) $(EXPAT_CFLAGS) $(SRC_CFLAGS) $(ZITA_CXXFLAGS) $(EXPAT_LIBS) $(SNDFILE_CFLAGS) $(SNDFILE_LIBS) $(SRC_LIBS) $(ZITA_LIBS) -latomic -shared -Wl,-retain-symbols-file -Wl,drumgizmo_vst.sym -o drumgizmo_vst.dll -Wl,--out-implib,libdrumgizmo_vst.a
+ g++ $(CXXFLAGS) -std=c++11 -static -static-libgcc -O2 -g -Wall $(DBG_CFLAGS) $(DG_CFLAGS) $(DG_LIBS) $(VST_CFLAGS) hugin.o hugin_syslog.o resource_data.o $(DG_SRC) $(VST_SRC) ${SRC} ${GUI_SRC} ${GUI_CPPFLAGS} $(GUI_LIBS) $(EXPAT_CFLAGS) $(ZITA_CXXFLAGS) $(EXPAT_LIBS) $(SNDFILE_CFLAGS) $(SNDFILE_LIBS) $(ZITA_LIBS) -latomic -shared -Wl,-retain-symbols-file -Wl,drumgizmo_vst.sym -o drumgizmo_vst.dll -Wl,--out-implib,libdrumgizmo_vst.a
clean:
del -f drumgizmo_vst.dll libdrumgizmo_vst.a
diff --git a/src/Makefile.am b/src/Makefile.am
index 4d9441a..3c58382 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -3,11 +3,11 @@ noinst_LTLIBRARIES = libdg.la
libdg_la_CPPFLAGS = \
-I$(top_srcdir)/include -I$(top_srcdir)/hugin \
$(SSEFLAGS) \
- $(ZITA_CPPFLAGS) $(SNDFILE_CFLAGS) $(EXPAT_CFLAGS) $(SAMPLERATE_CFLAGS) \
+ $(ZITA_CPPFLAGS) $(SNDFILE_CFLAGS) $(EXPAT_CFLAGS) \
$(PTHREAD_CFLAGS)
libdg_la_LIBADD = \
- $(ZITA_LIBS) $(SNDFILE_LIBS) $(EXPAT_LIBS) $(SAMPLERATE_LIBS) \
+ $(ZITA_LIBS) $(SNDFILE_LIBS) $(EXPAT_LIBS) \
$(PTHREAD_LIBS)
# If you add a file here, remember to add it to plugin/Makefile.mingw32.in
@@ -21,7 +21,6 @@ nodist_libdg_la_SOURCES = \
bytesizeparser.cc \
channel.cc \
channelmixer.cc \
- chresampler.cc \
configfile.cc \
configparser.cc \
drumgizmo.cc \
@@ -61,7 +60,6 @@ EXTRA_DIST = \
bytesizeparser.h \
channel.h \
channelmixer.h \
- chresampler.h \
configfile.h \
configparser.h \
cpp11fix.h \
diff --git a/src/chresampler.cc b/src/chresampler.cc
deleted file mode 100644
index 94737c6..0000000
--- a/src/chresampler.cc
+++ /dev/null
@@ -1,220 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * chresampler.cc
- *
- * Tue Sep 23 20:42:14 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 Lesser General Public License as published by
- * the Free Software Foundation; either version 3 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 Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 "chresampler.h"
-#include "cpp11fix.h"
-
-#include <config.h>
-#include <hugin.hpp>
-#include <stdio.h>
-
-#ifdef WITH_RESAMPLER
-
-#if defined(USE_ZITA)
-#include <zita-resampler/resampler.h>
-#elif defined(USE_SRC)
-#include <samplerate.h>
-#else
-#error "No resampler selected"
-#endif
-
-class CHResampler::Prv
-{
-public:
-#if defined(USE_ZITA)
- Resampler zita;
-#elif defined(USE_SRC)
- SRC_STATE* state;
- SRC_DATA data;
-#endif
-};
-
-CHResampler::CHResampler()
- : prv{std::make_unique<Prv>()}
-{
-#if defined(SRC)
- prv->state = nullptr;
-#endif
-}
-
-void CHResampler::setup(double input_fs, double output_fs)
-{
- if((input_fs == 0.0) || (output_fs == 0.0))
- {
- return;
- }
-
- int nchan = 1; // always mono
-
- this->input_fs = input_fs;
- this->output_fs = output_fs;
-
-#if defined(USE_ZITA)
- DEBUG(resampler, "Using zita-resampler (%d -> %d)", (int)input_fs,
- (int)output_fs);
-
- // delay is 2 * hlen, 72 corresponds to delay introduced by SRC.
- int hlen = 72; // 16 ≤ hlen ≤ 96
-
- prv->zita.reset();
- prv->zita.setup(input_fs, output_fs, nchan, hlen);
-
- std::size_t null_size = prv->zita.inpsize() / 2 - 1;
- prv->zita.inp_data = nullptr;
- prv->zita.inp_count = null_size;
-
- prv->zita.out_data = nullptr;
- prv->zita.out_count = 1024 * 1024;
-
- prv->zita.process();
-#elif defined(USE_SRC)
- DEBUG(resampler, "Using libsamplerate (%d -> %d)", (int)input_fs,
- (int)output_fs);
-
- int err;
- prv->state = src_new(SRC_SINC_BEST_QUALITY, nchan, &err);
- (void)err;
- // printf("err: %d\n", err);
- src_set_ratio(prv->state, output_fs / input_fs);
- prv->data.src_ratio = output_fs / input_fs;
- prv->data.end_of_input = 0;
-#endif
-}
-
-CHResampler::~CHResampler()
-{
-#if defined(USE_ZITA)
-#elif defined(USE_SRC)
- if(prv->state)
- {
- src_delete(prv->state);
- }
-#endif
-}
-
-void CHResampler::setInputSamples(float* samples, std::size_t count)
-{
-#if defined(USE_ZITA)
- prv->zita.inp_data = samples;
- prv->zita.inp_count = count;
-#elif defined(USE_SRC)
- prv->data.data_in = samples;
- prv->data.input_frames = count;
-#endif
-}
-
-void CHResampler::setOutputSamples(float* samples, std::size_t count)
-{
-#if defined(USE_ZITA)
- prv->zita.out_data = samples;
- prv->zita.out_count = count;
-#elif defined(USE_SRC)
- prv->data.data_out = samples;
- prv->data.output_frames = count;
-#endif
-}
-
-void CHResampler::process()
-{
-#if defined(USE_ZITA)
- prv->zita.process();
-#elif defined(USE_SRC)
- src_process(prv->state, &prv->data);
- prv->data.output_frames -= prv->data.output_frames_gen;
- prv->data.data_out += prv->data.output_frames_gen;
- prv->data.input_frames -= prv->data.input_frames_used;
- prv->data.data_in += prv->data.input_frames_used;
-#endif
-}
-
-std::size_t CHResampler::getLatency() const
-{
- if (input_fs == output_fs)
- {
- return 0;
- }
-
-#if defined(USE_ZITA)
- return 0;
-#elif defined(USE_SRC)
- return 0; // TODO?
-#endif
-}
-
-std::size_t CHResampler::getInputSampleCount() const
-{
-#if defined(USE_ZITA)
- return prv->zita.inp_count;
-#elif defined(USE_SRC)
- return prv->data.input_frames;
-#endif
-}
-
-std::size_t CHResampler::getOutputSampleCount() const
-{
-#if defined(USE_ZITA)
- return prv->zita.out_count;
-#elif defined(USE_SRC)
- return prv->data.output_frames;
-#endif
-}
-
-double CHResampler::getRatio() const
-{
- return input_fs / output_fs;
-}
-
-#else
-
-// Dummy implementation
-CHResampler::CHResampler() {}
-CHResampler::~CHResampler() {}
-void CHResampler::setup(double, double) {}
-void CHResampler::setInputSamples(float*, std::size_t) {}
-void CHResampler::setOutputSamples(float*, std::size_t) {}
-void CHResampler::process() {}
-
-std::size_t CHResampler::getLatency() const
-{
- return 0;
-}
-
-std::size_t CHResampler::getInputSampleCount() const
-{
- return 0;
-}
-
-std::size_t CHResampler::getOutputSampleCount() const
-{
- return 0;
-}
-
-double CHResampler::getRatio() const
-{
- return 1;
-}
-
-#endif /*WITH_RESAMPLER*/
diff --git a/src/chresampler.h b/src/chresampler.h
deleted file mode 100644
index d21d1cb..0000000
--- a/src/chresampler.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/***************************************************************************
- * chresampler.h
- *
- * Tue Sep 23 20:42:14 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 Lesser General Public License as published by
- * the Free Software Foundation; either version 3 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 Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-#pragma once
-
-#include <memory>
-#include <config.h>
-#include <array>
-
-//! Channel resampler class using either zita-resampler or secret rabbit code
-//! (really!!) depending on the value of the WITH_RESAMPLER macro.
-//! If WITH_RESAMPLER is unset the resampler is disabled entirely.
-//! If WITH_RESAMPLER=="zita" zita-resampler will be used.
-//! If WITH_RESAMPLER=="src" Secret Rabbit Code will be used.
-class CHResampler
-{
-public:
- CHResampler();
- ~CHResampler();
-
- void setup(double input_fs, double output_fs);
-
- void setInputSamples(float* samples, std::size_t count);
- void setOutputSamples(float* samples, std::size_t count);
-
- void process();
-
- std::size_t getLatency() const;
-
- std::size_t getInputSampleCount() const;
- std::size_t getOutputSampleCount() const;
-
- double getRatio() const;
-
-#ifdef WITH_RESAMPLER
-private:
- class Prv;
- std::unique_ptr<Prv> prv;
-
- double input_fs{44100.0};
- double output_fs{44100.0};
-#endif /*WITH_RESAMPLER*/
-};
-
-//! Container class for the resampler array.
-class Resamplers
-{
-public:
- void setup(double input_fs, double output_fs)
- {
- for(auto& resampler : resamplers)
- {
- resampler.setup(input_fs, output_fs);
- }
- }
-
- bool isActive() const
- {
- return getRatio() != 1.0;
- }
-
- double getRatio() const
- {
- return resamplers[0].getRatio();
- }
-
-
- CHResampler& operator[](std::size_t idx)
- {
- return resamplers[idx];
- }
-
- std::size_t getOutputSampleCount() const
- {
- return resamplers[0].getOutputSampleCount();
- }
-
- std::size_t getLatency() const
- {
- return resamplers[0].getLatency();
- }
-
- std::array<CHResampler, 64> resamplers;
-};
diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc
index e7ebe5a..5048e35 100644
--- a/src/drumgizmo.cc
+++ b/src/drumgizmo.cc
@@ -201,10 +201,9 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
zita[c].process();
}
- std::memset(_resampler_input_buffer[c], 0,
- sizeof(_resampler_input_buffer[c]));
+ std::memset(resampler_input_buffer[c].get(), 0, MAX_RESAMPLER_BUFFER_SIZE);
- zita[c].inp_data = _resampler_input_buffer[c];
+ zita[c].inp_data = resampler_input_buffer[c].get();
std::size_t sample_count =
std::ceil((nsamples - (nsamples - zita[c].out_count)) * ratio);
getSamples(c, kitpos, zita[c].inp_data, sample_count);
@@ -409,11 +408,18 @@ void DrumGizmo::setSamplerate(float samplerate)
// Notify input engine of the samplerate change.
ie.setSampleRate(samplerate);
- auto input_fs = kit.getSamplerate();
+ auto input_fs = settings.drumkit_samplerate.load();
auto output_fs = samplerate;
ratio = input_fs / output_fs;
settings.resamplig_recommended.store(ratio != 1.0);
+ // TODO: Only reallocate the actual amount of samples needed based on the
+ // ratio and the framesize.
+ for(auto& buf : resampler_input_buffer)
+ {
+ buf.reset(new sample_t[MAX_RESAMPLER_BUFFER_SIZE]);
+ }
+
for(int c = 0; c < MAX_NUM_CHANNELS; ++c)
{
zita[c].reset();
diff --git a/src/drumgizmo.h b/src/drumgizmo.h
index 2f74062..4592143 100644
--- a/src/drumgizmo.h
+++ b/src/drumgizmo.h
@@ -29,6 +29,7 @@
#include <string>
#include <list>
#include <array>
+#include <memory>
#include <zita-resampler/resampler.h>
@@ -74,8 +75,7 @@ public:
private:
static constexpr int MAX_NUM_CHANNELS = 64;
- static constexpr int RESAMPLER_OUTPUT_BUFFER = 4096;
- static constexpr int RESAMPLER_INPUT_BUFFER = 2048;//64;
+ static constexpr int MAX_RESAMPLER_BUFFER_SIZE = 4096 * 8;
protected:
DrumKitLoader loader;
@@ -101,8 +101,8 @@ protected:
SettingsGetter settings_getter;
Random rand;
- Resampler zita[MAX_NUM_CHANNELS];
- sample_t _resampler_input_buffer[MAX_NUM_CHANNELS][4096 * 8];
+ std::array<Resampler, MAX_NUM_CHANNELS> zita;
+ std::array<std::unique_ptr<sample_t>, MAX_NUM_CHANNELS> resampler_input_buffer;
double ratio = 1.0;
};
diff --git a/src/drumkitloader.h b/src/drumkitloader.h
index 2758a98..d14a321 100644
--- a/src/drumkitloader.h
+++ b/src/drumkitloader.h
@@ -36,8 +36,6 @@
#include "drumkit.h"
#include "settings.h"
#include "audioinputengine.h"
-#include "chresampler.h"
-//#include "memchecker.h"
#include "audiocache.h"
//! This class is responsible for loading the drumkits in its own thread.
diff --git a/src/settings.h b/src/settings.h
index e698d20..5137809 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -51,7 +51,7 @@ struct Settings
Atomic<std::string> drumkit_name{""};
Atomic<std::string> drumkit_description{""};
Atomic<std::string> drumkit_version{""};
- Atomic<std::size_t> drumkit_samplerate{0};
+ Atomic<std::size_t> drumkit_samplerate{44100};
//! The maximum amount of memory in bytes that the AudioCache
//! is allowed to use for preloading. Default is 1GB.
diff --git a/test/Makefile.am b/test/Makefile.am
index 50c1b9d..4a5a050 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -3,7 +3,7 @@ SUBDIRS = dgreftest uitests
if ENABLE_TESTS
-TESTS = resource enginetest paintertest resampler configfile audiocache \
+TESTS = resource enginetest paintertest configfile audiocache \
audiocachefile audiocacheidmanager audiocacheeventhandler \
randomtest atomictest syncedsettingstest imagecachetest \
semaphoretest drumkitcreatortest bytesizeparsertest notifiertest \
@@ -109,15 +109,6 @@ paintertest_SOURCES = \
dgtest.cc \
paintertest.cc
-resampler_CXXFLAGS = -DOUTPUT=\"resampler\" \
- $(ZITA_CXXFLAGS) $(SAMPLERATE_CFLAGS) \
- -I$(top_srcdir)/hugin -DDISABLE_HUGIN
-resampler_LDFLAGS = $(ZITA_LIBS) $(SAMPLERATE_LIBS)
-resampler_SOURCES = \
- $(top_srcdir)/src/chresampler.cc \
- dgtest.cc \
- resampler.cc
-
lv2_CXXFLAGS = -DOUTPUT=\"lv2\" \
-I$(top_srcdir)/src \
`pkg-config --cflags serd-0` `pkg-config --cflags lilv-0` \
diff --git a/test/resampler.cc b/test/resampler.cc
deleted file mode 100644
index 6df8b51..0000000
--- a/test/resampler.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- 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 Lesser General Public License as published by
- * the Free Software Foundation; either version 3 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 Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 "dgunit.h"
-
-#include "../src/chresampler.h"
-
-#define BUFSZ 500
-
-static float roundoff(float a) { return a<0.5?0:1; }
-
-class test_resampler
- : public DGUnit
-{
-public:
- test_resampler()
- {
- DGUNIT_TEST(test_resampler::resampling);
- DGUNIT_TEST(test_resampler::resampling_buffer_sizes);
- }
-
- void resampling()
- {
- CHResampler r;
- DGUNIT_ASSERT_EQUAL(1.0, r.getRatio());
-
- r.setup(44100.0, 48000.0);
- DGUNIT_ASSERT_EQUAL(44100.0/48000.0, r.getRatio());
-
- 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();
- DGUNIT_ASSERT_EQUAL((size_t)0, r.getInputSampleCount());
-
- // DGUNIT_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(roundoff(out[i]) == 1.0) outidx = i;
- //printf("in[% 4d]\t= %f\t", i, in[i]);
- //printf("out[% 4d]\t= %f\n", i, out[i]);
- }
-
- DGUNIT_ASSERT(inidx != -1);
- DGUNIT_ASSERT(outidx != -1);
-
- //printf("inidx: %d - outidx: %d\n", inidx, outidx);
- //DGUNIT_ASSERT_EQUAL(71, inidx - outidx); // This does not make sense...
- }
-
- void resampling_buffer_sizes()
- {
- CHResampler r;
- DGUNIT_ASSERT_EQUAL(1.0, r.getRatio());
-
- double infs = 24000;
- double outfs = 48000;
- r.setup(infs, outfs);
- DGUNIT_ASSERT_EQUAL(infs / outfs, r.getRatio());
-
- float in[BUFSZ];
- float out[(int)(BUFSZ / r.getRatio())];
-
- // 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();
- DGUNIT_ASSERT_EQUAL((size_t)0, r.getInputSampleCount());
- DGUNIT_ASSERT_EQUAL((size_t)0, r.getOutputSampleCount());
- }
-};
-
-// Registers the fixture into the 'registry'
-static test_resampler test;