summaryrefslogtreecommitdiff
path: root/drumgizmo
diff options
context:
space:
mode:
Diffstat (limited to 'drumgizmo')
-rw-r--r--drumgizmo/audiooutputenginedl.cc28
-rw-r--r--drumgizmo/audiooutputenginedl.h3
-rw-r--r--drumgizmo/drumgizmoc.cc4
-rw-r--r--drumgizmo/output/alsa/alsa.cc29
-rw-r--r--drumgizmo/output/dummy/dummy.cc30
-rw-r--r--drumgizmo/output/jackaudio/jackaudio.cc29
-rw-r--r--drumgizmo/output/wavfile/wavfile.cc38
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();
+ }
+}