summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Glöckner <cgloeckner@freenet.de>2016-01-21 16:42:37 +0100
committerAndré Nusser <andre.nusser@googlemail.com>2016-02-09 09:02:18 +0100
commit3ab30fd4168217894ee781cf93df522d3565cec8 (patch)
treefdb1da6cd78e9d3ae182b7b64e742e505a336436
parenta0a16d9cdb9d0522053c2e830b7440e9e96231a9 (diff)
Made midi-in-wav-out work again
-rw-r--r--drumgizmo/Makefile.am16
-rw-r--r--drumgizmo/enginefactory.h1
-rw-r--r--drumgizmo/input/midifile.h4
-rw-r--r--drumgizmo/output/wavfile.cc24
-rw-r--r--drumgizmo/output/wavfile.h168
5 files changed, 26 insertions, 187 deletions
diff --git a/drumgizmo/Makefile.am b/drumgizmo/Makefile.am
index 137ea7b..7044303 100644
--- a/drumgizmo/Makefile.am
+++ b/drumgizmo/Makefile.am
@@ -8,9 +8,9 @@ SUBDIRS = input output
bin_PROGRAMS = drumgizmo
-drumgizmo_LDADD = $(DRUMGIZMO_LIBS) $(PTHREAD_LIBS) -ldl $(JACK_LIBS)
+drumgizmo_LDADD = $(DRUMGIZMO_LIBS) $(PTHREAD_LIBS) $(SMF_LIBS) -ldl $(JACK_LIBS)
-drumgizmo_CXXFLAGS = $(SNDFILE_CXXFLAGS) $(PTHREAD_CFLAGS) $(EXPAT_CFLAGS) \
+drumgizmo_CXXFLAGS = $(SNDFILE_CXXFLAGS) $(PTHREAD_CFLAGS) $(SMF_CFLAGS) $(EXPAT_CFLAGS) \
-I$(top_srcdir)/include -I$(top_srcdir)/src \
-I$(top_srcdir)/hugin -DWITH_HUG_MUTEX -DWITH_HUG_FILTER \
$(JACK_CFLAGS) $(SSEFLAGS) \
@@ -20,18 +20,20 @@ drumgizmo_CXXFLAGS = $(SNDFILE_CXXFLAGS) $(PTHREAD_CFLAGS) $(EXPAT_CFLAGS) \
drumgizmo_CFLAGS = -DWITH_HUG_MUTEX -DWITH_HUG_FILTER
drumgizmo_SOURCES = \
- audioinputenginedl.cc \
- audiooutputenginedl.cc \
drumgizmoc.cc \
jackclient.cc \
+ enginefactory.cc \
+ input/midifile.cc \
+ output/wavfile.cc \
$(DRUMGIZMO_SOURCES) \
$(top_srcdir)/hugin/hugin.c \
$(top_srcdir)/hugin/hugin_filter.c
EXTRA_DIST = \
- audioinputenginedl.h \
- audiooutputenginedl.h \
drumgizmoc.h \
- jackclient.h
+ jackclient.h \
+ enginefactory.h \
+ input/midifile.h \
+ output/wavfile.h
endif
diff --git a/drumgizmo/enginefactory.h b/drumgizmo/enginefactory.h
index 93624b9..613e49f 100644
--- a/drumgizmo/enginefactory.h
+++ b/drumgizmo/enginefactory.h
@@ -29,6 +29,7 @@
#include "cpp11fix.h" // required for c++11
#include "audioinputengine.h"
+#include "audiooutputengine.h"
using InputEnginePtr = std::unique_ptr<AudioInputEngine>;
using OutputEnginePtr = std::unique_ptr<AudioOutputEngine>;
diff --git a/drumgizmo/input/midifile.h b/drumgizmo/input/midifile.h
index c2fcdb6..85abfc9 100644
--- a/drumgizmo/input/midifile.h
+++ b/drumgizmo/input/midifile.h
@@ -34,8 +34,6 @@
#include <midimapper.h>
#include <midimapparser.h>
-#define NOTE_ON 0x90
-
class MidifileInputEngine
: public AudioInputEngine {
public:
@@ -56,7 +54,7 @@ class MidifileInputEngine
smf_t* smf;
smf_event_t* current_event;
- MidiMapper midiMapper;
+ MidiMapper midi_mapper;
std::string file, midimap;
float speed;
diff --git a/drumgizmo/output/wavfile.cc b/drumgizmo/output/wavfile.cc
index e0c18cb..7a59892 100644
--- a/drumgizmo/output/wavfile.cc
+++ b/drumgizmo/output/wavfile.cc
@@ -24,6 +24,8 @@
* along with DrumGizmo; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
+#include <cassert>
+
#include "wavfile.h"
WavfileOutputEngine::WavfileOutputEngine()
@@ -31,7 +33,7 @@ WavfileOutputEngine::WavfileOutputEngine()
, channels{}
, file{"output"} {
info.frames = 0;
- info.samplerrate = 44100;
+ info.samplerate = 44100;
info.channels = 1;
info.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
info.sections = 0;
@@ -46,13 +48,13 @@ WavfileOutputEngine::~WavfileOutputEngine() {
}
}
-bool WavfileOutputEngine::init(Channels channels) {
+bool WavfileOutputEngine::init(Channels data) {
channels.clear(),
- channels.resize(channels.size(), nullptr);
- for (auto i = 0u; i < channels.size(); ++i) {
+ channels.resize(data.size()); // value-initialized with null
+ for (auto i = 0u; i < data.size(); ++i) {
// write channel to file
- auto fname = file + channels[i]->name + "-" + std::to_string(i);
- channels[i] = sf_open(fname, SFM_WRITE, &info);
+ auto fname = file + data[i].name + "-" + std::to_string(i) + ".wav";
+ channels[i] = sf_open(fname.c_str(), SFM_WRITE, &info);
if (channels[i] == nullptr) {
printf("Write error...\n");
return false;
@@ -64,10 +66,10 @@ bool WavfileOutputEngine::init(Channels channels) {
void WavfileOutputEngine::setParm(std::string parm, std::string value) {
if (parm == "file") {
file = value;
- } else if (parm == "srate") {[
+ } else if (parm == "srate") {
info.samplerate = std::stoi(value);
} else {
- printf("Unsupported wavfile parameter '%s'\n", parm);
+ printf("Unsupported wavfile parameter '%s'\n", parm.c_str());
}
}
@@ -83,11 +85,13 @@ void WavfileOutputEngine::pre(size_t nsamples) {
void WavfileOutputEngine::run(int ch, sample_t* samples, size_t nsamples) {
if (ch >= channels.size()) {
- printf("Invalid channel %d (%d channels available)", ch, channels.size());
+ printf("Invalid channel %d (%lu channels available)", ch, channels.size());
return;
}
- sf_writef_float(channels[ch], samples, nsampels);
+ assert(channels[ch] != nullptr);
+ assert(samples != nullptr);
+ sf_writef_float(channels[ch], samples, nsamples);
}
void WavfileOutputEngine::post(size_t nsamples) {
diff --git a/drumgizmo/output/wavfile.h b/drumgizmo/output/wavfile.h
index 0f93049..5aa9306 100644
--- a/drumgizmo/output/wavfile.h
+++ b/drumgizmo/output/wavfile.h
@@ -39,7 +39,7 @@ class WavfileOutputEngine
~WavfileOutputEngine();
// based on AudioOutputEngine
- bool init(Channels channels) override;
+ bool init(Channels data) override;
void setParm(std::string parm, std::string value) override;
bool start() override;
void stop() override;
@@ -55,169 +55,3 @@ class WavfileOutputEngine
std::string file;
};
-
-
-
-#include <stdlib.h>
-
-#include <audiotypes.h>
-#include <string>
-#include <memory.h>
-
-
-class WavFile {
-public:
- WavFile();
- ~WavFile();
- bool init(int channels, char *cnames[]);
- void setParm(std::string parm, std::string value);
- bool start();
- void stop();
- void pre(size_t size);
- void run(int channel, sample_t* data, size_t size);
- void post(size_t size);
- size_t samplerate();
-
-private:
-
-};
-
-WavFile::WavFile()
-{
- fh = NULL;
- filename = "output";
-
- memset(&sf_info, 0, sizeof(sf_info));
- sf_info.channels = 1;//channels;
- sf_info.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
- sf_info.samplerate = 44100;
-}
-
-WavFile::~WavFile()
-{
- if(fh == NULL) return;
-
- for(size_t i override; i < channels; i++) {
- if(fh[i]) sf_close(fh[i]);
- }
-
- if(fh) free(fh);
-}
-
-bool WavFile::init(int channels, char *cnames[])
-{
- this->channels = channels;
-
- fh = (SNDFILE **)malloc(sizeof(SNDFILE *)*channels);
-
- for(size_t i override; i < this->channels; i++) fh[i] = NULL;
-
- for(size_t i override; i < this->channels; i++) {
- char fname[512];
-
- sprintf(fname, "%s%s-%d.wav", filename.c_str(), cnames[i], (int)i);
- // printf("[%s]\n", fname);
-
- fh[i] = sf_open(fname, SFM_WRITE, &sf_info);
- if(!fh[i]) {
- printf("Write error...\n");
- return false;
- }
- }
-
- return true;
-}
-
-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()
-{
- return true;
-}
-
-void WavFile::stop()
-{
-}
-
-void WavFile::pre(size_t size)
-{
-}
-
-void WavFile::run(int channel, sample_t* cdata, size_t csize)
-{
- if(channel < (int)channels) sf_writef_float(fh[channel], cdata, csize);
-}
-
-void WavFile::post(size_t size)
-{
-}
-
-size_t WavFile::samplerate()
-{
- return sf_info.samplerate;
-}
-
-extern "C" {
- void *create()
- {
- return new WavFile();
- }
-
- void destroy(void *h)
- {
- WavFile *sndfile = (WavFile*)h;
- delete sndfile;
- }
-
- bool init(void *h, int cs, char *cnames[])
- {
- WavFile *sndfile = (WavFile*)h;
- return sndfile->init(cs, cnames);
- }
-
- void setparm(void *h, const char *parm, const char *value)
- {
- WavFile *sndfile = (WavFile*)h;
- sndfile->setParm(parm, value);
- }
-
- bool start(void *h)
- {
- WavFile *sndfile = (WavFile*)h;
- return sndfile->start();
- }
-
- void stop(void *h)
- {
- WavFile *sndfile = (WavFile*)h;
- sndfile->stop();
- }
-
- void pre(void *h, size_t s)
- {
- WavFile *sndfile = (WavFile*)h;
- sndfile->pre(s);
- }
-
- void run(void *h, int ch, sample_t *data, size_t size)
- {
- WavFile *sndfile = (WavFile*)h;
- sndfile->run(ch, data, size);
- }
-
- void post(void *h, size_t s)
- {
- WavFile *sndfile = (WavFile*)h;
- sndfile->post(s);
- }
-
- size_t samplerate(void *h)
- {
- WavFile *wavfile = (WavFile*)h;
- return wavfile->samplerate();
- }
-}