summaryrefslogtreecommitdiff
path: root/attic/muse_qt4_evolution/midiplugins/filter/filter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse_qt4_evolution/midiplugins/filter/filter.cpp')
-rw-r--r--attic/muse_qt4_evolution/midiplugins/filter/filter.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/attic/muse_qt4_evolution/midiplugins/filter/filter.cpp b/attic/muse_qt4_evolution/midiplugins/filter/filter.cpp
new file mode 100644
index 00000000..ac99449e
--- /dev/null
+++ b/attic/muse_qt4_evolution/midiplugins/filter/filter.cpp
@@ -0,0 +1,167 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: filter.cpp,v 1.10 2005/11/06 17:49:34 wschweer Exp $
+//
+// filter - simple midi filter
+//
+// (C) Copyright 2005 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "filtergui.h"
+#include "filter.h"
+#include "midi.h"
+
+//---------------------------------------------------------
+// Filter
+//---------------------------------------------------------
+
+Filter::Filter(const char* name, const MempiHost* h)
+ : Mempi(name, h)
+ {
+ data.type = 0; // allow any events
+ for (int i = 0; i < 4; ++i)
+ data.ctrl[i] = -1;
+ gui = 0;
+ }
+
+//---------------------------------------------------------
+// Filter
+//---------------------------------------------------------
+
+Filter::~Filter()
+ {
+ if (gui)
+ delete gui;
+ }
+
+//---------------------------------------------------------
+// init
+//---------------------------------------------------------
+
+bool Filter::init()
+ {
+ gui = new FilterGui(this, 0);
+ gui->setWindowTitle("MusE: "+QString(name()));
+ gui->show();
+ return false;
+ }
+
+//---------------------------------------------------------
+// getGeometry
+//---------------------------------------------------------
+
+void Filter::getGeometry(int* x, int* y, int* w, int* h) const
+ {
+ QPoint pos(gui->pos());
+ QSize size(gui->size());
+ *x = pos.x();
+ *y = pos.y();
+ *w = size.width();
+ *h = size.height();
+ }
+
+//---------------------------------------------------------
+// setGeometry
+//---------------------------------------------------------
+
+void Filter::setGeometry(int x, int y, int w, int h)
+ {
+ gui->resize(QSize(w, h));
+ gui->move(QPoint(x, y));
+ }
+
+//---------------------------------------------------------
+// process
+//---------------------------------------------------------
+
+void Filter::process(unsigned, unsigned, MidiEventList* il, MidiEventList* ol)
+ {
+ for (iMidiEvent i = il->begin(); i != il->end(); ++i) {
+ if (!filterEvent(*i))
+ ol->insert(*i);
+ }
+ }
+
+//---------------------------------------------------------
+// filterEvent
+// return true if event filtered
+//---------------------------------------------------------
+
+bool Filter::filterEvent(const MidiEvent& event)
+ {
+ switch(event.type()) {
+ case ME_NOTEON:
+ case ME_NOTEOFF:
+ if (data.type & MIDI_FILTER_NOTEON)
+ return true;
+ break;
+ case ME_POLYAFTER:
+ if (data.type & MIDI_FILTER_POLYP)
+ return true;
+ break;
+ case ME_CONTROLLER:
+ if (data.type & MIDI_FILTER_CTRL)
+ return true;
+ for (int i = 0; i < 4; ++i) {
+ if (data.ctrl[i] == event.dataA())
+ return true;
+ }
+ break;
+ case ME_PROGRAM:
+ if (data.type & MIDI_FILTER_PROGRAM)
+ return true;
+ break;
+ case ME_AFTERTOUCH:
+ if (data.type & MIDI_FILTER_AT)
+ return true;
+ break;
+ case ME_PITCHBEND:
+ if (data.type & MIDI_FILTER_PITCH)
+ return true;
+ break;
+ case ME_SYSEX:
+ if (data.type & MIDI_FILTER_SYSEX)
+ return true;
+ break;
+ default:
+ break;
+ }
+ return false;
+ }
+
+void Filter::getInitData(int* n, const unsigned char** p) const
+ {
+ *n = sizeof(data);
+ *p = (unsigned char*)&data;
+ }
+
+void Filter::setInitData(int n, const unsigned char* p)
+ {
+ memcpy((void*)&data, p, n);
+ if (gui)
+ gui->init();
+ }
+
+//---------------------------------------------------------
+// inst
+//---------------------------------------------------------
+
+static Mempi* instantiate(const char* name, const MempiHost* h)
+ {
+ return new Filter(name, h);
+ }
+
+extern "C" {
+ static MEMPI descriptor = {
+ "Filter",
+ "MusE Simple Midi Filter",
+ "0.1", // filter version string
+ MEMPI_FILTER, // plugin type
+ MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION,
+ instantiate
+ };
+
+ const MEMPI* mempi_descriptor() { return &descriptor; }
+ }
+