| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736 | 
							- /**********************************************************************/
 
- /*! \class RtMidi
 
-     \brief An abstract base class for realtime MIDI input/output.
 
-     This class implements some common functionality for the realtime
 
-     MIDI input/output subclasses RtMidiIn and RtMidiOut.
 
-     RtMidi WWW site: http://music.mcgill.ca/~gary/rtmidi/
 
-     RtMidi: realtime MIDI i/o C++ classes
 
-     Copyright (c) 2003-2014 Gary P. Scavone
 
-     Permission is hereby granted, free of charge, to any person
 
-     obtaining a copy of this software and associated documentation files
 
-     (the "Software"), to deal in the Software without restriction,
 
-     including without limitation the rights to use, copy, modify, merge,
 
-     publish, distribute, sublicense, and/or sell copies of the Software,
 
-     and to permit persons to whom the Software is furnished to do so,
 
-     subject to the following conditions:
 
-     The above copyright notice and this permission notice shall be
 
-     included in all copies or substantial portions of the Software.
 
-     Any person wishing to distribute modifications to the Software is
 
-     asked to send the modifications to the original developer so that
 
-     they can be incorporated into the canonical version.  This is,
 
-     however, not a binding provision of this license.
 
-     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
-     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
-     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 
-     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
 
-     ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
 
-     CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 
-     WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
- */
 
- /**********************************************************************/
 
- /*!
 
-   \file RtMidi.h
 
-  */
 
- #ifndef RTMIDI_H
 
- #define RTMIDI_H
 
- #define RTMIDI_VERSION "2.1.0pre"
 
- #include <exception>
 
- #include <iostream>
 
- #include <string>
 
- #include <vector>
 
- /************************************************************************/
 
- /*! \class RtMidiError
 
-     \brief Exception handling class for RtMidi.
 
-     The RtMidiError class is quite simple but it does allow errors to be
 
-     "caught" by RtMidiError::Type. See the RtMidi documentation to know
 
-     which methods can throw an RtMidiError.
 
- */
 
- /************************************************************************/
 
- class RtMidiError : public std::exception
 
- {
 
-  public:
 
-   //! Defined RtMidiError types.
 
-   enum Type {
 
-     WARNING,           /*!< A non-critical error. */
 
-     DEBUG_WARNING,     /*!< A non-critical error which might be useful for debugging. */
 
-     UNSPECIFIED,       /*!< The default, unspecified error type. */
 
-     NO_DEVICES_FOUND,  /*!< No devices found on system. */
 
-     INVALID_DEVICE,    /*!< An invalid device ID was specified. */
 
-     MEMORY_ERROR,      /*!< An error occured during memory allocation. */
 
-     INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
 
-     INVALID_USE,       /*!< The function was called incorrectly. */
 
-     DRIVER_ERROR,      /*!< A system driver error occured. */
 
-     SYSTEM_ERROR,      /*!< A system error occured. */
 
-     THREAD_ERROR       /*!< A thread error occured. */
 
-   };
 
-   //! The constructor.
 
-   RtMidiError( const std::string& message, Type type = RtMidiError::UNSPECIFIED ) throw() : message_(message), type_(type) {}
 
-  
 
-   //! The destructor.
 
-   virtual ~RtMidiError( void ) throw() {}
 
-   //! Prints thrown error message to stderr.
 
-   virtual void printMessage( void ) const throw() { std::cerr << '\n' << message_ << "\n\n"; }
 
-   //! Returns the thrown error message type.
 
-   virtual const Type& getType(void) const throw() { return type_; }
 
-   //! Returns the thrown error message string.
 
-   virtual const std::string& getMessage(void) const throw() { return message_; }
 
-   //! Returns the thrown error message as a c-style string.
 
-   virtual const char* what( void ) const throw() { return message_.c_str(); }
 
-  protected:
 
-   std::string message_;
 
-   Type type_;
 
- };
 
- class RtMidi
 
