diff options
Diffstat (limited to 'drumgizmo')
-rw-r--r-- | drumgizmo/audiooutputenginedl.cc | 28 | ||||
-rw-r--r-- | drumgizmo/audiooutputenginedl.h | 3 | ||||
-rw-r--r-- | drumgizmo/drumgizmoc.cc | 4 | ||||
-rw-r--r-- | drumgizmo/output/alsa/alsa.cc | 29 | ||||
-rw-r--r-- | drumgizmo/output/dummy/dummy.cc | 30 | ||||
-rw-r--r-- | drumgizmo/output/jackaudio/jackaudio.cc | 29 | ||||
-rw-r--r-- | drumgizmo/output/wavfile/wavfile.cc | 38 |
7 files changed, 72 insertions, 89 deletions
diff --git a/drumgizmo/audiooutputenginedl.cc b/drumgizmo/audiooutputenginedl.cc index 513d21b..2648e8f 100644 --- a/drumgizmo/audiooutputenginedl.cc +++ b/drumgizmo/audiooutputenginedl.cc @@ -111,6 +111,13 @@ AudioOutputEngineDL::AudioOutputEngineDL(std::string name) o_bufsize = NULL; } + o_samplerate = (output_samplerate_func_t) dlsym(lib, "samplerate"); + dlsym_error = dlerror(); + if(dlsym_error) { + printf("Cannot load symbol samplerate: %s\n", dlsym_error); + return; + } + ptr = o_create(); if(is_jack_plugin) { @@ -181,19 +188,8 @@ size_t AudioOutputEngineDL::getBufferSize() return 1024; } -#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*/ +size_t AudioOutputEngineDL::samplerate() +{ + if(o_samplerate) return o_samplerate(ptr); + return 44100; +} 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/drumgizmoc.cc b/drumgizmo/drumgizmoc.cc index c96736f..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()); @@ -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; 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 2afe1ea..5c04146 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,21 +211,10 @@ extern "C" { JackAudio *jack = (JackAudio*)h; return jack->bufsize(); } -} - -#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*/ + size_t samplerate(void *h) + { + JackAudio *jack = (JackAudio*)h; + return jack->samplerate(); + } +} 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(); + } +} |