summaryrefslogtreecommitdiff
path: root/muse2/muse/midictrl.h
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
committerRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
commit8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 (patch)
tree064ad3f2bf8daab0ad27b128abd86a9bbdb1e496 /muse2/muse/midictrl.h
parenta27706d9629e8b592cca4659f865b70adef24e6d (diff)
new branch muse2, first checkin
Diffstat (limited to 'muse2/muse/midictrl.h')
-rw-r--r--muse2/muse/midictrl.h255
1 files changed, 255 insertions, 0 deletions
diff --git a/muse2/muse/midictrl.h b/muse2/muse/midictrl.h
new file mode 100644
index 00000000..69650a65
--- /dev/null
+++ b/muse2/muse/midictrl.h
@@ -0,0 +1,255 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: midictrl.h,v 1.16.2.8 2009/11/25 09:09:43 terminator356 Exp $
+//
+// (C) Copyright 1999-2003 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MIDICTRL_H__
+#define __MIDICTRL_H__
+
+#include <qstring.h>
+#include <list>
+#include <map>
+
+const int CTRL_HBANK = 0x00;
+const int CTRL_LBANK = 0x20;
+
+const int CTRL_HDATA = 0x06;
+const int CTRL_LDATA = 0x26;
+
+const int CTRL_HNRPN = 0x63;
+const int CTRL_LNRPN = 0x62;
+
+const int CTRL_HRPN = 0x65;
+const int CTRL_LRPN = 0x64;
+
+const int CTRL_MODULATION = 0x01;
+const int CTRL_PORTAMENTO_TIME = 0x05;
+const int CTRL_VOLUME = 0x07;
+const int CTRL_PANPOT = 0x0a;
+const int CTRL_EXPRESSION = 0x0b;
+const int CTRL_SUSTAIN = 0x40;
+const int CTRL_PORTAMENTO = 0x41;
+const int CTRL_SOSTENUTO = 0x42;
+const int CTRL_SOFT_PEDAL = 0x43;
+const int CTRL_HARMONIC_CONTENT = 0x47;
+const int CTRL_RELEASE_TIME = 0x48;
+const int CTRL_ATTACK_TIME = 0x49;
+
+const int CTRL_BRIGHTNESS = 0x4a;
+const int CTRL_PORTAMENTO_CONTROL = 0x54;
+const int CTRL_REVERB_SEND = 0x5b;
+const int CTRL_CHORUS_SEND = 0x5d;
+const int CTRL_VARIATION_SEND = 0x5e;
+
+const int CTRL_ALL_SOUNDS_OFF = 0x78; // 120
+const int CTRL_RESET_ALL_CTRL = 0x79; // 121
+const int CTRL_LOCAL_OFF = 0x7a; // 122
+
+// controller types 0x10000 - 0x1ffff are 14 bit controller with
+// 0x1xxyy
+// xx - MSB controller
+// yy - LSB controller
+
+// RPN - registered parameter numbers 0x20000 -
+// NRPN - non registered parameter numbers 0x30000 -
+
+// internal controller types:
+const int CTRL_INTERNAL_OFFSET = 0x40000;
+
+// p3.3.37
+//const int CTRL_PITCH = 0x40000;
+//const int CTRL_PROGRAM = 0x40001;
+//const int CTRL_VELOCITY = 0x40002;
+//const int CTRL_MASTER_VOLUME = 0x40003;
+const int CTRL_PITCH = CTRL_INTERNAL_OFFSET;
+const int CTRL_PROGRAM = CTRL_INTERNAL_OFFSET + 1;
+const int CTRL_VELOCITY = CTRL_INTERNAL_OFFSET + 2;
+//const int CTRL_MASTER_VOLUME = CTRL_INTERNAL_OFFSET + 3;
+
+const int CTRL_VAL_UNKNOWN = 0x10000000; // used as unknown hwVal
+
+const int CTRL_14_OFFSET = 0x10000;
+const int CTRL_RPN_OFFSET = 0x20000;
+const int CTRL_NRPN_OFFSET = 0x30000;
+const int CTRL_RPN14_OFFSET = 0x50000;
+const int CTRL_NRPN14_OFFSET = 0x60000;
+const int CTRL_NONE_OFFSET = 0x70000;
+
+class Xml;
+class Part;
+
+//---------------------------------------------------------
+// MidiController
+//---------------------------------------------------------
+
+class MidiController {
+ public:
+ //
+ // mapping of midi controller types to
+ // controller number:
+ //
+ enum ControllerType {
+ Controller7, // num values from 0 - 0x7f
+ Controller14, // values from 0x10000 - 0x12fff
+ RPN, // registered parameter 0x20000 -
+ NRPN, // non registered parameter 0x30000 -
+ RPN14, // registered parameter 0x50000
+ NRPN14, // non registered parameter 0x60000 -
+ Pitch, // num value = CTRL_PITCH
+ Program, // num value = CTRL_PROGRAM
+ Velo // not assigned
+ };
+ private:
+ QString _name;
+ int _num; // Controller Number
+ int _minVal; // controller value range (used in gui)
+ int _maxVal;
+ int _initVal;
+ int _bias;
+ void updateBias();
+
+ public:
+ MidiController();
+ MidiController(const QString& n, int num, int min, int max, int init);
+ MidiController(const MidiController& mc);
+ void copy(const MidiController &mc);
+ MidiController& operator= (const MidiController &mc);
+
+ const QString& name() const { return _name; }
+ int num() const { return _num; }
+ void setName(const QString& s) { _name = s; }
+ void setNum(int v) { _num = v; }
+ void write(int level, Xml& xml) const;
+ void read(Xml& xml);
+ int minVal() const { return _minVal; }
+ int maxVal() const { return _maxVal; }
+ int initVal() const { return _initVal; }
+ void setInitVal(int val) { _initVal = val; }
+ void setMinVal(int val) { _minVal = val; updateBias(); }
+ void setMaxVal(int val) { _maxVal = val; updateBias(); }
+ int bias() const { return _bias; }
+ static int genNum(ControllerType, int, int);
+ };
+
+// Added by T356.
+struct MidiCtrlVal
+{
+ // The part containing the event which this value came from. Used for searching and deleting.
+ Part* part;
+ // The stored value.
+ int val;
+};
+
+//---------------------------------------------------------
+// MidiCtrlValList
+// arrange controller events of a specific type in a
+// list for easy retrieval
+//---------------------------------------------------------
+
+// Changed by T356.
+//typedef std::map<int, int, std::less<int> >::iterator iMidiCtrlVal;
+//typedef std::map<int, int, std::less<int> >::const_iterator ciMidiCtrlVal;
+typedef std::multimap<int, MidiCtrlVal, std::less<int> >::iterator iMidiCtrlVal;
+typedef std::multimap<int, MidiCtrlVal, std::less<int> >::const_iterator ciMidiCtrlVal;
+
+typedef std::pair <iMidiCtrlVal, iMidiCtrlVal> MidiCtrlValRange;
+// Changed by T356.
+//class MidiCtrlValList : public std::map<int, int, std::less<int> > {
+class MidiCtrlValList : public std::multimap<int, MidiCtrlVal, std::less<int> > {
+
+ int ctrlNum;
+ int _lastValidHWVal;
+ int _hwVal; // current set value in midi hardware
+ // can be CTRL_VAL_UNKNOWN
+
+ // Hide built-in finds.
+ iMidiCtrlVal find(const int&) { return end(); };
+ ciMidiCtrlVal find(const int&) const { return end(); };
+
+ public:
+ MidiCtrlValList(int num);
+
+ Part* partAtTick(int tick) const;
+
+ iMidiCtrlVal iValue(int tick);
+ int value(int tick) const;
+ //int value(int tick, Part** part = 0) const;
+ int value(int tick, Part* part) const;
+ // Changed by T356.
+ //bool add(int tick, int value);
+ //void del(int tick);
+ bool addMCtlVal(int tick, int value, Part* part);
+ void delMCtlVal(int tick, Part* part);
+
+ iMidiCtrlVal findMCtlVal(int tick, Part* part);
+
+ int hwVal() const { return _hwVal; }
+ bool setHwVal(const int v);
+ bool setHwVals(const int v, const int lastv);
+ int num() const { return ctrlNum; }
+ int lastValidHWVal() const { return _lastValidHWVal; }
+ };
+
+//---------------------------------------------------------
+// MidiCtrlValListList
+// List of midi controller value lists.
+// This list represents the controller state of a
+// midi port.
+// index = (channelNumber << 24) + ctrlNumber
+//---------------------------------------------------------
+
+typedef std::map<int, MidiCtrlValList*, std::less<int> >::iterator iMidiCtrlValList;
+typedef std::map<int, MidiCtrlValList*, std::less<int> >::const_iterator ciMidiCtrlValList;
+
+class MidiCtrlValListList : public std::map<int, MidiCtrlValList*, std::less<int> > {
+ public:
+ void add(int channel, MidiCtrlValList* vl) {
+ insert(std::pair<const int, MidiCtrlValList*>((channel << 24) + vl->num(), vl));
+ }
+ iMidiCtrlValList find(int channel, int ctrl) {
+ return std::map<int, MidiCtrlValList*, std::less<int> >::find((channel << 24) + ctrl);
+ }
+ void clearDelete(bool deleteLists);
+ };
+
+//---------------------------------------------------------
+// MidiControllerList
+// this is a list of used midi controllers created
+// - excplicit by user
+// - implicit during import of a midi file
+//---------------------------------------------------------
+
+class MidiControllerList : public std::map<int, MidiController*, std::less<int> >
+{
+ public:
+ MidiControllerList() {}
+ MidiControllerList(const MidiControllerList& mcl);
+
+ void add(MidiController* mc) { insert(std::pair<int, MidiController*>(mc->num(), mc)); }
+};
+
+typedef MidiControllerList::iterator iMidiController;
+typedef MidiControllerList::const_iterator ciMidiController;
+typedef MidiControllerList MidiControllerList;
+
+extern MidiControllerList defaultMidiController;
+extern void initMidiController();
+extern MidiController::ControllerType midiControllerType(int num);
+
+
+extern const QString& int2ctrlType(int n);
+extern MidiController::ControllerType ctrlType2Int(const QString& s);
+extern QString midiCtrlName(int ctrl);
+extern MidiController veloCtrl;
+
+
+typedef std::map<int, int, std::less<int> > MidiCtl2LadspaPortMap;
+typedef MidiCtl2LadspaPortMap::iterator iMidiCtl2LadspaPort;
+typedef MidiCtl2LadspaPortMap::const_iterator ciMidiCtl2LadspaPort;
+
+
+#endif
+