#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 };