| 
							- /*
 -  * Caitlib
 -  * Copyright (C) 2007 Nedko Arnaudov <nedko@arnaudov.name>
 -  * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com>
 -  *
 -  * This program is free software; you can redistribute it and/or modify
 -  * it under the terms of the GNU General Public License as published by
 -  * the Free Software Foundation; either version 2 of the License, or
 -  * any later version.
 -  *
 -  * This program is distributed in the hope that it will be useful,
 -  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 -  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -  * GNU General Public License for more details.
 -  *
 -  * For a full copy of the GNU General Public License see the COPYING file
 -  */
 - 
 - #ifndef CAITLIB_INCLUDED
 - #define CAITLIB_INCLUDED
 - 
 - #ifdef __cplusplus
 - extern "C" {
 - #else
 - #include <stdbool.h>
 - #endif
 - 
 - #include <stdint.h>
 - 
 - #ifdef _WIN32
 - #define CAITLIB_EXPORT __declspec (dllexport)
 - #else
 - #define CAITLIB_EXPORT __attribute__ ((visibility("default")))
 - #endif
 - 
 - /*!
 -  * @defgroup CaitlibAPI Caitlib API
 -  *
 -  * The Caitlib API
 -  *
 -  * @{
 -  */
 - 
 - /*!
 -  * Native handle for all Caitlib calls.
 -  */
 - typedef void* CaitlibHandle;
 - 
 - /*!
 -  * @defgroup MidiEventType MidiEvent Type
 -  * @{
 -  */
 - #define MIDI_EVENT_TYPE_NULL             0x00 //!< Null Event.
 - #define MIDI_EVENT_TYPE_NOTE_OFF         0x80 //!< Note-Off Event, uses Note data.
 - #define MIDI_EVENT_TYPE_NOTE_ON          0x90 //!< Note-On Event, uses Note data.
 - #define MIDI_EVENT_TYPE_AFTER_TOUCH      0xA0 //!< [Key] AfterTouch Event, uses Note data.
 - #define MIDI_EVENT_TYPE_CONTROL          0xB0 //!< Control Event, uses Control data.
 - #define MIDI_EVENT_TYPE_PROGRAM          0xC0 //!< Program Event, uses Program data.
 - #define MIDI_EVENT_TYPE_CHANNEL_PRESSURE 0xD0 //!< Channel Pressure Event, uses Pressure data.
 - #define MIDI_EVENT_TYPE_PITCH_WHEEL      0xE0 //!< PitchWheel Event, uses PitchWheel data.
 - #define MIDI_EVENT_TYPE_TIME             0xF1 //!< Time Event, uses Time Data.
 - /**@}*/
 - 
 - /*!
 -  * MidiEvent in Caitlib
 -  */
 - typedef struct _MidiEvent
 - {
 -     /*!
 -      * MidiEvent Type
 -      */
 -     uint16_t type;
 - 
 -     /*!
 -      * MidiEvent Channel (0 - 16)
 -      */
 -     uint8_t channel;
 - 
 -     /*!
 -      * MidiEvent Data (values depend on type).
 -      * \note Time event types ignore channel value.
 -      */
 -     union MidiEventData {
 -         struct MidiEventControl {
 -             uint8_t controller;
 -             uint8_t value;
 -         } control;
 - 
 -         struct MidiEventNote {
 -             uint8_t note;
 -             uint8_t velocity;
 -         } note;
 - 
 -         struct MidiEventPressure {
 -             uint8_t value;
 -         } pressure;
 - 
 -         struct MidiEventProgram {
 -             uint8_t value;
 -         } program;
 - 
 -         struct MidiEventPitchWheel {
 -             int16_t value;
 -         } pitchwheel;
 - 
 -         struct MidiEventTime {
 -             double  bpm;
 -             uint8_t sigNum;
 -             uint8_t sigDenum;
 -         } time;
 - 
 - #ifndef DOXYGEN
 -         // padding for future events
 -         struct _MidiEventPadding {
 -             uint8_t pad[32];
 -         } __padding;
 - #endif
 -     } data;
 - 
 -     /*!
 -      * MidiEvent Time (in frames)
 -      */
 -     uint32_t time;
 - 
 - } MidiEvent;
 - 
 - // ------------------------------------------------------------------------------------------
 - 
 - /*!
 -  * @defgroup Initialization
 -  *
 -  * Functions for initialization and destruction of Caitlib instances.
 -  * @{
 -  */
 - 
 - /*!
 -  * Initialize a new Caitlib instance with name \a instanceName.\n
 -  * Must be closed when no longer needed with caitlib_close().
 -  *
 -  * \note MIDI Input is disabled by default, call caitlib_want_events() to enable them.
 -  * \note There are no MIDI Output ports by default, call caitlib_create_port() for that.
 -  */
 - CAITLIB_EXPORT
 - CaitlibHandle caitlib_init(const char* instanceName);
 - 
 - /*!
 -  * Close a previously opened Caitlib instance.\n
 -  */
 - CAITLIB_EXPORT
 - void caitlib_close(CaitlibHandle handle);
 - 
 - /*!
 -  * Create a new MIDI Output port with name \a portName.\n
 -  * The return value is the ID for the port, which must be passed for any functions in the Output group.\n
 -  * The ID will be >= 0 for a valid port, or -1 if an error occurred.
 -  */
 - CAITLIB_EXPORT
 - uint32_t caitlib_create_port(CaitlibHandle handle, const char* portName);
 - 
 - /*!
 -  * Close a previously opened Caitlib instance.\n
 -  * There's no need to call this function before caitlib_close().
 -  */
 - CAITLIB_EXPORT
 - void caitlib_destroy_port(CaitlibHandle handle, uint32_t port);
 - 
 - /**@}*/
 - 
 - // ------------------------------------------------------------------------------------------
 - 
 - /*!
 -  * @defgroup Input
 -  *
 -  * Functions for MIDI Input handling.
 -  * @{
 -  */
 - 
 - /*!
 -  * Tell a Caitlib instance wherever if we're interested in MIDI Input.\n
 -  * By default MIDI Input is disabled.\n
 -  * It's safe to call this function multiple times during the lifetime of an instance.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_want_events(CaitlibHandle handle, bool yesNo);
 - 
 - /*!
 -  * Get a MidiEvent from a Caitlib instance buffer.\n
 -  * When there are no more messages in the buffer, this function returns NULL.
 -  */
 - CAITLIB_EXPORT
 - MidiEvent* caitlib_get_event(CaitlibHandle handle);
 - 
 - /**@}*/
 - 
 - // ------------------------------------------------------------------------------------------
 - 
 - /*!
 -  * @defgroup Output
 -  *
 -  * Functions for putting data into Caitlib instances (MIDI Output).
 -  * @{
 -  */
 - 
 - /*!
 -  * Put a MIDI event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_event(CaitlibHandle handle, uint32_t port, const MidiEvent* event);
 - 
 - /*!
 -  * Put a MIDI Control event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_control(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t controller, uint8_t value);
 - 
 - /*!
 -  * Put a MIDI Note On event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_note_on(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t velocity);
 - 
 - /*!
 -  * Put a MIDI Note Off event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_note_off(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t velocity);
 - 
 - /*!
 -  * Put a MIDI AfterTouch event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_aftertouch(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t pressure);
 - 
 - /*!
 -  * Put a MIDI Channel Pressure event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_channel_pressure(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t pressure);
 - 
 - /*!
 -  * Put a MIDI Program event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_program(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t program);
 - 
 - /*!
 -  * Put a MIDI PitchWheel event into a Caitlib instance port.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_pitchwheel(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, int16_t value);
 - 
 - /*!
 -  * Put a MIDI Time event into a Caitlib instance.
 -  */
 - CAITLIB_EXPORT
 - void caitlib_put_time(CaitlibHandle handle, uint32_t time, double bpm, uint8_t sigNum, uint8_t sigDenum);
 - 
 - /**@}*/
 - 
 - // ------------------------------------------------------------------------------------------
 - 
 - /**@}*/
 - 
 - #ifdef __cplusplus
 - }
 - #endif
 - 
 - #endif // CAITLIB_INCLUDED
 
 
  |