46 #define RTMIDI_VERSION "2.1.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;
148 virtual unsigned int getPortCount() = 0;
151 virtual std::string getPortName(
unsigned int portNumber = 0 ) = 0;
154 virtual void closePort(
void ) = 0;
157 virtual bool isPortOpen(
void )
const = 0;
211 typedef void (*RtMidiCallback)(
double timeStamp, std::vector<unsigned char> *message,
void *userData);
232 const std::string clientName = std::string(
"RtMidi Input Client"),
233 unsigned int queueSizeLimit = 100 );
247 void openPort(
unsigned int portNumber = 0,
const std::string portName = std::string(
"RtMidi Input" ) );
259 void openVirtualPort(
const std::string portName = std::string(
"RtMidi Input" ) );
272 void setCallback( RtMidiCallback callback,
void *userData = 0 );
279 void cancelCallback();
282 void closePort(
void );
285 virtual bool isPortOpen()
const;
291 unsigned int getPortCount();
298 std::string getPortName(
unsigned int portNumber = 0 );
308 void ignoreTypes(
bool midiSysex =
true,
bool midiTime =
true,
bool midiSense =
true );
318 double getMessage( std::vector<unsigned char> *message );
328 void openMidiApi(
RtMidi::Api api,
const std::string clientName,
unsigned int queueSizeLimit );
361 const std::string clientName = std::string(
"RtMidi Output Client") );
376 void openPort(
unsigned int portNumber = 0,
const std::string portName = std::string(
"RtMidi Output" ) );
379 void closePort(
void );
382 virtual bool isPortOpen()
const;
393 void openVirtualPort(
const std::string portName = std::string(
"RtMidi Output" ) );
396 unsigned int getPortCount(
void );
402 std::string getPortName(
unsigned int portNumber = 0 );
409 void sendMessage( std::vector<unsigned char> *message );
419 void openMidiApi(
RtMidi::Api api,
const std::string clientName );
443 virtual void openPort(
unsigned int portNumber,
const std::string portName ) = 0;
444 virtual void openVirtualPort(
const std::string portName ) = 0;
445 virtual void closePort(
void ) = 0;
447 virtual unsigned int getPortCount(
void ) = 0;
448 virtual std::string getPortName(
unsigned int portNumber ) = 0;
450 inline bool isPortOpen()
const {
return connected_; }
457 virtual void initialize(
const std::string& clientName ) = 0;
461 std::string errorString_;
465 class MidiInApi :
public MidiApi
469 MidiInApi(
unsigned int queueSizeLimit );
470 virtual ~MidiInApi(
void );
472 void cancelCallback(
void );
473 virtual void ignoreTypes(
bool midiSysex,
bool midiTime,
bool midiSense );
474 double getMessage( std::vector<unsigned char> *message );
479 std::vector<unsigned char> bytes;
484 :bytes(0), timeStamp(0.0) {}
491 unsigned int ringSize;
496 :front(0), back(0), size(0), ringSize(0) {}
501 struct RtMidiInData {
504 unsigned char ignoreFlags;
515 : ignoreFlags(7), doInput(
false), firstMessage(
true),
516 apiData(0), usingCallback(
false), userCallback(0), userData(0),
517 continueSysex(
false) {}
521 RtMidiInData inputData_;
524 class MidiOutApi :
public MidiApi
529 virtual ~MidiOutApi(
void );
530 virtual void sendMessage( std::vector<unsigned char> *message ) = 0;
540 inline void RtMidiIn :: openPort(
unsigned int portNumber,
const std::string portName ) { rtapi_->openPort( portNumber, portName ); }
544 inline void RtMidiIn :: setCallback( RtMidiCallback callback,
void *userData ) { ((MidiInApi *)rtapi_)->setCallback( callback, userData ); }
548 inline void RtMidiIn :: ignoreTypes(
bool midiSysex,
bool midiTime,
bool midiSense ) { ((MidiInApi *)rtapi_)->ignoreTypes( midiSysex, midiTime, midiSense ); }
549 inline double RtMidiIn :: getMessage( std::vector<unsigned char> *message ) {
return ((MidiInApi *)rtapi_)->getMessage( message ); }
553 inline void RtMidiOut :: openPort(
unsigned int portNumber,
const std::string portName ) { rtapi_->openPort( portNumber, portName ); }
568 #if !defined(__LINUX_ALSA__) && !defined(__UNIX_JACK__) && !defined(__MACOSX_CORE__) && !defined(__WINDOWS_MM__) 569 #define __RTMIDI_DUMMY__ 572 #if defined(__MACOSX_CORE__) 574 class MidiInCore:
public MidiInApi
577 MidiInCore(
const std::string clientName,
unsigned int queueSizeLimit );
580 void openPort(
unsigned int portNumber,
const std::string portName );
581 void openVirtualPort(
const std::string portName );
582 void closePort(
void );
583 unsigned int getPortCount(
void );
584 std::string getPortName(
unsigned int portNumber );
587 void initialize(
const std::string& clientName );
590 class MidiOutCore:
public MidiOutApi
593 MidiOutCore(
const std::string clientName );
594 ~MidiOutCore(
void );
596 void openPort(
unsigned int portNumber,
const std::string portName );
597 void openVirtualPort(
const std::string portName );
598 void closePort(
void );
599 unsigned int getPortCount(
void );
600 std::string getPortName(
unsigned int portNumber );
601 void sendMessage( std::vector<unsigned char> *message );
604 void initialize(
const std::string& clientName );
609 #if defined(__UNIX_JACK__) 611 class MidiInJack:
public MidiInApi
614 MidiInJack(
const std::string clientName,
unsigned int queueSizeLimit );
617 void openPort(
unsigned int portNumber,
const std::string portName );
618 void openVirtualPort(
const std::string portName );
619 void closePort(
void );
620 unsigned int getPortCount(
void );
621 std::string getPortName(
unsigned int portNumber );
624 std::string clientName;
626 void connect(
void );
627 void initialize(
const std::string& clientName );
630 class MidiOutJack:
public MidiOutApi
633 MidiOutJack(
const std::string clientName );
634 ~MidiOutJack(
void );
636 void openPort(
unsigned int portNumber,
const std::string portName );
637 void openVirtualPort(
const std::string portName );
638 void closePort(
void );
639 unsigned int getPortCount(
void );
640 std::string getPortName(
unsigned int portNumber );
641 void sendMessage( std::vector<unsigned char> *message );
644 std::string clientName;
646 void connect(
void );
647 void initialize(
const std::string& clientName );
652 #if defined(__LINUX_ALSA__) 654 class MidiInAlsa:
public MidiInApi
657 MidiInAlsa(
const std::string clientName,
unsigned int queueSizeLimit );
660 void openPort(
unsigned int portNumber,
const std::string portName );
661 void openVirtualPort(
const std::string portName );
662 void closePort(
void );
663 unsigned int getPortCount(
void );
664 std::string getPortName(
unsigned int portNumber );
667 void initialize(
const std::string& clientName );
670 class MidiOutAlsa:
public MidiOutApi
673 MidiOutAlsa(
const std::string clientName );
674 ~MidiOutAlsa(
void );
676 void openPort(
unsigned int portNumber,
const std::string portName );
677 void openVirtualPort(
const std::string portName );
678 void closePort(
void );
679 unsigned int getPortCount(
void );
680 std::string getPortName(
unsigned int portNumber );
681 void sendMessage( std::vector<unsigned char> *message );
684 void initialize(
const std::string& clientName );
689 #if defined(__WINDOWS_MM__) 691 class MidiInWinMM:
public MidiInApi
694 MidiInWinMM(
const std::string clientName,
unsigned int queueSizeLimit );
695 ~MidiInWinMM(
void );
697 void openPort(
unsigned int portNumber,
const std::string portName );
698 void openVirtualPort(
const std::string portName );
699 void closePort(
void );
700 unsigned int getPortCount(
void );
701 std::string getPortName(
unsigned int portNumber );
704 void initialize(
const std::string& clientName );
707 class MidiOutWinMM:
public MidiOutApi
710 MidiOutWinMM(
const std::string clientName );
711 ~MidiOutWinMM(
void );
713 void openPort(
unsigned int portNumber,
const std::string portName );
714 void openVirtualPort(
const std::string portName );
715 void closePort(
void );
716 unsigned int getPortCount(
void );
717 std::string getPortName(
unsigned int portNumber );
718 void sendMessage( std::vector<unsigned char> *message );
721 void initialize(
const std::string& clientName );
726 #if defined(__RTMIDI_DUMMY__) 728 class MidiInDummy:
public MidiInApi
731 MidiInDummy(
const std::string ,
unsigned int queueSizeLimit ) : MidiInApi( queueSizeLimit ) { errorString_ =
"MidiInDummy: This class provides no functionality."; error(
RtMidiError::WARNING, errorString_ ); }
733 void openPort(
unsigned int ,
const std::string ) {}
734 void openVirtualPort(
const std::string ) {}
735 void closePort(
void ) {}
736 unsigned int getPortCount(
void ) {
return 0; }
737 std::string getPortName(
unsigned int portNumber ) {
return ""; }
740 void initialize(
const std::string& ) {}
743 class MidiOutDummy:
public MidiOutApi
746 MidiOutDummy(
const std::string ) { errorString_ =
"MidiOutDummy: This class provides no functionality."; error(
RtMidiError::WARNING, errorString_ ); }
748 void openPort(
unsigned int ,
const std::string ) {}
749 void openVirtualPort(
const std::string ) {}
750 void closePort(
void ) {}
751 unsigned int getPortCount(
void ) {
return 0; }
752 std::string getPortName(
unsigned int ) {
return ""; }
753 void sendMessage( std::vector<unsigned char> * ) {}
756 void initialize(
const std::string& ) {}
RtMidi::Api getCurrentApi(void)
Returns the MIDI API specifier for the current instance of RtMidiIn.
Definition: RtMidi.h:539
std::string getPortName(unsigned int portNumber=0)
Return a string identifier for the specified MIDI port type and number.
Definition: RtMidi.h:558
A realtime MIDI input class.
Definition: RtMidi.h:206
RtMidiError(const std::string &message, Type type=RtMidiError::UNSPECIFIED)
The constructor.
Definition: RtMidi.h:82
An abstract base class for realtime MIDI input/output.
Definition: RtMidi.h:116
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:548
void closePort(void)
Close an open MIDI connection (if one exists).
Definition: RtMidi.h:542
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:211
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:541
void sendMessage(std::vector< unsigned char > *message)
Immediately send a single message out an open MIDI output port.
Definition: RtMidi.h:559
void setCallback(RtMidiCallback callback, void *userData=0)
Set a callback function to be invoked for incoming MIDI messages.
Definition: RtMidi.h:544
Type
Defined RtMidiError types.
Definition: RtMidi.h:67
virtual void setErrorCallback(RtMidiErrorCallback errorCallback=NULL)
Set an error callback function to be invoked when an error has occured.
Definition: RtMidi.h:560
virtual const std::string & getMessage(void) const
Returns the thrown error message string.
Definition: RtMidi.h:94
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:554
unsigned int getPortCount(void)
Return the number of available MIDI output ports.
Definition: RtMidi.h:557
virtual bool isPortOpen() const
Returns true if a port is open and false if not.
Definition: RtMidi.h:543
unsigned int getPortCount()
Return the number of available MIDI input ports.
Definition: RtMidi.h:546
void cancelCallback()
Cancel use of the current callback function (if one exists).
Definition: RtMidi.h:545
void closePort(void)
Close an open MIDI connection (if one exists).
Definition: RtMidi.h:555
std::string getPortName(unsigned int portNumber=0)
Return a string identifier for the specified MIDI input port number.
Definition: RtMidi.h:547
RtMidi::Api getCurrentApi(void)
Returns the MIDI API specifier for the current instance of RtMidiOut.
Definition: RtMidi.h:552
virtual void printMessage(void) const
Prints thrown error message to stderr.
Definition: RtMidi.h:88
void openPort(unsigned int portNumber=0, const std::string portName=std::string("RtMidi Output"))
Open a MIDI output connection.
Definition: RtMidi.h:553
virtual void setErrorCallback(RtMidiErrorCallback errorCallback=NULL)
Set an error callback function to be invoked when an error has occured.
Definition: RtMidi.h:550
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:556
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:549
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:348
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:540
void(* RtMidiErrorCallback)(RtMidiError::Type type, const std::string &errorText)
RtMidi error callback function prototype.
Definition: RtMidi.h:112