- {
 
-  public:
 
-   //! MIDI API specifier arguments.
 
-   enum Api {
 
-     UNSPECIFIED,    /*!< Search for a working compiled API. */
 
-     MACOSX_CORE,    /*!< Macintosh OS-X Core Midi API. */
 
-     LINUX_ALSA,     /*!< The Advanced Linux Sound Architecture API. */
 
-     UNIX_JACK,      /*!< The Jack Low-Latency MIDI Server API. */
 
-     WINDOWS_MM,     /*!< The Microsoft Multimedia MIDI API. */
 
-     WINDOWS_KS,     /*!< The Microsoft Kernel Streaming MIDI API. */
 
-     RTMIDI_DUMMY    /*!< A compilable but non-functional API. */
 
-   };
 
-   //! A static function to determine the current RtMidi version.
 
-   static std::string getVersion( void ) throw();
 
-   //! A static function to determine the available compiled MIDI APIs.
 
-   /*!
 
-     The values returned in the std::vector can be compared against
 
-     the enumerated list values.  Note that there can be more than one
 
-     API compiled for certain operating systems.
 
-   */
 
-   static void getCompiledApi( std::vector<RtMidi::Api> &apis ) throw();
 
-   //! Pure virtual openPort() function.
 
-   virtual void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi" ) ) = 0;
 
-   //! Pure virtual openVirtualPort() function.
 
-   virtual void openVirtualPort( const std::string portName = std::string( "RtMidi" ) ) = 0;
 
-   //! Pure virtual getPortCount() function.
 
-   virtual unsigned int getPortCount() = 0;
 
-   //! Pure virtual getPortName() function.
 
-   virtual std::string getPortName( unsigned int portNumber = 0 ) = 0;
 
-   //! Pure virtual closePort() function.
 
-   virtual void closePort( void ) = 0;
 
-   //! A basic error reporting function for RtMidi classes.
 
-   static void error( RtMidiError::Type type, std::string &errorString );
 
-  protected:
 
-   RtMidi() {};
 
-   virtual ~RtMidi() {};
 
- };
 
- /**********************************************************************/
 
- /*! \class RtMidiIn
 
-     \brief A realtime MIDI input class.
 
-     This class provides a common, platform-independent API for
 
-     realtime MIDI input.  It allows access to a single MIDI input
 
-     port.  Incoming MIDI messages are either saved to a queue for
 
-     retrieval using the getMessage() function or immediately passed to
 
-     a user-specified callback function.  Create multiple instances of
 
-     this class to connect to more than one MIDI device at the same
 
-     time.  With the OS-X and Linux ALSA MIDI APIs, it is also possible
 
-     to open a virtual input port to which other MIDI software clients
 
-     can connect.
 
-     by Gary P. Scavone, 2003-2012.
 
- */
 
- /**********************************************************************/
 
- // **************************************************************** //
 
- //
 
- // RtMidiIn and RtMidiOut class declarations.
 
- //
 
- // RtMidiIn / RtMidiOut are "controllers" used to select an available
 
- // MIDI input or output interface.  They present common APIs for the
 
- // user to call but all functionality is implemented by the classes
 
- // MidiInApi, MidiOutApi and their subclasses.  RtMidiIn and RtMidiOut
 
- // each create an instance of a MidiInApi or MidiOutApi subclass based
 
- // on the user's API choice.  If no choice is made, they attempt to
 
- // make a "logical" API selection.
 
- //
 
- // **************************************************************** //
 
- class MidiInApi;
 
- class MidiOutApi;
 
- class RtMidiIn : public RtMidi
 
