~ubuntu-branches/ubuntu/karmic/muse/karmic-proposed

« back to all changes in this revision

Viewing changes to midithread.h

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Kobras
  • Date: 2002-04-23 17:28:23 UTC
  • Revision ID: james.westby@ubuntu.com-20020423172823-w8yplzr81a759xa3
Tags: upstream-0.5.2
ImportĀ upstreamĀ versionĀ 0.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//=========================================================
 
2
//  MusE
 
3
//  Linux Music Editor
 
4
//  $Id: midithread.h,v 1.2 2001/11/20 15:19:31 muse Exp $
 
5
//
 
6
//  (C) Copyright 2001 Werner Schweer (ws@seh.de)
 
7
//=========================================================
 
8
 
 
9
#ifndef __SEQTHREAD_H__
 
10
#define __SEQTHREAD_H__
 
11
 
 
12
#include <qobject.h>
 
13
#include "thread.h"
 
14
 
 
15
class Part;
 
16
class Event;
 
17
class MidiEvent;
 
18
class Track;
 
19
class MidiPort;
 
20
class MidiDevice;
 
21
class EventList;
 
22
class MTC;
 
23
struct MidiThreadPrivate;
 
24
class SynthI;
 
25
class MidiInstrument;
 
26
 
 
27
//---------------------------------------------------------
 
28
//   MidiMsgId
 
29
//    this are the messages send from the GUI thread to
 
30
//    the midi thread
 
31
//---------------------------------------------------------
 
32
 
 
33
enum MidiMsgId {
 
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,
 
38
      SEQM_UNDO, SEQM_REDO,
 
39
      SEQM_RESET_DEVICES, SEQM_INIT_DEVICES, SEQM_MIDI_LOCAL_OFF,
 
40
      SEQM_MIDI_CTRL, SEQM_MIDI_MASTER_VOLUME,
 
41
      SEQM_SET_MIDI_DEVICE,
 
42
      SEQM_PLAY_MIDI_EVENT,
 
43
      SEQM_SET_MIXDOWN,
 
44
      SEQM_SET_RTC_TICKS,
 
45
      SEQM_SEEK, SEQM_PLAY,
 
46
      SEQM_SCAN_ALSA_MIDI_PORTS,
 
47
      SEQM_REMOVE_SYNTHI, SEQM_ADD_SYNTHI,
 
48
      MIDI_ADD_SYNTHI, MIDI_SHOW_INSTR_GUI,
 
49
      };
 
50
 
 
51
//---------------------------------------------------------
 
52
//   MidiMsg
 
53
//---------------------------------------------------------
 
54
 
 
55
struct MidiMsg : public ThreadMsg {
 
56
      void* p1;
 
57
      void* p2;
 
58
      void* p3;
 
59
 
 
60
      char port;
 
61
      char channel;
 
62
      char ctrl;
 
63
 
 
64
      int a;
 
65
      int b;
 
66
      int c;
 
67
      };
 
68
 
 
69
//---------------------------------------------------------
 
70
//   MidiThread
 
71
//---------------------------------------------------------
 
72
 
 
73
class MidiThread : public QObject, public Thread {
 
74
      Q_OBJECT;
 
75
 
 
76
      QTimer* heartBeatTimer;       // controls gui refreshes
 
77
      MidiThreadPrivate* data;
 
78
 
 
79
      virtual void processMsg(const ThreadMsg*);
 
80
      virtual void defaultTick();
 
81
 
 
82
      void updatePollFd();
 
83
      bool setRtcTicks();
 
84
      int recTimeStamp() const;
 
85
      void recordStop();
 
86
      void sendLocalOff();
 
87
      bool filterEvent(const MidiEvent* event, int type, bool thru);
 
88
      void mtcSyncMsg(const MTC& mtc, bool seekFlag);
 
89
      void statePlay();
 
90
      static void midiTick(void* p, void*);
 
91
      void initDevices();
 
92
 
 
93
   public slots:
 
94
      void seqSignal(int fd);
 
95
      void resetDevices();
 
96
      void msgInitDevices();
 
97
      void localOff();
 
98
      void heartBeat();
 
99
 
 
100
   signals:
 
101
      void midiNote(int, int);
 
102
 
 
103
   public:
 
104
      MidiThread(bool rt=true, int prio=50, bool ml = true);
 
105
      ~MidiThread();
 
106
      virtual void start();
 
107
      bool sendMessage(const MidiMsg* m, bool doUndo);
 
108
 
 
109
      bool isPlaying() const;
 
110
      void setHeartBeat();
 
111
 
 
112
      //-----------------------------------------
 
113
      //   message interface
 
114
      //-----------------------------------------
 
115
 
 
116
      void msgSeek(int val);
 
117
      void msgPlay(bool val);
 
118
 
 
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);
 
136
 
 
137
      void undo();
 
138
      void redo();
 
139
      void ctrlChanged(int port, int channel, int ctrl, int val);
 
140
      void masterVolChanged(int val);
 
141
 
 
142
      void setMidiDevice(MidiPort*, MidiDevice*);
 
143
      void playMidiEvent(MidiEvent* event);
 
144
      void rescanAlsaPorts();
 
145
      int curTickPos() const;
 
146
 
 
147
      void eventReceived(MidiEvent* event);
 
148
 
 
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();
 
157
      };
 
158
 
 
159
#endif
 
160