Canorus  0.7
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RtMidi.h
Go to the documentation of this file.
1 /**********************************************************************/
36 /**********************************************************************/
37 
38 // RtMidi: Version 1.0.7
39 
40 #ifndef RTMIDI_H
41 #define RTMIDI_H
42 
43 #include "RtError.h"
44 #include <string>
45 
46 class RtMidi
47 {
48  public:
49 
51  virtual void openPort( unsigned int portNumber = 0 ) = 0;
52 
54  virtual void openVirtualPort( const std::string portName = std::string( "RtMidi" ) ) = 0;
55 
57  virtual unsigned int getPortCount() = 0;
58 
60  virtual std::string getPortName( unsigned int portNumber = 0 ) = 0;
61 
63  virtual void closePort( void ) = 0;
64 
65  protected:
66 
67  RtMidi();
68  virtual ~RtMidi() {};
69 
70  // A basic error reporting function for internal use in the RtMidi
71  // subclasses. The behavior of this function can be modified to
72  // suit specific needs.
73  void error( RtError::Type type );
74 
75  void *apiData_;
76  bool connected_;
77  std::string errorString_;
78 };
79 
80 /**********************************************************************/
96 /**********************************************************************/
97 
98 #include <vector>
99 #include <queue>
100 
101 class RtMidiIn : public RtMidi
102 {
103  public:
104 
106  typedef void (*RtMidiCallback)( double timeStamp, std::vector<unsigned char> *message, void *userData);
107 
109 
112  RtMidiIn();
113 
115  ~RtMidiIn();
116 
118 
122  void openPort( unsigned int portNumber = 0 );
123 
125 
131  void openVirtualPort( const std::string portName = std::string( "RtMidi Input" ) );
132 
134 
140  void setCallback( RtMidiCallback callback, void *userData = 0 );
141 
143 
147  void cancelCallback();
148 
150  void closePort( void );
151 
153  unsigned int getPortCount();
154 
156 
159  std::string getPortName( unsigned int portNumber = 0 );
160 
162 
166  void setQueueSizeLimit( unsigned int queueSize );
167 
169 
176  void ignoreTypes( bool midiSysex = true, bool midiTime = true, bool midiSense = true );
177 
179 
186  double getMessage( std::vector<unsigned char> *message );
187 
188  // A MIDI structure used internally by the class to store incoming
189  // messages. Each message represents one and only one MIDI message.
190  struct MidiMessage {
191  std::vector<unsigned char> bytes;
192  double timeStamp;
193 
194  // Default constructor.
196  :bytes(3), timeStamp(0.0) {}
197  };
198 
199  // The RtMidiInData structure is used to pass private class data to
200  // the MIDI input handling function or thread.
201  struct RtMidiInData {
202  std::queue<MidiMessage> queue;
203  unsigned int queueLimit;
204  unsigned char ignoreFlags;
205  bool doInput;
207  void *apiData;
210  void *userData;
211 
212  // Default constructor.
214  : queueLimit(1024), ignoreFlags(7), doInput(false), firstMessage(true),
215  apiData(0), usingCallback(false), userCallback(0), userData(0) {}
216  };
217 
218  private:
219 
220  void initialize( void );
222 
223 };
224 
225 /**********************************************************************/
237 /**********************************************************************/
238 
239 class RtMidiOut : public RtMidi
240 {
241  public:
242 
244 
247  RtMidiOut();
248 
250  ~RtMidiOut();
251 
253 
259  void openPort( unsigned int portNumber = 0 );
260 
262  void closePort();
263 
265 
273  void openVirtualPort( const std::string portName = std::string( "RtMidi Output" ) );
274 
276  unsigned int getPortCount();
277 
279 
282  std::string getPortName( unsigned int portNumber = 0 );
283 
285 
289  void sendMessage( std::vector<unsigned char> *message );
290 
291  private:
292 
293  void initialize( void );
294 };
295 
296 #endif