//========================================================= // 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 "trigggui.h" #include "trigg.h" #include "midi.h" #include "midievent.h" //--------------------------------------------------------- // Trigg //--------------------------------------------------------- Trigg::Trigg(const char* name, const MempiHost* h) : Mempi(name, h) { data.note=30; // allow any events data.velocity=127; gui = 0; } //--------------------------------------------------------- // Trigg //--------------------------------------------------------- Trigg::~Trigg() { if (gui) delete gui; } //--------------------------------------------------------- // init //--------------------------------------------------------- bool Trigg::init() { gui = new TriggGui(this, 0); gui->setWindowTitle("MusE: "+QString(name())); gui->show(); return false; } //--------------------------------------------------------- // getGeometry //--------------------------------------------------------- void Trigg::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 Trigg::setGeometry(int x, int y, int w, int h) { gui->resize(QSize(w, h)); gui->move(QPoint(x, y)); } //--------------------------------------------------------- // process //--------------------------------------------------------- void Trigg::process(unsigned , unsigned , MidiEventList* il, MidiEventList* ol) { for (iMidiEvent i = il->begin(); i != il->end(); ++i) { MidiEvent temp=*i; if (temp.isNote() || temp.isNoteOff()) { // for each event modify note and velocity printf("a=%d b=%d isNote=%d isNoteOff=%d\n",temp.dataA(),temp.dataB(),temp.isNote(),temp.isNoteOff()); temp.setA(data.note); if (!temp.isNoteOff()) temp.setB(data.velocity); printf("AFTER a=%d b=%d\n",temp.dataA(),temp.dataB()); } ol->insert(temp); } } void Trigg::getInitData(int* n, const unsigned char** p) const { *n = sizeof(data); *p = (unsigned char*)&data; printf("::getInitData note=%d vel=%d\n",data.note,data.velocity); } void Trigg::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 Trigg(name, h); } extern "C" { static MEMPI descriptor = { "Trigg", "Any note triggers a specified note with specified velocity", "1.0", // filter version string MEMPI_FILTER, // plugin type MEMPI_MAJOR_VERSION, MEMPI_MINOR_VERSION, instantiate }; const MEMPI* mempi_descriptor() { return &descriptor; } }