46 #define RTMIDI_VERSION "3.0.0"    88   virtual void printMessage( 
void ) 
const throw() { std::cerr << 
'\n' << message_ << 
"\n\n"; }
    91   virtual const Type& 
getType(
void) 
const throw() { 
return type_; }
    94   virtual const std::string& 
getMessage(
void) 
const throw() { 
return message_; }
    97   virtual const char* 
what( 
void ) 
const throw() { 
return message_.c_str(); }
   100   std::string message_;
   131   static std::string 
getVersion( 
void ) 
throw();
   139   static void getCompiledApi( std::vector<RtMidi::Api> &apis ) 
throw();
   142   virtual void openPort( 
unsigned int portNumber = 0, 
const std::string &portName = std::string( 
"RtMidi" ) ) = 0;
   145   virtual void openVirtualPort( 
const std::string &portName = std::string( 
"RtMidi" ) ) = 0;
   151   virtual std::string 
getPortName( 
unsigned int portNumber = 0 ) = 0;
   215   typedef void (*
RtMidiCallback)( 
double timeStamp, std::vector<unsigned char> *message, 
void *userData);
   236             const std::string& clientName = 
"RtMidi Input Client",
   237             unsigned int queueSizeLimit = 100 );
   251   void openPort( 
unsigned int portNumber = 0, 
const std::string &portName = std::string( 
"RtMidi Input" ) );
   263   void openVirtualPort( 
const std::string &portName = std::string( 
"RtMidi Input" ) );
   307   std::string 
getPortName( 
unsigned int portNumber = 0 );
   317   void ignoreTypes( 
bool midiSysex = 
true, 
bool midiTime = 
true, 
bool midiSense = 
true );
   327   double getMessage( std::vector<unsigned char> *message );
   337   void openMidiApi( 
RtMidi::Api api, 
const std::string &clientName, 
unsigned int queueSizeLimit );
   370              const std::string& clientName = 
"RtMidi Output Client" );
   385   void openPort( 
unsigned int portNumber = 0, 
const std::string &portName = std::string( 
"RtMidi Output" ) );
   406   void openVirtualPort( 
const std::string &portName = std::string( 
"RtMidi Output" ) );
   417   std::string 
getPortName( 
unsigned int portNumber = 0 );
   424   void sendMessage( 
const std::vector<unsigned char> *message );
   434   void sendMessage( 
const unsigned char *message, 
size_t size );
   444   void openMidiApi( 
RtMidi::Api api, 
const std::string &clientName );
   468   virtual void openPort( 
unsigned int portNumber, 
const std::string &portName ) = 0;
   469   virtual void openVirtualPort( 
const std::string &portName ) = 0;
   470   virtual void closePort( 
void ) = 0;
   472   virtual unsigned int getPortCount( 
void ) = 0;
   473   virtual std::string getPortName( 
unsigned int portNumber ) = 0;
   475   inline bool isPortOpen()
 const { 
return connected_; }
   482   virtual void initialize( 
const std::string& clientName ) = 0;
   486   std::string errorString_;
   488   bool firstErrorOccurred_;
   489   void *errorCallbackUserData_;
   496   MidiInApi( 
unsigned int queueSizeLimit );
   499   void cancelCallback( 
void );
   500   virtual void ignoreTypes( 
bool midiSysex, 
bool midiTime, 
bool midiSense );
   501   double getMessage( std::vector<unsigned char> *message );
   506     std::vector<unsigned char> bytes; 
   519     unsigned int ringSize;
   524   :front(0), back(0), ringSize(0), ring(0) {}
   526     bool pop(std::vector<unsigned char>*, 
double*);
   527     unsigned int size(
unsigned int *back=0,
   528                       unsigned int *front=0);
   536     unsigned char ignoreFlags;
   547   : ignoreFlags(7), doInput(
false), firstMessage(
true),
   548       apiData(0), usingCallback(
false), userCallback(0), userData(0),
   549       continueSysex(
false) {}
   562   virtual void sendMessage( 
const unsigned char *message, 
size_t size ) = 0;
   572 inline void RtMidiIn :: openPort( 
unsigned int portNumber, 
const std::string &portName ) { rtapi_->openPort( portNumber, portName ); }
   585 inline void RtMidiOut :: openPort( 
unsigned int portNumber, 
const std::string &portName ) { rtapi_->openPort( portNumber, portName ); }
   601 #if !defined(__LINUX_ALSA__) && !defined(__UNIX_JACK__) && !defined(__MACOSX_CORE__) && !defined(__WINDOWS_MM__)   602   #define __RTMIDI_DUMMY__   605 #if defined(__MACOSX_CORE__)   610   MidiInCore( 
const std::string &clientName, 
unsigned int queueSizeLimit );
   613   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   614   void openVirtualPort( 
const std::string &portName );
   615   void closePort( 
void );
   616   unsigned int getPortCount( 
void );
   617   std::string getPortName( 
unsigned int portNumber );
   620   void initialize( 
const std::string& clientName );
   629   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   630   void openVirtualPort( 
const std::string &portName );
   631   void closePort( 
void );
   632   unsigned int getPortCount( 
void );
   633   std::string getPortName( 
unsigned int portNumber );
   634   void sendMessage( 
const unsigned char *message, 
size_t size );
   637   void initialize( 
const std::string& clientName );
   642 #if defined(__UNIX_JACK__)   647   MidiInJack( 