- {
 
-  public:
 
-   //! User callback function type definition.
 
-   typedef void (*RtMidiCallback)( double timeStamp, std::vector<unsigned char> *message, void *userData);
 
-   //! Default constructor that allows an optional api, client name and queue size.
 
-   /*!
 
-     An exception will be thrown if a MIDI system initialization
 
-     error occurs.  The queue size defines the maximum number of
 
-     messages that can be held in the MIDI queue (when not using a
 
-     callback function).  If the queue size limit is reached,
 
-     incoming messages will be ignored.
 
-     If no API argument is specified and multiple API support has been
 
-     compiled, the default order of use is JACK, ALSA (Linux) and CORE,
 
-     Jack (OS-X).
 
-   */
 
-   RtMidiIn( RtMidi::Api api=UNSPECIFIED,
 
-             const std::string clientName = std::string( "RtMidi Input Client"),
 
-             unsigned int queueSizeLimit = 100 );
 
-   //! If a MIDI connection is still open, it will be closed by the destructor.
 
-   ~RtMidiIn ( void ) throw();
 
-   //! Returns the MIDI API specifier for the current instance of RtMidiIn.
 
-   RtMidi::Api getCurrentApi( void ) throw();
 
-   //! Open a MIDI input connection.
 
-   /*!
 
-     An optional port number greater than 0 can be specified.
 
-     Otherwise, the default or first port found is opened.
 
-   */
 
-   void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Input" ) );
 
-   //! Create a virtual input port, with optional name, to allow software connections (OS X and ALSA only).
 
-   /*!
 
-     This function creates a virtual MIDI input port to which other
 
-     software applications can connect.  This type of functionality
 
-     is currently only supported by the Macintosh OS-X and Linux ALSA
 
-     APIs (the function does nothing for the other APIs).
 
-   */
 
-   void openVirtualPort( const std::string portName = std::string( "RtMidi Input" ) );
 
-   //! Set a callback function to be invoked for incoming MIDI messages.
 
-   /*!
 
-     The callback function will be called whenever an incoming MIDI
 
-     message is received.  While not absolutely necessary, it is best
 
-     to set the callback function before opening a MIDI port to avoid
 
-     leaving some messages in the queue.
 
-   */
 
-   void setCallback( RtMidiCallback callback, void *userData = 0 );
 
-   //! Cancel use of the current callback function (if one exists).
 
-   /*!
 
-     Subsequent incoming MIDI messages will be written to the queue
 
-     and can be retrieved with the \e getMessage function.
 
-   */
 
-   void cancelCallback();
 
-   //! Close an open MIDI connection (if one exists).
 
-   void closePort( void );
 
-   //! Return the number of available MIDI input ports.
 
-   unsigned int getPortCount();
 
-   //! Return a string identifier for the specified MIDI input port number.
 
-   /*!
 
-     An empty string is returned if an invalid port specifier is provided.
 
-   */
 
-   std::string getPortName( unsigned int portNumber = 0 );
 
-   //! Specify whether certain MIDI message types should be queued or ignored during input.
 
-   /*!
 
-     o      By default, MIDI timing and active sensing messages are ignored
 
-     during message input because of their relative high data rates.
 
-     MIDI sysex messages are ignored by default as well.  Variable
 
-     values of "true" imply that the respective message type will be
 
-     ignored.
 
-   */
 
-   void ignoreTypes( bool midiSysex = true, bool midiTime = true, bool midiSense = true );
 
-   //! Fill the user-provided vector with the data bytes for the next available MIDI message in the input queue and return the event delta-time in seconds.
 
-   /*!
 
-     This function returns immediately whether a new message is
 
-     available or not.  A valid message is indicated by a non-zero
 
-     vector size.  An exception is thrown if an error occurs during
 
-     message retrieval or an input connection was not previously
 
-     established.
 
-   */
 
-   double getMessage( std::vector<unsigned char> *message );
 
-  protected:
 
-   void openMidiApi( RtMidi::Api api, const std::string clientName, unsigned int queueSizeLimit );
 
-   MidiInApi *rtapi_;
 
- };
 
- /**********************************************************************/
 
- /*! \class RtMidiOut
 
-     \brief A realtime MIDI output class.
 
-     This class provides a common, platform-independent API for MIDI
 
-     output.  It allows one to probe available MIDI output ports, to
 
-     connect to one such port, and to send MIDI bytes immediately over
 
-     the connection.  Create multiple instances of this class to
 
-     connect to more than one MIDI device at the same time.  With the
 
-     OS-X and Linux ALSA MIDI APIs, it is also possible to open a
 
-     virtual port to which other MIDI software clients can connect.
 
-     by Gary P. Scavone, 2003-2012.
 
- */
 
- /**********************************************************************/
 
- class RtMidiOut : public RtMidi
 
