diff options
| -rw-r--r-- | configure.ac | 99 | ||||
| -rw-r--r-- | plugin/Makefile.mingw32.in | 6 | ||||
| -rw-r--r-- | src/Makefile.am | 6 | ||||
| -rw-r--r-- | src/chresampler.cc | 220 | ||||
| -rw-r--r-- | src/chresampler.h | 107 | ||||
| -rw-r--r-- | src/drumgizmo.cc | 14 | ||||
| -rw-r--r-- | src/drumgizmo.h | 8 | ||||
| -rw-r--r-- | src/drumkitloader.h | 2 | ||||
| -rw-r--r-- | src/settings.h | 2 | ||||
| -rw-r--r-- | test/Makefile.am | 11 | ||||
| -rw-r--r-- | test/resampler.cc | 110 | 
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; | 