const std::string &clientName, 
unsigned int queueSizeLimit );
   650   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   651   void openVirtualPort( 
const std::string &portName );
   652   void closePort( 
void );
   653   unsigned int getPortCount( 
void );
   654   std::string getPortName( 
unsigned int portNumber );
   657   std::string clientName;
   659   void connect( 
void );
   660   void initialize( 
const std::string& clientName );
   669   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   670   void openVirtualPort( 
const std::string &portName );
   671   void closePort( 
void );
   672   unsigned int getPortCount( 
void );
   673   std::string getPortName( 
unsigned int portNumber );
   674   void sendMessage( 
const unsigned char *message, 
size_t size );
   677   std::string clientName;
   679   void connect( 
void );
   680   void initialize( 
const std::string& clientName );
   685 #if defined(__LINUX_ALSA__)   690   MidiInAlsa( 
const std::string &clientName, 
unsigned int queueSizeLimit );
   693   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   694   void openVirtualPort( 
const std::string &portName );
   695   void closePort( 
void );
   696   unsigned int getPortCount( 
void );
   697   std::string getPortName( 
unsigned int portNumber );
   700   void initialize( 
const std::string& clientName );
   709   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   710   void openVirtualPort( 
const std::string &portName );
   711   void closePort( 
void );
   712   unsigned int getPortCount( 
void );
   713   std::string getPortName( 
unsigned int portNumber );
   714   void sendMessage( 
const unsigned char *message, 
size_t size );
   717   void initialize( 
const std::string& clientName );
   722 #if defined(__WINDOWS_MM__)   727   MidiInWinMM( 
const std::string &clientName, 
unsigned int queueSizeLimit );
   730   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   731   void openVirtualPort( 
const std::string &portName );
   732   void closePort( 
void );
   733   unsigned int getPortCount( 
void );
   734   std::string getPortName( 
unsigned int portNumber );
   737   void initialize( 
const std::string& clientName );
   746   void openPort( 
unsigned int portNumber, 
const std::string &portName );
   747   void openVirtualPort( 
const std::string &portName );
   748   void closePort( 
void );
   749   unsigned int getPortCount( 
void );
   750   std::string getPortName( 
unsigned int portNumber );
   751   void sendMessage( 
const unsigned char *message, 
size_t size );
   754   void initialize( 
const std::string& clientName );
   759 #if defined(__RTMIDI_DUMMY__)   764  MidiInDummy( 
const std::string &, 
unsigned int queueSizeLimit ) : 
MidiInApi( queueSizeLimit ) { errorString_ = 
"MidiInDummy: This class provides no functionality."; 
error( 
RtMidiError::WARNING, errorString_ ); }
   766   void openPort( 
unsigned int , 
const std::string & ) {}
   767   void openVirtualPort( 
const std::string & ) {}
   768   void closePort( 
void ) {}
   769   unsigned int getPortCount( 
void ) { 
return 0; }
   770   std::string getPortName( 
unsigned int  ) { 
return ""; }
   773   void initialize( 
const std::string&  ) {}
   779   MidiOutDummy( 
const std::string & ) { errorString_ = 
"MidiOutDummy: This class provides no functionality."; 
error( 
RtMidiError::WARNING, errorString_ ); }
   781   void openPort( 
unsigned int , 
const std::string & ) {}
   782   void openVirtualPort( 
const std::string & ) {}
   783   void closePort( 
void ) {}
   784   unsigned int getPortCount( 
void ) { 
return 0; }
   785   std::string getPortName( 
unsigned int  ) { 
return ""; }
   786   void sendMessage( 
const unsigned char * , 
size_t  ) {}
   789   void initialize( 
const std::string&  ) {}
 virtual void setErrorCallback(RtMidiErrorCallback errorCallback=NULL, void *userData=0)