- {
 
-  public:
 
-   //! Default constructor that allows an optional client name.
 
-   /*!
 
-     An exception will be thrown if a MIDI system initialization error occurs.
 
-     If no API argument is specified and multiple API support has been
 
-     compiled, the default order of use is JACK, ALSA (Linux) and CORE,
 
-     Jack (OS-X).
 
-   */
 
-   RtMidiOut( RtMidi::Api api=UNSPECIFIED,
 
-              const std::string clientName = std::string( "RtMidi Output Client") );
 
-   //! The destructor closes any open MIDI connections.
 
-   ~RtMidiOut( void ) throw();
 
-   //! Returns the MIDI API specifier for the current instance of RtMidiOut.
 
-   RtMidi::Api getCurrentApi( void ) throw();
 
-   //! Open a MIDI output connection.
 
-   /*!
 
-       An optional port number greater than 0 can be specified.
 
-       Otherwise, the default or first port found is opened.  An
 
-       exception is thrown if an error occurs while attempting to make
 
-       the port connection.
 
-   */
 
-   void openPort( unsigned int portNumber = 0, const std::string portName = std::string( "RtMidi Output" ) );
 
-   //! Close an open MIDI connection (if one exists).
 
-   void closePort( void );
 
-   //! Create a virtual output port, with optional name, to allow software connections (OS X and ALSA only).
 
-   /*!
 
-       This function creates a virtual MIDI output port to which other
 
-       software applications can connect.  This type of functionality
 
-       is currently only supported by the Macintosh OS-X and Linux ALSA
 
-       APIs (the function does nothing with the other APIs).  An
 
-       exception is thrown if an error occurs while attempting to create
 
-       the virtual port.
 
-   */
 
-   void openVirtualPort( const std::string portName = std::string( "RtMidi Output" ) );
 
-   //! Return the number of available MIDI output ports.
 
-   unsigned int getPortCount( void );
 
-   //! Return a string identifier for the specified MIDI port type and number.
 
-   /*!
 
-       An empty string is returned if an invalid port specifier is provided.
 
-   */
 
-   std::string getPortName( unsigned int portNumber = 0 );
 
-   //! Immediately send a single message out an open MIDI output port.
 
-   /*!
 
-       An exception is thrown if an error occurs during output or an
 
-       output connection was not previously established.
 
-   */
 
-   void sendMessage( std::vector<unsigned char> *message );
 
-  protected:
 
-   void openMidiApi( RtMidi::Api api, const std::string clientName );
 
-   MidiOutApi *rtapi_;
 
- };
 
- // **************************************************************** //
 
- //
 
- // MidiInApi / MidiOutApi class declarations.
 
- //
 
- // Subclasses of MidiInApi and MidiOutApi contain all API- and
 
- // OS-specific code necessary to fully implement the RtMidi API.
 
- //
 
- // Note that MidiInApi and MidiOutApi are abstract base classes and
 
- // cannot be explicitly instantiated.  RtMidiIn and RtMidiOut will
 
- // create instances of a MidiInApi or MidiOutApi subclass.
 
- //
 
- // **************************************************************** //
 
- class MidiInApi
 
- {
 
-  public:
 
-   MidiInApi( unsigned int queueSizeLimit );
 
-   virtual ~MidiInApi( void );
 
-   virtual RtMidi::Api getCurrentApi( void ) = 0;
 
-   virtual void openPort( unsigned int portNumber, const std::string portName ) = 0;
 
-   virtual void openVirtualPort( const std::string portName ) = 0;
 
-   virtual void closePort( void ) = 0;
 
-   void setCallback( RtMidiIn::RtMidiCallback callback, void *userData );
 
-   void cancelCallback( void );
 
-   virtual unsigned int getPortCount( void ) = 0;
 
-   virtual std::string getPortName( unsigned int portNumber ) = 0;
 
-   virtual void ignoreTypes( bool midiSysex, bool midiTime, bool midiSense );
 
-   double getMessage( std::vector<unsigned char> *message );
 
-   // A MIDI structure used internally by the class to store incoming
 
-   // messages.  Each message represents one and only one MIDI message.
 
-   struct MidiMessage { 
 
-     std::vector<unsigned char> bytes; 
 
-     double timeStamp;
 
-     // Default constructor.
 
-   MidiMessage()
 
-   :bytes(0), timeStamp(0.0) {}
 
-   };
 
-   struct MidiQueue {
 
-     unsigned int front;
 
-     unsigned int back;
 
-     unsigned int size;
 
-     unsigned int ringSize;
 
-     MidiMessage *ring;
 
-     // Default constructor.
 
-   MidiQueue()
 
-   :front(0), back(0), size(0), ringSize(0) {}
 
-   };
 
-   // The RtMidiInData structure is used to pass private class data to
 
-   // the MIDI input handling function or thread.
 
-   struct RtMidiInData {
 
-     MidiQueue queue;
 
-     MidiMessage message;
 
-     unsigned char ignoreFlags;
 
-     bool doInput;
 
-     bool firstMessage;
 
-     void *apiData;
 
-     bool usingCallback;
 
-     RtMidiIn::RtMidiCallback userCallback;
 
-     void *userData;
 
-     bool continueSysex;
 
-     // Default constructor.
 
-   RtMidiInData()
 
-   : ignoreFlags(7), doInput(false), firstMessage(true),
 
-       apiData(0), usingCallback(false), userCallback(0), userData(0),
 
-       continueSysex(false) {}
 
-   };
 
-  protected:
 
-   virtual void initialize( const std::string& clientName ) = 0;
 
-   RtMidiInData inputData_;
 
-   void *apiData_;
 
-   bool connected_;
 
-   std::string errorString_;
 
- };
 
