1
//=========================================================
4
// $Id: midithread.h,v 1.2 2001/11/20 15:19:31 muse Exp $
6
// (C) Copyright 2001 Werner Schweer (ws@seh.de)
7
//=========================================================
9
#ifndef __SEQTHREAD_H__
10
#define __SEQTHREAD_H__
23
struct MidiThreadPrivate;
27
//---------------------------------------------------------
29
// this are the messages send from the GUI thread to
31
//---------------------------------------------------------
34
SEQM_ADD_TRACK, SEQM_REMOVE_TRACKS, SEQM_CHANGE_TRACK, SEQM_MOVE_TRACK,
35
SEQM_ADD_PART, SEQM_REMOVE_PART, SEQM_CHANGE_PART,
36
SEQM_ADD_EVENT, SEQM_REMOVE_EVENT, SEQM_CHANGE_EVENT,
37
SEQM_ADD_TEMPO, SEQM_SET_TEMPO, SEQM_REMOVE_TEMPO, SEQM_ADD_SIG,
39
SEQM_RESET_DEVICES, SEQM_INIT_DEVICES, SEQM_MIDI_LOCAL_OFF,
40
SEQM_MIDI_CTRL, SEQM_MIDI_MASTER_VOLUME,
46
SEQM_SCAN_ALSA_MIDI_PORTS,
47
SEQM_REMOVE_SYNTHI, SEQM_ADD_SYNTHI,
48
MIDI_ADD_SYNTHI, MIDI_SHOW_INSTR_GUI,
51
//---------------------------------------------------------
53
//---------------------------------------------------------
55
struct MidiMsg : public ThreadMsg {
69
//---------------------------------------------------------
71
//---------------------------------------------------------
73
class MidiThread : public QObject, public Thread {
76
QTimer* heartBeatTimer; // controls gui refreshes
77
MidiThreadPrivate* data;
79
virtual void processMsg(const ThreadMsg*);
80
virtual void defaultTick();
84
int recTimeStamp() const;
87
bool filterEvent(const MidiEvent* event, int type, bool thru);
88
void mtcSyncMsg(const MTC& mtc, bool seekFlag);
90
static void midiTick(void* p, void*);
94
void seqSignal(int fd);
96
void msgInitDevices();
101
void midiNote(int, int);
104
MidiThread(bool rt=true, int prio=50, bool ml = true);
106
virtual void start();
107
bool sendMessage(const MidiMsg* m, bool doUndo);
109
bool isPlaying() const;
112
//-----------------------------------------
114
//-----------------------------------------
116
void msgSeek(int val);
117
void msgPlay(bool val);
119
void msgAddTrack(Track* track, bool u = true);
120
void msgRemoveTracks(bool u = true);
121
void msgChangeTrack(Track* oldTrack, Track* newTrack, bool u = true);
122
void msgMoveTrack(int idx1, int dx2, bool u = true);
123
void msgAddPart(Part*, bool u = true);
124
void msgRemovePart(Part*, bool u = true);
125
void msgChangePart(Part* oldPart, Part* newPart, bool u = true);
126
void msgAddEvent(Event*, Part*, bool u = true);
127
void msgDeleteEvent(Event*, Part*, bool u = true);
128
void msgChangeEvent(Event*, Event*, Part*, bool u = true);
129
void msgScanAlsaMidiPorts();
130
void msgAddTempo(int tick, int tempo, bool doUndoFlag = true);
131
void msgSetTempo(int tick, int tempo, bool doUndoFlag = true);
132
void msgDeleteTempo(int tick, int tempo, bool doUndoFlag = true);
133
void msgAddSig(int tick, int z, int n, bool doUndoFlag = true);
134
void msgAddSynthI(SynthI* synth);
135
void msgShowInstrumentGui(MidiInstrument*, bool);
139
void ctrlChanged(int port, int channel, int ctrl, int val);
140
void masterVolChanged(int val);
142
void setMidiDevice(MidiPort*, MidiDevice*);
143
void playMidiEvent(MidiEvent* event);
144
void rescanAlsaPorts();
145
int curTickPos() const;
147
void eventReceived(MidiEvent* event);
149
void mmcInput(const unsigned char* p, int n);
150
void mtcInputQuarter(int, unsigned char c);
151
void mtcInputFull(const unsigned char* p, int n);
152
void eventReceived(int, unsigned char chan, unsigned char c1, unsigned c2);
153
void nonRealtimeSystemSysex(const unsigned char*, int);
154
void realtimeSystemInput(int, int);
155
void setSongPosition(int, int);
156
void midiPortsChanged();