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
88
89
90
91
92
93
94
95
96
97
98
99
100
|
//=========================================================
// MusE
// Linux Music Editor
// $Id: mpevent.h,v 1.1 2004/02/12 18:30:31 wschweer Exp $
//
// (C) Copyright 1999-2002 Werner Schweer (ws@seh.de)
//=========================================================
#ifndef __MPEVENT_H__
#define __MPEVENT_H__
#include "evdata.h"
//---------------------------------------------------------
// MEvent
// baseclass for MidiPlayEvent and MidiRecordEvent
//---------------------------------------------------------
//---------------------------------------------------------
// MEvent
//---------------------------------------------------------
class MEvent {
unsigned _time;
EvData edata;
unsigned char _port, _channel, _type;
int _a, _b;
public:
MEvent() {}
MEvent(unsigned tm, int p, int c, int t, int a, int b)
: _time(tm), _port(p), _channel(c & 0xf), _type(t), _a(a), _b(b) {}
MEvent(unsigned t, int p, int type, const unsigned char* data, int len);
MEvent(unsigned t, int p, int tpe, EvData d) : _time(t), edata(d), _port(p), _type(tpe) {}
~MEvent() {}
int port() const { return _port; }
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 setPort(int val) { _port = val; }
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); }
bool isNote() const { return _type == 0x90; }
bool isNoteOff() const { return (_type == 0x80)||(_type == 0x90 && _b == 0); }
};
//---------------------------------------------------------
// MidiRecordEvent
// allocated and deleted in midiseq thread context
//---------------------------------------------------------
class MidiPlayEvent;
class MidiRecordEvent : public MEvent {
public:
MidiRecordEvent() {}
MidiRecordEvent(const MEvent& e) : MEvent(e) {}
MidiRecordEvent(unsigned tm, int p, int c, int t, int a, int b)
: MEvent(tm, p, c, t, a, b) {}
MidiRecordEvent(unsigned t, int p, int tpe, const unsigned char* data, int len)
: MEvent(t, p, tpe, data, len) {}
MidiRecordEvent(unsigned t, int p, int type, EvData data)
: MEvent(t, p, type, data) {}
~MidiRecordEvent() {}
};
//---------------------------------------------------------
// MidiPlayEvent
// allocated and deleted in audio thread context
//---------------------------------------------------------
class MidiPlayEvent : public MEvent {
public:
MidiPlayEvent() {}
MidiPlayEvent(const MEvent& e) : MEvent(e) {}
MidiPlayEvent(unsigned tm, int p, int c, int t, int a, int b)
: MEvent(tm, p, c, t, a, b) {}
MidiPlayEvent(unsigned t, int p, int type, const unsigned char* data, int len)
: MEvent(t, p, type, data, len) {}
MidiPlayEvent(unsigned t, int p, int type, EvData data)
: MEvent(t, p, type, data) {}
~MidiPlayEvent() {}
};
#endif
|