summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/midiplugins/libmidiplugin/midievent.h
blob: a21bec88977ffa0d5753f5f0c0e3495fe9ea70e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//=========================================================
//  MusE
//  Linux Music Editor
//  $Id: mpevent.h,v 1.3 2005/06/06 14:24:53 wschweer Exp $
//
//  (C) Copyright 1999-2002 Werner Schweer (ws@seh.de)
//=========================================================

#ifndef __MIDIEVENT_H__
#define __MIDIEVENT_H__

#include <set>
#include "evdata.h"
#include <ext/mt_allocator.h>

class Event;
class EvData;

//---------------------------------------------------------
//   MidiEvent
//---------------------------------------------------------

class MidiEvent {
      unsigned _time;
      EvData edata;
      unsigned char _channel, _type;
      int _a, _b;

   public:
      MidiEvent() {}
      MidiEvent(unsigned tm, int c, int t, int a, int b)
        : _time(tm), _channel(c & 0xf), _type(t), _a(a), _b(b) {}
      MidiEvent(unsigned t, int type, const unsigned char* data, int len);
      MidiEvent(unsigned t, int tpe, EvData d) : _time(t), edata(d), _type(tpe) {}
      MidiEvent(unsigned t, int channel, const Event& e);

      ~MidiEvent()         {}

      MidiEvent& operator=(const MidiEvent& ed) {
            _time    = ed._time;
            edata    = ed.edata;
            _channel = ed._channel;
            _type    = ed._type;
            _a       = ed._a;
            _b       = ed._b;
            return *this;
            }

      int channel() const      { return _channel; }
      int type()    const      { return _type;    }
      int dataA()   const      { return _a;       }
      int dataB()   const      { return _b;       }
      unsigned time() const    { return _time;    }

      void setChannel(int val) { _channel = val;  }
      void setType(int val)    { _type = val;     }
      void setA(int val)       { _a = val;        }
      void setB(int val)       { _b = val;        }
      void setTime(unsigned val) { _time = val;     }

      const EvData& eventData() const { return edata; }
      unsigned char* data() const     { return edata.data; }
      int len() const                 { return edata.dataLen; }
      void setData(const EvData& e)   { edata = e; }
      void setData(const unsigned char* p, int len) { edata.setData(p, len); }
      void dump() const;
      bool isNote() const      { return _type == 0x90; }
      bool isNoteOff() const   { return (_type == 0x80)||(_type == 0x90 && _b == 0); }
      bool operator<(const MidiEvent&) const;
      };

//---------------------------------------------------------
//   MidiEventList
//---------------------------------------------------------

// typedef std::multiset<MidiEvent, std::less<MidiEvent>,
//   __gnu_cxx::__mt_alloc<MidiEvent> > MPEL;

struct MidiEventList : public std::multiset<MidiEvent, std::less<MidiEvent> >
      {
      };

typedef MidiEventList::iterator iMidiEvent;
typedef MidiEventList::const_iterator ciMidiEvent;

#endif