|
-
- #include <stdbool.h>
- #include <stddef.h>
- #ifndef RTMIDI_C_H
- #define RTMIDI_C_H
-
- #if defined(RTMIDI_EXPORT)
- #define RTMIDIAPI __declspec(dllexport)
- #else
- #define RTMIDIAPI //__declspec(dllimport)
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- //! Wraps an RtMidi object for C function return statuses.
- struct RtMidiWrapper {
- //! The wrapped RtMidi object.
- void* ptr;
- void* data;
-
- //! True when the last function call was OK.
- bool ok;
-
- //! If an error occured (ok != true), set to an error message.
- const char* msg;
- };
-
- //! Typedef for a generic RtMidi pointer.
- typedef struct RtMidiWrapper* RtMidiPtr;
-
- //! Typedef for a generic RtMidiIn pointer.
- typedef struct RtMidiWrapper* RtMidiInPtr;
-
- //! Typedef for a generic RtMidiOut pointer.
- typedef struct RtMidiWrapper* RtMidiOutPtr;
-
-
- enum RtMidiApi {
- RT_MIDI_API_UNSPECIFIED, /*!< Search for a working compiled API. */
- RT_MIDI_API_MACOSX_CORE, /*!< Macintosh OS-X Core Midi API. */
- RT_MIDI_API_LINUX_ALSA, /*!< The Advanced Linux Sound Architecture API. */
- RT_MIDI_API_UNIX_JACK, /*!< The Jack Low-Latency MIDI Server API. */
- RT_MIDI_API_WINDOWS_MM, /*!< The Microsoft Multimedia MIDI API. */
- RT_MIDI_API_RTMIDI_DUMMY /*!< A compilable but non-functional API. */
- };
-
- enum RtMidiErrorType {
- RT_ERROR_WARNING, RT_ERROR_DEBUG_WARNING, RT_ERROR_UNSPECIFIED, RT_ERROR_NO_DEVICES_FOUND,
- RT_ERROR_INVALID_DEVICE, RT_ERROR_MEMORY_ERROR, RT_ERROR_INVALID_PARAMETER, RT_ERROR_INVALID_USE,
- RT_ERROR_DRIVER_ERROR, RT_ERROR_SYSTEM_ERROR, RT_ERROR_THREAD_ERROR
- };
-
- /*! The type of a RtMidi callback function.
- * \param timeStamp The time at which the message has been received.
- * \param message The midi message.
- * \param userData Additional user data for the callback.
- */
- typedef void(* RtMidiCCallback) (double timeStamp, const unsigned char* message,
- size_t messageSize, void *userData);
-
-
- /* RtMidi API */
-
- /*! Determine the available compiled MIDI APIs.
- * If the given `apis` parameter is null, returns the number of available APIs.
- * Otherwise, fill the given apis array with the RtMidi::Api values.
- *
- * \param apis An array or a null value.
- */
- RTMIDIAPI int rtmidi_get_compiled_api (enum RtMidiApi *apis); // return length for NULL argument.
-
- //! Report an error.
- RTMIDIAPI void rtmidi_error (enum RtMidiErrorType type, const char* errorString);
-
- /*! Open a MIDI port.
- *
- * \param port Must be greater than 0
- * \param portName Name for the application port.
- */
- RTMIDIAPI void rtmidi_open_port (RtMidiPtr device, unsigned int portNumber, const char *portName);
-
- /*! Creates a virtual MIDI port to which other software applications can
- * connect.
- *
- * \param portName Name for the application port.
- */
- RTMIDIAPI void rtmidi_open_virtual_port (RtMidiPtr device, const char *portName);
-
- /*! Close a MIDI connection.
- */
- RTMIDIAPI void rtmidi_close_port (RtMidiPtr device);
-
- /*! Return the number of available MIDI ports.
- */
- RTMIDIAPI unsigned int rtmidi_get_port_count (RtMidiPtr device);
-
- /*! Return a string identifier for the specified MIDI input port number.
- */
- RTMIDIAPI const char* rtmidi_get_port_name (RtMidiPtr device, unsigned int portNumber);
-
- /* RtMidiIn API */
-
- //! Create a default RtMidiInPtr value, with no initialization.
- RTMIDIAPI RtMidiInPtr rtmidi_in_create_default ();
-
- /*! Create a RtMidiInPtr value, with given api, clientName and queueSizeLimit.
- *
- * \param api An optional API id can be specified.
- * \param clientName An optional client name can be specified. This
- * will be used to group the ports that are created
- * by the application.
- * \param queueSizeLimit An optional size of the MIDI input queue can be
- * specified.
- */
- RTMIDIAPI RtMidiInPtr rtmidi_in_create (enum RtMidiApi api, const char *clientName, unsigned int queueSizeLimit);
-
- //! Deallocate the given pointer.
- RTMIDIAPI void rtmidi_in_free (RtMidiInPtr device);
-
- //! Returns the MIDI API specifier for the given instance of RtMidiIn.
- RTMIDIAPI enum RtMidiApi rtmidi_in_get_current_api (RtMidiPtr device);
-
- //! Set a callback function to be invoked for incoming MIDI messages.
- RTMIDIAPI void rtmidi_in_set_callback (RtMidiInPtr device, RtMidiCCallback callback, void *userData);
-
- //! Cancel use of the current callback function (if one exists).
- RTMIDIAPI void rtmidi_in_cancel_callback (RtMidiInPtr device);
-
- //! Specify whether certain MIDI message types should be queued or ignored during input.
- RTMIDIAPI void rtmidi_in_ignore_types (RtMidiInPtr device, bool midiSysex, bool midiTime, bool midiSense);
-
- /*! Fill the user-provided array with the data bytes for the next available
- * MIDI message in the input queue and return the event delta-time in seconds.
- *
- * \param message Must point to a char* that is already allocated.
- * SYSEX messages maximum size being 1024, a statically
- * allocated array could
- * be sufficient.
- * \param size Is used to return the size of the message obtained.
- */
- RTMIDIAPI double rtmidi_in_get_message (RtMidiInPtr device, unsigned char *message, size_t *size);
-
- /* RtMidiOut API */
-
- //! Create a default RtMidiInPtr value, with no initialization.
- RTMIDIAPI RtMidiOutPtr rtmidi_out_create_default ();
-
- /*! Create a RtMidiOutPtr value, with given and clientName.
- *
- * \param api An optional API id can be specified.
- * \param clientName An optional client name can be specified. This
- * will be used to group the ports that are created
- * by the application.
- */
- RTMIDIAPI RtMidiOutPtr rtmidi_out_create (enum RtMidiApi api, const char *clientName);
-
- //! Deallocate the given pointer.
- RTMIDIAPI void rtmidi_out_free (RtMidiOutPtr device);
-
- //! Returns the MIDI API specifier for the given instance of RtMidiOut.
- RTMIDIAPI enum RtMidiApi rtmidi_out_get_current_api (RtMidiPtr device);
-
- //! Immediately send a single message out an open MIDI output port.
- RTMIDIAPI int rtmidi_out_send_message (RtMidiOutPtr device, const unsigned char *message, int length);
-
-
- #ifdef __cplusplus
- }
- #endif
- #endif
|