summaryrefslogtreecommitdiff
path: root/drumgizmo/input
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2013-05-20 08:26:48 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2013-05-20 08:26:48 +0200
commita609e6895a96db134697acce266e0cb94488f60b (patch)
tree77d854e202e973349e3500b10dc36069e388105b /drumgizmo/input
parent98430d96a1d25cba36ad304fde6518e493fe3441 (diff)
Centralise jackclient code for reuse among the jack client modules. Implement most of the jackaudio output module (probably broken atm.).
Diffstat (limited to 'drumgizmo/input')
-rw-r--r--drumgizmo/input/jackmidi/Makefile.am8
-rw-r--r--drumgizmo/input/jackmidi/jackmidi.cc46
2 files changed, 38 insertions, 16 deletions
diff --git a/drumgizmo/input/jackmidi/Makefile.am b/drumgizmo/input/jackmidi/Makefile.am
index cd77a74..809ca96 100644
--- a/drumgizmo/input/jackmidi/Makefile.am
+++ b/drumgizmo/input/jackmidi/Makefile.am
@@ -1,6 +1,10 @@
jackmidisources = \
- jackmidi.cc
+ jackmidi.cc \
+ $(top_srcdir)/src/midimapper.cc \
+ $(top_srcdir)/src/midimapparser.cc \
+ $(top_srcdir)/src/saxparser.cc \
+ $(top_srcdir)/hugin/hugin.c
if HAVE_INPUT_JACKMIDI
@@ -20,7 +24,7 @@ lib_LTLIBRARIES = $(jackmidiltlibs)
libdir = $(INPUT_PLUGIN_DIR)
-AM_CPPFLAGS = -I$(top_srcdir)/include
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/src -I$(top_srcdir)/hugin
libjackmidi_la_LDFLAGS =
libjackmidi_la_LIBADD =
libjackmidi_la_SOURCES = $(jackmidibuildsources)
diff --git a/drumgizmo/input/jackmidi/jackmidi.cc b/drumgizmo/input/jackmidi/jackmidi.cc
index 7af257e..52c0bb8 100644
--- a/drumgizmo/input/jackmidi/jackmidi.cc
+++ b/drumgizmo/input/jackmidi/jackmidi.cc
@@ -30,6 +30,8 @@
#include <string>
#include <stdio.h>
+#include <midimapper.h>
+#include <midimapparser.h>
#define NOTE_ON 0x90
@@ -65,12 +67,13 @@ private:
event_t *list;
size_t listsize;
+
+ std::string midimapfile;
+ MidiMapper mmap;
};
JackMidi::JackMidi()
{
- jackclient = init_jack_client();
- jackclient->addJackProcess(this);
pos = 0;
list = (event_t *)malloc(sizeof(event_t) * 1000);
@@ -79,8 +82,6 @@ JackMidi::JackMidi()
JackMidi::~JackMidi()
{
- jackclient->removeJackProcess(this);
- close_jack_client();
}
bool JackMidi::init(int instruments, char *inames[])
@@ -91,17 +92,29 @@ bool JackMidi::init(int instruments, char *inames[])
JackPortIsInput,// | JackPortIsTerminal,
0);
+ MidiMapParser p(midimapfile);
+ if(p.parse()) return false;
+ mmap.midimap = p.midimap;
+
+ for(int i = 0; i < instruments; i++) {
+ mmap.instrmap[inames[i]] = i;
+ }
+
return true;
}
void JackMidi::setParm(std::string parm, std::string value)
{
- if(parm == "map") loadMap(value);
+ if(parm == "map") midimapfile = value;
+ if(parm == "jack_client") {
+ sscanf(value.c_str(), "%p", &jackclient);
+ if(jackclient) jackclient->addJackProcess(this);
+ }
}
bool JackMidi::start()
{
- jackclient->activate();
+ // jackclient->activate();
return true;
}
@@ -124,6 +137,8 @@ event_t *JackMidi::run(size_t pos, size_t len, size_t *nevents)
void JackMidi::jack_process(jack_nframes_t nframes)
{
+ printf("i"); fflush(stdout);
+
void *midibuffer = jack_port_get_buffer(midi_port, nframes);
jack_nframes_t midievents = jack_midi_get_event_count(midibuffer);
@@ -139,13 +154,17 @@ void JackMidi::jack_process(jack_nframes_t nframes)
int velocity = event.buffer[2];
printf("Event key:%d vel:%d\n", key, velocity);
-
- if(velocity) {
- list[listsize].type = TYPE_ONSET;
- list[listsize].instrument = key;
- list[listsize].velocity = velocity / 127.0;
- list[listsize].offset = event.time;
- listsize++;
+
+ int i = mmap.lookup(key);
+ if(i != -1) {
+
+ if(velocity) {
+ list[listsize].type = TYPE_ONSET;
+ list[listsize].instrument = i;
+ list[listsize].velocity = velocity / 127.0;
+ list[listsize].offset = event.time;
+ listsize++;
+ }
}
}
@@ -154,7 +173,6 @@ void JackMidi::jack_process(jack_nframes_t nframes)
pos += nframes;
}
-
void JackMidi::post()
{
}