- class MidiOutApi
 
- {
 
-  public:
 
-   MidiOutApi( void );
 
-   virtual ~MidiOutApi( void );
 
-   virtual RtMidi::Api getCurrentApi( void ) = 0;
 
-   virtual void openPort( unsigned int portNumber, const std::string portName ) = 0;
 
-   virtual void openVirtualPort( const std::string portName ) = 0;
 
-   virtual void closePort( void ) = 0;
 
-   virtual unsigned int getPortCount( void ) = 0;
 
-   virtual std::string getPortName( unsigned int portNumber ) = 0;
 
-   virtual void sendMessage( std::vector<unsigned char> *message ) = 0;
 
-  protected:
 
-   virtual void initialize( const std::string& clientName ) = 0;
 
-   void *apiData_;
 
-   bool connected_;
 
-   std::string errorString_;
 
- };
 
- // **************************************************************** //
 
- //
 
- // Inline RtMidiIn and RtMidiOut definitions.
 
- //
 
- // **************************************************************** //
 
- inline RtMidi::Api RtMidiIn :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
 
- inline void RtMidiIn :: openPort( unsigned int portNumber, const std::string portName ) { return rtapi_->openPort( portNumber, portName ); }
 
- inline void RtMidiIn :: openVirtualPort( const std::string portName ) { return rtapi_->openVirtualPort( portName ); }
 
- inline void RtMidiIn :: closePort( void ) { return rtapi_->closePort(); }
 
- inline void RtMidiIn :: setCallback( RtMidiCallback callback, void *userData ) { return rtapi_->setCallback( callback, userData ); }
 
- inline void RtMidiIn :: cancelCallback( void ) { return rtapi_->cancelCallback(); }
 
- inline unsigned int RtMidiIn :: getPortCount( void ) { return rtapi_->getPortCount(); }
 
- inline std::string RtMidiIn :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); }
 
- inline void RtMidiIn :: ignoreTypes( bool midiSysex, bool midiTime, bool midiSense ) { return rtapi_->ignoreTypes( midiSysex, midiTime, midiSense ); }
 
- inline double RtMidiIn :: getMessage( std::vector<unsigned char> *message ) { return rtapi_->getMessage( message ); }
 
- inline RtMidi::Api RtMidiOut :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
 
- inline void RtMidiOut :: openPort( unsigned int portNumber, const std::string portName ) { return rtapi_->openPort( portNumber, portName ); }
 
- inline void RtMidiOut :: openVirtualPort( const std::string portName ) { return rtapi_->openVirtualPort( portName ); }
 
- inline void RtMidiOut :: closePort( void ) { return rtapi_->closePort(); }
 
- inline unsigned int RtMidiOut :: getPortCount( void ) { return rtapi_->getPortCount(); }
 
- inline std::string RtMidiOut :: getPortName( unsigned int portNumber ) { return rtapi_->getPortName( portNumber ); }
 
- inline void RtMidiOut :: sendMessage( std::vector<unsigned char> *message ) { return rtapi_->sendMessage( message ); }
 
- // **************************************************************** //
 
- //
 
- // MidiInApi and MidiOutApi subclass prototypes.
 
- //
 
- // **************************************************************** //
 
- #if !defined(__LINUX_ALSA__) && !defined(__UNIX_JACK__) && !defined(__MACOSX_CORE__) && !defined(__WINDOWS_MM__) && !defined(__WINDOWS_KS__)
 
-   #define __RTMIDI_DUMMY__
 
- #endif
 
- #if defined(__MACOSX_CORE__)
 
- class MidiInCore: public MidiInApi
 