Set an error callback function to be invoked when an error has occured. 
Definition: RtMidi.h:593
RtMidi::Api getCurrentApi(void)
Returns the MIDI API specifier for the current instance of RtMidiIn. 
Definition: RtMidi.h:571
RtMidiIn(RtMidi::Api api=UNSPECIFIED, const std::string &clientName="RtMidi Input Client", unsigned int queueSizeLimit=100)
Default constructor that allows an optional api, client name and queue size. 
std::string getPortName(unsigned int portNumber=0)
Return a string identifier for the specified MIDI port type and number. 
Definition: RtMidi.h:590
void(* RtMidiErrorCallback)(RtMidiError::Type type, const std::string &errorText, void *userData)
RtMidi error callback function prototype. 
Definition: RtMidi.h:112
A realtime MIDI input class. 
Definition: RtMidi.h:210
~RtMidiIn(void)
If a MIDI connection is still open, it will be closed by the destructor. 
virtual unsigned int getPortCount()=0
Pure virtual getPortCount() function. 
void openPort(unsigned int portNumber=0, const std::string &portName=std::string("RtMidi Input"))
Open a MIDI input connection given by enumeration number. 
Definition: RtMidi.h:572
RtMidiError(const std::string &message, Type type=RtMidiError::UNSPECIFIED)
The constructor. 
Definition: RtMidi.h:82
void openVirtualPort(const std::string &portName=std::string("RtMidi Output"))
Create a virtual output port, with optional name, to allow software connections (OS X...
Definition: RtMidi.h:586
An abstract base class for realtime MIDI input/output. 
Definition: RtMidi.h:116
virtual void openVirtualPort(const std::string &portName=std::string("RtMidi"))=0
Pure virtual openVirtualPort() function. 
void ignoreTypes(bool midiSysex=true, bool midiTime=true, bool midiSense=true)
Specify whether certain MIDI message types should be queued or ignored during input. 
Definition: RtMidi.h:580
virtual void closePort(void)=0
Pure virtual closePort() function. 
void closePort(void)
Close an open MIDI connection (if one exists). 
Definition: RtMidi.h:574
void error(RtMidiError::Type type, std::string errorString)
A basic error reporting function for RtMidi classes. 
virtual std::string getPortName(unsigned int portNumber=0)=0
Pure virtual getPortName() function. 
Api
MIDI API specifier arguments. 
Definition: RtMidi.h:121
void(* RtMidiCallback)(double timeStamp, std::vector< unsigned char > *message, void *userData)
User callback function type definition. 
Definition: RtMidi.h:215
void setCallback(RtMidiCallback callback, void *userData=0)
Set a callback function to be invoked for incoming MIDI messages. 
Definition: RtMidi.h:576
virtual void openPort(unsigned int portNumber=0, const std::string &portName=std::string("RtMidi"))=0
Pure virtual openPort() function. 
Type
Defined RtMidiError types. 
Definition: RtMidi.h:67
virtual const std::string & getMessage(void) const
Returns the thrown error message string. 
Definition: RtMidi.h:94
~RtMidiOut(void)
The destructor closes any open MIDI connections. 
void openVirtualPort(const std::string &portName=std::string("RtMidi Input"))
Create a virtual input port, with optional name, to allow software connections (OS X...
Definition: RtMidi.h:573
virtual void setErrorCallback(RtMidiErrorCallback errorCallback=NULL, void *userData=0)=0
Set an error callback function to be invoked when an error has occured. 
unsigned int getPortCount(void)
Return the number of available MIDI output ports. 
Definition: RtMidi.h:589
virtual bool isPortOpen() const
Returns true if a port is open and false if not. 
Definition: RtMidi.h:575
unsigned int getPortCount()
Return the number of available MIDI input ports. 
Definition: RtMidi.h:578
void cancelCallback()
Cancel use of the current callback function (if one exists). 
Definition: RtMidi.h:577
void closePort(void)
Close an open MIDI connection (if one exists). 
Definition: RtMidi.h:587
std::string getPortName(unsigned int portNumber=0)
Return a string identifier for the specified MIDI input port number. 
Definition: RtMidi.h:579
RtMidi::Api getCurrentApi(void)
Returns the MIDI API specifier for the current instance of RtMidiOut. 
Definition: RtMidi.h:584
virtual void printMessage(void) const
Prints thrown error message to stderr. 
Definition: RtMidi.h:88
RtMidiOut(RtMidi::Api api=UNSPECIFIED, const std::string &clientName="RtMidi Output Client")
Default constructor that allows an optional client name. 
virtual bool isPortOpen(void) const =0
Returns true if a port is open and false if not. 
virtual void setErrorCallback(RtMidiErrorCallback errorCallback=NULL, void *userData=0)
Set an error callback function to be invoked when an error has occured. 
Definition: RtMidi.h:582
virtual ~RtMidiError(void)
The destructor. 
Definition: RtMidi.h:85
virtual bool isPortOpen() const
Returns true if a port is open and false if not. 
Definition: RtMidi.h:588
double timeStamp
Time in seconds elapsed since the previous message. 
Definition: RtMidi.h:509
Exception handling class for RtMidi. 
Definition: RtMidi.h:63
virtual const Type & getType(void) const
Returns the thrown error message type. 
Definition: RtMidi.h:91
double getMessage(std::vector< unsigned char > *message)
Fill the user-provided vector with the data bytes for the next available MIDI message in the input qu...
Definition: RtMidi.h:581
void sendMessage(const std::vector< unsigned char > *message)
Immediately send a single message out an open MIDI output port. 
Definition: RtMidi.h:591
static void getCompiledApi(std::vector< RtMidi::Api > &apis)
A static function to determine the available compiled MIDI APIs. 
virtual const char * what(void) const
Returns the thrown error message as a c-style string. 
Definition: RtMidi.h:97
A realtime MIDI output class. 
Definition: RtMidi.h:357
static std::string getVersion(void)
A static function to determine the current RtMidi version. 
void openPort(unsigned int portNumber=0, const std::string &portName=std::string("RtMidi Output"))
Open a MIDI output connection. 
Definition: RtMidi.h:585