diff options
author | Robert Jonsson <spamatica@gmail.com> | 2006-08-22 20:16:47 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2006-08-22 20:16:47 +0000 |
commit | fad0a657b804eddbd5fdbb309c82c10171a3f0b6 (patch) | |
tree | e50760292ce114d8c58c2e478e207f97e66c8f99 | |
parent | ac2fa3ea8db683dca17cc39bc94fc8f7122b4d65 (diff) |
Some midi plugin work
-rw-r--r-- | muse/ChangeLog | 2 | ||||
-rw-r--r-- | muse/midiplugins/CMakeLists.txt | 2 | ||||
-rw-r--r-- | muse/midiplugins/trigg/CMakeLists.txt | 47 | ||||
-rw-r--r-- | muse/midiplugins/trigg/trigg.cpp | 131 | ||||
-rw-r--r-- | muse/midiplugins/trigg/trigg.h | 49 | ||||
-rw-r--r-- | muse/midiplugins/trigg/trigggui.cpp | 56 | ||||
-rw-r--r-- | muse/midiplugins/trigg/trigggui.h | 48 | ||||
-rw-r--r-- | muse/midiplugins/trigg/trigggui.ui | 109 |
8 files changed, 443 insertions, 1 deletions
diff --git a/muse/ChangeLog b/muse/ChangeLog index 3523283d..0400c853 100644 --- a/muse/ChangeLog +++ b/muse/ChangeLog @@ -1,3 +1,5 @@ +22.8 (rj) + * playing with midi plugins, one new example plugin: trigg 29.7 (ws) * fixed drawing of waveform in wave track. Concurrent wave file accesses from gui and rt task produced distortions ("crackling"). diff --git a/muse/midiplugins/CMakeLists.txt b/muse/midiplugins/CMakeLists.txt index 7ef43a45..cca0fb38 100644 --- a/muse/midiplugins/CMakeLists.txt +++ b/muse/midiplugins/CMakeLists.txt @@ -18,7 +18,7 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #============================================================================= -subdirs(libmidiplugin filter metronom transform ) +subdirs(libmidiplugin filter metronom transform trigg ) set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SHARED -fPIC" diff --git a/muse/midiplugins/trigg/CMakeLists.txt b/muse/midiplugins/trigg/CMakeLists.txt new file mode 100644 index 00000000..aa270f20 --- /dev/null +++ b/muse/midiplugins/trigg/CMakeLists.txt @@ -0,0 +1,47 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +QT4_WRAP_CPP ( trigg_mocs trigggui.h ) +QT4_WRAP_UI ( trigg_uis trigggui.ui ) + +add_library ( trigg SHARED + trigg.cpp + trigggui.cpp + trigggui.h + ${trigg_mocs} + ${trigg_uis} + ) + +target_link_libraries( trigg + midiplugin awl + ${QT_LIBRARIES} + ) + +# - tell cmake to name target name.so instead of +# libname.so +# - use precompiled header files +# +set_target_properties ( trigg + PROPERTIES PREFIX "" + COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h" + ) + +install_targets ( /lib/${MusE_INSTALL_NAME}/midiplugins/ trigg ) + diff --git a/muse/midiplugins/trigg/trigg.cpp b/muse/midiplugins/trigg/trigg.cpp new file mode 100644 index 00000000..612b9c6b --- /dev/null +++ b/muse/midiplugins/trigg/trigg.cpp @@ -0,0 +1,131 @@ +//========================================================= +// 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 "mpevent.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 , MPEventList* il, MPEventList* ol) + { + + for (iMPEvent 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; } + } + diff --git a/muse/midiplugins/trigg/trigg.h b/muse/midiplugins/trigg/trigg.h new file mode 100644 index 00000000..b7635287 --- /dev/null +++ b/muse/midiplugins/trigg/trigg.h @@ -0,0 +1,49 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filter.h,v 1.4 2005/06/12 08:18:37 wschweer Exp $ +// +// filter - simple midi filter +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __TRIGG_H__ +#define __TRIGG_H__ + +#include "../libmidiplugin/mempi.h" + +//--------------------------------------------------------- +// filter - simple midi filter +//--------------------------------------------------------- +class Trigg : public Mempi { + struct initData { + int note; + int velocity; + } data; + friend class TriggGui; + + TriggGui* gui; + + virtual void process(unsigned, unsigned, MPEventList*, MPEventList*); + + public: + Trigg(const char* name, const MempiHost*); + ~Trigg(); + virtual bool init(); + + void setNote(int t) { data.note = t; } + void setVelocity(int t) { data.velocity = t; } + + virtual bool hasGui() const { return true; } + virtual bool guiVisible() const { return gui->isVisible(); } + virtual void showGui(bool val) { gui->setShown(val); } + virtual void getGeometry(int* x, int* y, int* w, int* h) const; + virtual void setGeometry(int, int, int, int); + + virtual void getInitData(int*, const unsigned char**) const; + virtual void setInitData(int, const unsigned char*); + }; + +#endif + diff --git a/muse/midiplugins/trigg/trigggui.cpp b/muse/midiplugins/trigg/trigggui.cpp new file mode 100644 index 00000000..0fd3c4c6 --- /dev/null +++ b/muse/midiplugins/trigg/trigggui.cpp @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filtergui.cpp,v 1.4 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#include "trigggui.h" +#include "trigg.h" + +//--------------------------------------------------------- +// MidiTriggConfig +//--------------------------------------------------------- + +TriggGui::TriggGui(Trigg* f, QWidget* parent) + : QDialog(parent) + { + setupUi(this); + filter = f; + + connect(noteEntry, SIGNAL(valueChanged(int)), SLOT(setNote(int))); + connect(velocityEntry, SIGNAL(valueChanged(int)), SLOT(setVelocity(int))); + } + +//--------------------------------------------------------- +// init +//--------------------------------------------------------- +void TriggGui::init() + { + Trigg::initData *data; + int n; + filter->getInitData(&n,(const unsigned char **)&data); + printf("::init note=%d vel=%d\n",data->note,data->velocity); + noteEntry->setValue(data->note); + velocityEntry->setValue(data->velocity); + } + +//--------------------------------------------------------- +// setNote +//--------------------------------------------------------- +void TriggGui::setNote(int value) + { + printf("TriggGui::setNote %d\n",value); + filter->setNote(value); + } + +//--------------------------------------------------------- +// setVelocity +//--------------------------------------------------------- +void TriggGui::setVelocity(int value) + { + printf("TriggGui::setVelocity %d\n",value); + filter->setVelocity(value); + } + diff --git a/muse/midiplugins/trigg/trigggui.h b/muse/midiplugins/trigg/trigggui.h new file mode 100644 index 00000000..f4c597fa --- /dev/null +++ b/muse/midiplugins/trigg/trigggui.h @@ -0,0 +1,48 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: filtergui.h,v 1.4 2005/11/06 17:49:34 wschweer Exp $ +// +// (C) Copyright 2005 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __FILTERGUI_H__ +#define __FILTERGUI_H__ + +#include "ui_trigggui.h" + +class Trigg; + +enum { + MIDI_FILTER_NOTEON = 1, + MIDI_FILTER_POLYP = 2, + MIDI_FILTER_CTRL = 4, + MIDI_FILTER_PROGRAM = 8, + MIDI_FILTER_AT = 16, + MIDI_FILTER_PITCH = 32, + MIDI_FILTER_SYSEX = 64 + }; + +//--------------------------------------------------------- +// TriggGui +//--------------------------------------------------------- + +class TriggGui : public QDialog, public Ui::TriggBase { + Q_OBJECT + + Trigg* filter; + + signals: + void hideWindow(); + + private slots: + void setNote(int ); + void setVelocity(int ); + + public: + TriggGui(Trigg*, QWidget* parent=0); + void init(); + }; + +#endif + diff --git a/muse/midiplugins/trigg/trigggui.ui b/muse/midiplugins/trigg/trigggui.ui new file mode 100644 index 00000000..5c096e24 --- /dev/null +++ b/muse/midiplugins/trigg/trigggui.ui @@ -0,0 +1,109 @@ +<ui version="4.0" > + <author></author> + <comment></comment> + <exportmacro></exportmacro> + <class>TriggBase</class> + <widget class="QDialog" name="TriggBase" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>233</width> + <height>125</height> + </rect> + </property> + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>3</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle" > + <string>MusE: Midi Input Trigg</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QGroupBox" name="GroupBoxx" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title" > + <string>Trigg</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <layout class="QGridLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="1" column="1" > + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Velocity</string> + </property> + </widget> + </item> + <item row="0" column="0" > + <widget class="QSpinBox" name="noteEntry" > + <property name="maximum" > + <number>127</number> + </property> + <property name="value" > + <number>30</number> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QSpinBox" name="velocityEntry" > + <property name="maximum" > + <number>127</number> + </property> + <property name="minimum" > + <number>0</number> + </property> + <property name="value" > + <number>127</number> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="QLabel" name="label" > + <property name="text" > + <string>Note</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <layoutdefault spacing="6" margin="11" /> + <pixmapfunction></pixmapfunction> + <resources/> + <connections/> +</ui> |