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
|
#define SEQ_HAVE_PANEL
class seq_base : public player_base
{
protected:
int seq_cmd_start(DWORD cflags);
void seq_cmd_stop();
virtual ~seq_base();
//OVERRIDE ME
virtual void seq_shortmsg(DWORD msg)=0;
virtual void seq_sysex(BYTE*,UINT)=0;
virtual int seq_play_start() {return 1;}
virtual void seq_play_stop() {}
seq_base();
private:
virtual int gettime();
virtual int settime(int);
virtual void unpause();
virtual void pause();
DWORD preprocess(DWORD e);
void send_sysex(int n);
// void reset_ins();
UINT do_sysex(UINT src,UINT tm);
BOOL do_ctrl(DWORD e);
void reset();
int note_state(int ch,int note);
void note_on(int ch,int note);
void note_off(int ch,int note);
UINT do_seek(DWORD n,DWORD p);
void thread();
DWORD get_time();
void get_ins(UINT c);
static DWORD WINAPI seq_trd(void* p);
static void sysexfunc(seq_base* cb,BYTE* s,UINT sz);
MIDI_file* mf;
bool kill,paused;
CSysexMap* smap;
int pan,vol;
UINT seek_to,n_events;
MIDI_EVENT* events;
UINT c_loop,loop_start;
BYTE notes[256];
BYTE ctrl_tab[16][128];
BYTE ins_tab[16];
DWORD tm_ofs,p_time;
HANDLE hTrd;
DWORD ins_set;
#ifdef SEQ_HAVE_PANEL
HWND hCtrl;
float tempo;
BOOL novol,noins;
DWORD last_time_ms;
double last_time_ret;
CRITICAL_SECTION tm_sec;
DWORD mute_mask;
bool initialized;
static BOOL CALLBACK CtrlProc(HWND wnd,UINT msg,WPARAM wp,LPARAM lp);
void do_msg(UINT msg,WPARAM wp,LPARAM lp);
void set_mute(UINT ch,BOOL st);
#endif
};
|