- {
 
-  public:
 
-   MidiInCore( const std::string clientName, unsigned int queueSizeLimit );
 
-   ~MidiInCore( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-  protected:
 
-   std::string clientName;
 
-   void connect( void );
 
-   void initialize( const std::string& clientName );
 
- };
 
- class MidiOutCore: public MidiOutApi
 
- {
 
-  public:
 
-   MidiOutCore( const std::string clientName );
 
-   ~MidiOutCore( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::MACOSX_CORE; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-   void sendMessage( std::vector<unsigned char> *message );
 
-  protected:
 
-   std::string clientName;
 
-   void connect( void );
 
-   void initialize( const std::string& clientName );
 
- };
 
- #endif
 
- #if defined(__UNIX_JACK__)
 
- class MidiInJack: public MidiInApi
 
- {
 
-  public:
 
-   MidiInJack( const std::string clientName, unsigned int queueSizeLimit );
 
-   ~MidiInJack( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- class MidiOutJack: public MidiOutApi
 
- {
 
-  public:
 
-   MidiOutJack( const std::string clientName );
 
-   ~MidiOutJack( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::UNIX_JACK; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-   void sendMessage( std::vector<unsigned char> *message );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- #endif
 
- #if defined(__LINUX_ALSA__)
 
- class MidiInAlsa: public MidiInApi
 
- {
 
-  public:
 
-   MidiInAlsa( const std::string clientName, unsigned int queueSizeLimit );
 
-   ~MidiInAlsa( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- class MidiOutAlsa: public MidiOutApi
 
- {
 
-  public:
 
-   MidiOutAlsa( const std::string clientName );
 
-   ~MidiOutAlsa( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::LINUX_ALSA; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-   void sendMessage( std::vector<unsigned char> *message );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- #endif
 
- #if defined(__WINDOWS_MM__)
 
- class MidiInWinMM: public MidiInApi
 
- {
 
-  public:
 
-   MidiInWinMM( const std::string clientName, unsigned int queueSizeLimit );
 
-   ~MidiInWinMM( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- class MidiOutWinMM: public MidiOutApi
 
- {
 
-  public:
 
-   MidiOutWinMM( const std::string clientName );
 
-   ~MidiOutWinMM( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_MM; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-   void sendMessage( std::vector<unsigned char> *message );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- #endif
 
- #if defined(__WINDOWS_KS__)
 
- class MidiInWinKS: public MidiInApi
 
- {
 
-  public:
 
-   MidiInWinKS( const std::string clientName, unsigned int queueSizeLimit );
 
-   ~MidiInWinKS( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_KS; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- class MidiOutWinKS: public MidiOutApi
 
- {
 
-  public:
 
-   MidiOutWinKS( const std::string clientName );
 
-   ~MidiOutWinKS( void );
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::WINDOWS_KS; };
 
-   void openPort( unsigned int portNumber, const std::string portName );
 
-   void openVirtualPort( const std::string portName );
 
-   void closePort( void );
 
-   unsigned int getPortCount( void );
 
-   std::string getPortName( unsigned int portNumber );
 
-   void sendMessage( std::vector<unsigned char> *message );
 
-  protected:
 
-   void initialize( const std::string& clientName );
 
- };
 
- #endif
 
- #if defined(__RTMIDI_DUMMY__)
 
- class MidiInDummy: public MidiInApi
 
- {
 
-  public:
 
-  MidiInDummy( const std::string clientName, unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { errorString_ = "MidiInDummy: This class provides no functionality."; RtMidi::error( RtMidiError::WARNING, errorString_ ); };
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; };
 
-   void openPort( unsigned int portNumber, const std::string portName ) {};
 
-   void openVirtualPort( const std::string portName ) {};
 
-   void closePort( void ) {};
 
-   unsigned int getPortCount( void ) { return 0; };
 
-   std::string getPortName( unsigned int portNumber ) { return ""; };
 
-  protected:
 
-   void initialize( const std::string& clientName ) {};
 
- };
 
- class MidiOutDummy: public MidiOutApi
 
- {
 
-  public:
 
-   MidiOutDummy( const std::string clientName ) { errorString_ = "MidiOutDummy: This class provides no functionality."; RtMidi::error( RtMidiError::WARNING, errorString_ ); };
 
-   RtMidi::Api getCurrentApi( void ) { return RtMidi::RTMIDI_DUMMY; };
 
-   void openPort( unsigned int portNumber, const std::string portName ) {};
 
-   void openVirtualPort( const std::string portName ) {};
 
-   void closePort( void ) {};
 
-   unsigned int getPortCount( void ) { return 0; };
 
-   std::string getPortName( unsigned int portNumber ) { return ""; };
 
-   void sendMessage( std::vector<unsigned char> *message ) {};
 
-  protected:
 
-   void initialize( const std::string& clientName ) {};
 
- };
 
- #endif
 
- #endif
 
 
  |