From 0e048dee411cc20beb2a8667e5bb339f9b7fb939 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 17 May 2014 21:27:52 +0200 Subject: New resample feature on output channels. --- drumgizmo/audiooutputenginedl.cc | 12 ++++++++++++ drumgizmo/audiooutputenginedl.h | 3 +++ drumgizmo/output/jackaudio/jackaudio.cc | 12 ++++++++++++ 3 files changed, 27 insertions(+) (limited to 'drumgizmo') diff --git a/drumgizmo/audiooutputenginedl.cc b/drumgizmo/audiooutputenginedl.cc index 513d21b..fcedd9d 100644 --- a/drumgizmo/audiooutputenginedl.cc +++ b/drumgizmo/audiooutputenginedl.cc @@ -111,6 +111,12 @@ AudioOutputEngineDL::AudioOutputEngineDL(std::string name) o_bufsize = NULL; } + o_samplerate = (output_samplerate_func_t) dlsym(lib, "samplerate"); + dlsym_error = dlerror(); + if(dlsym_error) { + o_samplerate = NULL; + } + ptr = o_create(); if(is_jack_plugin) { @@ -181,6 +187,12 @@ size_t AudioOutputEngineDL::getBufferSize() return 1024; } +size_t AudioOutputEngineDL::samplerate() +{ + if(o_samplerate) return o_samplerate(ptr); + return UNKNOWN_SAMPLERATE; +} + #ifdef TEST_AUDIOOUTPUTENGINEDL //Additional dependency files //deps: diff --git a/drumgizmo/audiooutputenginedl.h b/drumgizmo/audiooutputenginedl.h index 471247e..75460f3 100644 --- a/drumgizmo/audiooutputenginedl.h +++ b/drumgizmo/audiooutputenginedl.h @@ -46,6 +46,7 @@ typedef void (*output_pre_func_t)(void*, size_t); typedef void (*output_run_func_t)(void*,int,sample_t*,size_t); typedef void (*output_post_func_t)(void*, size_t); typedef size_t (*output_bufsize_func_t)(void*); +typedef size_t (*output_samplerate_func_t)(void*); class AudioOutputEngineDL : public AudioOutputEngine { public: @@ -64,6 +65,7 @@ public: void post(size_t nsamples); size_t getBufferSize(); + size_t samplerate(); private: void *ptr; @@ -77,6 +79,7 @@ private: output_run_func_t o_run; output_post_func_t o_post; output_bufsize_func_t o_bufsize; + output_samplerate_func_t o_samplerate; bool is_jack_plugin; JackClient *jackclient; diff --git a/drumgizmo/output/jackaudio/jackaudio.cc b/drumgizmo/output/jackaudio/jackaudio.cc index 2afe1ea..b7fa4f9 100644 --- a/drumgizmo/output/jackaudio/jackaudio.cc +++ b/drumgizmo/output/jackaudio/jackaudio.cc @@ -54,6 +54,7 @@ public: void jack_process(jack_nframes_t nframes); size_t bufsize(); + size_t samplerate(); private: JackClient *jackclient; @@ -146,6 +147,11 @@ size_t JackAudio::bufsize() return jack_get_buffer_size(jackclient->jack_client); } +size_t JackAudio::samplerate() +{ + return jack_get_sample_rate(jackclient->jack_client); +} + extern "C" { void *create() { @@ -205,6 +211,12 @@ extern "C" { JackAudio *jack = (JackAudio*)h; return jack->bufsize(); } + + size_t samplerate(void *h) + { + JackAudio *jack = (JackAudio*)h; + return jack->samplerate(); + } } #ifdef TEST_AUDIOINPUTENGINEJACKAUDIO -- cgit v1.2.3 From 618ccf981bf16e848912cf8c4d72f58c7134642a Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Mon, 3 Nov 2014 18:55:03 +0100 Subject: Use Drumgizmo::setSamplerate to control resampler target samplerate. --- drumgizmo/drumgizmoc.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drumgizmo') diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index c96736f..d5fa817 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -248,6 +248,8 @@ int main(int argc, char *argv[]) return 1; } + gizmo.setSamplerate(oe->samplerate()); + if(!gizmo.init(preload)) { printf("Failed init engine.\n"); return 1; -- cgit v1.2.3 From 36630b0fa3d29c54a666d3bb00a2fac804fa7df9 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Thu, 6 Nov 2014 08:03:56 +0100 Subject: Make cli output modules work with new samplerate() design. --- drumgizmo/audiooutputenginedl.cc | 22 +++---------------- drumgizmo/drumgizmoc.cc | 2 +- drumgizmo/output/alsa/alsa.cc | 29 +++++++++++-------------- drumgizmo/output/dummy/dummy.cc | 30 +++++++++++--------------- drumgizmo/output/jackaudio/jackaudio.cc | 17 --------------- drumgizmo/output/wavfile/wavfile.cc | 38 +++++++++++++++------------------ 6 files changed, 46 insertions(+), 92 deletions(-) (limited to 'drumgizmo') diff --git a/drumgizmo/audiooutputenginedl.cc b/drumgizmo/audiooutputenginedl.cc index fcedd9d..2648e8f 100644 --- a/drumgizmo/audiooutputenginedl.cc +++ b/drumgizmo/audiooutputenginedl.cc @@ -114,7 +114,8 @@ AudioOutputEngineDL::AudioOutputEngineDL(std::string name) o_samplerate = (output_samplerate_func_t) dlsym(lib, "samplerate"); dlsym_error = dlerror(); if(dlsym_error) { - o_samplerate = NULL; + printf("Cannot load symbol samplerate: %s\n", dlsym_error); + return; } ptr = o_create(); @@ -190,22 +191,5 @@ size_t AudioOutputEngineDL::getBufferSize() size_t AudioOutputEngineDL::samplerate() { if(o_samplerate) return o_samplerate(ptr); - return UNKNOWN_SAMPLERATE; + return 44100; } - -#ifdef TEST_AUDIOOUTPUTENGINEDL -//Additional dependency files -//deps: -//Required cflags (autoconf vars may be used) -//cflags: -//Required link options (autoconf vars may be used) -//libs: -#include "test.h" - -TEST_BEGIN; - -// TODO: Put some testcode here (see test.h for usable macros). - -TEST_END; - -#endif/*TEST_AUDIOOUTPUTENGINEDL*/ diff --git a/drumgizmo/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index d5fa817..61f8eaa 100644 --- a/drumgizmo/drumgizmoc.cc +++ b/drumgizmo/drumgizmoc.cc @@ -187,7 +187,7 @@ int main(int argc, char *argv[]) return 1; } - AudioOutputEngine *oe = new AudioOutputEngineDL(outputengine); + AudioOutputEngineDL *oe = new AudioOutputEngineDL(outputengine); if(oe == NULL) { printf("Invalid output engine: %s\n", outputengine.c_str()); diff --git a/drumgizmo/output/alsa/alsa.cc b/drumgizmo/output/alsa/alsa.cc index 7b3a395..dc2ac73 100644 --- a/drumgizmo/output/alsa/alsa.cc +++ b/drumgizmo/output/alsa/alsa.cc @@ -49,6 +49,7 @@ public: void pre(size_t size); void run(int channel, sample_t* data, size_t size); void post(size_t size); + size_t samplerate(); private: snd_pcm_t *handle; @@ -157,6 +158,11 @@ void Alsa::post(size_t size) snd_pcm_writei(handle, data, size); } +size_t Alsa::samplerate() +{ + return srate; +} + extern "C" { void *create() { @@ -210,21 +216,10 @@ extern "C" { Alsa *alsa = (Alsa*)h; alsa->post(s); } -} - -#ifdef TEST_AUDIOOUTPUTENGINEALSA -//Additional dependency files -//deps: -//Required cflags (autoconf vars may be used) -//cflags: -//Required link options (autoconf vars may be used) -//libs: -#include "test.h" - -TEST_BEGIN; -// TODO: Put some testcode here (see test.h for usable macros). - -TEST_END; - -#endif/*TEST_AUDIOOUTPUTENGINEALSA*/ + size_t samplerate(void *h) + { + Alsa *alsa = (Alsa*)h; + return alsa->samplerate(); + } +} diff --git a/drumgizmo/output/dummy/dummy.cc b/drumgizmo/output/dummy/dummy.cc index cd210dc..e60f2b7 100644 --- a/drumgizmo/output/dummy/dummy.cc +++ b/drumgizmo/output/dummy/dummy.cc @@ -43,6 +43,8 @@ public: void pre(size_t size); void run(int channel, sample_t* data, size_t size); void post(size_t size); + + size_t samplerate(); }; Dummy::Dummy() @@ -83,6 +85,11 @@ void Dummy::post(size_t size) { } +size_t Dummy::samplerate() +{ + return 44100; +} + extern "C" { void *create() { @@ -136,21 +143,10 @@ extern "C" { Dummy *dummy = (Dummy*)h; dummy->post(size); } -} - -#ifdef TEST_AUDIOOUTPUTENGINEDUMMY -//Additional dependency files -//deps: -//Required cflags (autoconf vars may be used) -//cflags: -//Required link options (autoconf vars may be used) -//libs: -#include "test.h" - -TEST_BEGIN; -// TODO: Put some testcode here (see test.h for usable macros). - -TEST_END; - -#endif/*TEST_AUDIOOUTPUTENGINEDUMMY*/ + size_t samplerate(void *h) + { + Dummy *dummy = (Dummy*)h; + return dummy->samplerate(); + } +} diff --git a/drumgizmo/output/jackaudio/jackaudio.cc b/drumgizmo/output/jackaudio/jackaudio.cc index b7fa4f9..5c04146 100644 --- a/drumgizmo/output/jackaudio/jackaudio.cc +++ b/drumgizmo/output/jackaudio/jackaudio.cc @@ -218,20 +218,3 @@ extern "C" { return jack->samplerate(); } } - -#ifdef TEST_AUDIOINPUTENGINEJACKAUDIO -//Additional dependency files -//deps: -//Required cflags (autoconf vars may be used) -//cflags: -//Required link options (autoconf vars may be used) -//libs: -#include "test.h" - -TEST_BEGIN; - -// TODO: Put some testcode here (see test.h for usable macros). - -TEST_END; - -#endif/*TEST_AUDIOINPUTENGINEJACKAUDIO*/ diff --git a/drumgizmo/output/wavfile/wavfile.cc b/drumgizmo/output/wavfile/wavfile.cc index cb95715..fa4128e 100644 --- a/drumgizmo/output/wavfile/wavfile.cc +++ b/drumgizmo/output/wavfile/wavfile.cc @@ -44,6 +44,7 @@ public: void pre(size_t size); void run(int channel, sample_t* data, size_t size); void post(size_t size); + size_t samplerate(); private: SF_INFO sf_info; @@ -58,6 +59,10 @@ WavFile::WavFile() { fh = NULL; filename = "output"; + + sf_info.channels = 1;//channels; + sf_info.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; + sf_info.samplerate = 44100; } WavFile::~WavFile() @@ -74,10 +79,6 @@ WavFile::~WavFile() bool WavFile::init(int channels, char *cnames[]) { this->channels = channels; - - sf_info.channels = 1;//channels; - sf_info.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; - sf_info.samplerate = 44100; fh = (SNDFILE **)malloc(sizeof(SNDFILE *)*channels); @@ -102,6 +103,7 @@ bool WavFile::init(int channels, char *cnames[]) void WavFile::setParm(std::string parm, std::string value) { if(parm == "file") filename = value; + if(parm == "srate") sf_info.samplerate = atoi(value.c_str()); } bool WavFile::start() @@ -126,6 +128,11 @@ void WavFile::post(size_t size) { } +size_t WavFile::samplerate() +{ + return sf_info.samplerate; +} + extern "C" { void *create() { @@ -179,21 +186,10 @@ extern "C" { WavFile *sndfile = (WavFile*)h; sndfile->post(s); } -} - -#ifdef TEST_AUDIOOUTPUTENGINESNDFILE -//Additional dependency files -//deps: -//Required cflags (autoconf vars may be used) -//cflags: -//Required link options (autoconf vars may be used) -//libs: -#include "test.h" - -TEST_BEGIN; - -// TODO: Put some testcode here (see test.h for usable macros). -TEST_END; - -#endif/*TEST_AUDIOOUTPUTENGINESNDFILE*/ + size_t samplerate(void *h) + { + WavFile *wavfile = (WavFile*)h; + return wavfile->samplerate(); + } +} -- cgit v1.2.3