working on win32 uwp! and libremidi update
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
#pragma once
|
||||
#include <libremidi/api-c.h>
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#if defined(LIBREMIDI_EXPORTS)
|
||||
#if defined(_MSC_VER)
|
||||
#define LIBREMIDI_EXPORT __declspec(dllexport)
|
||||
#elif defined(__GNUC__) || defined(__clang__)
|
||||
#define LIBREMIDI_EXPORT __attribute__((visibility("default")))
|
||||
#endif
|
||||
#else
|
||||
#define LIBREMIDI_EXPORT
|
||||
#endif
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
typedef unsigned char libremidi_midi1_symbol;
|
||||
typedef libremidi_midi1_symbol* libremidi_midi1_message;
|
||||
|
||||
typedef uint32_t libremidi_midi2_symbol;
|
||||
typedef libremidi_midi2_symbol* libremidi_midi2_message;
|
||||
|
||||
typedef int64_t libremidi_timestamp;
|
||||
|
||||
typedef struct libremidi_midi_in_port libremidi_midi_in_port;
|
||||
typedef struct libremidi_midi_out_port libremidi_midi_out_port;
|
||||
typedef struct libremidi_midi_in_handle libremidi_midi_in_handle;
|
||||
typedef struct libremidi_midi_out_handle libremidi_midi_out_handle;
|
||||
typedef struct libremidi_midi_observer_handle libremidi_midi_observer_handle;
|
||||
|
||||
typedef struct libremidi_api_configuration libremidi_api_configuration;
|
||||
|
||||
enum libremidi_timestamp_mode
|
||||
{
|
||||
NoTimestamp,
|
||||
|
||||
Relative,
|
||||
Absolute,
|
||||
SystemMonotonic,
|
||||
AudioFrame,
|
||||
Custom
|
||||
};
|
||||
|
||||
typedef struct libremidi_api_configuration
|
||||
{
|
||||
enum libremidi_api api;
|
||||
enum
|
||||
{
|
||||
Observer,
|
||||
Input,
|
||||
Output
|
||||
} configuration_type;
|
||||
|
||||
void* data;
|
||||
} libremidi_api_configuration;
|
||||
|
||||
typedef struct libremidi_observer_configuration
|
||||
{
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const char* error, size_t error_len, const void* source_location);
|
||||
} on_error;
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const char* error, size_t error_len, const void* source_location);
|
||||
} on_warning;
|
||||
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const libremidi_midi_in_port*);
|
||||
} input_added;
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const libremidi_midi_in_port*);
|
||||
} input_removed;
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const libremidi_midi_out_port*);
|
||||
} output_added;
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const libremidi_midi_out_port*);
|
||||
} output_removed;
|
||||
|
||||
bool track_hardware;
|
||||
bool track_virtual;
|
||||
bool track_any;
|
||||
bool notify_in_constructor;
|
||||
} libremidi_observer_configuration;
|
||||
|
||||
typedef struct libremidi_midi1_callback
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, libremidi_timestamp, const libremidi_midi1_symbol*, size_t len);
|
||||
} libremidi_midi1_callback;
|
||||
|
||||
typedef struct libremidi_midi2_callback
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, libremidi_timestamp, const libremidi_midi2_symbol*, size_t len);
|
||||
} libremidi_midi2_callback;
|
||||
|
||||
typedef struct libremidi_midi_configuration
|
||||
{
|
||||
// Indicates the kind of callback requested, e.g. set MIDI1_RAW if you use the on_midi1_raw_data
|
||||
enum
|
||||
{
|
||||
MIDI1 = (1 << 1),
|
||||
MIDI1_RAW = (1 << 2),
|
||||
MIDI2 = (1 << 3),
|
||||
MIDI2_RAW = (1 << 4)
|
||||
} version;
|
||||
|
||||
union
|
||||
{
|
||||
libremidi_midi_in_port* in_port;
|
||||
libremidi_midi_out_port* out_port;
|
||||
};
|
||||
|
||||
union
|
||||
{
|
||||
libremidi_midi1_callback on_midi1_message;
|
||||
libremidi_midi1_callback on_midi1_raw_data;
|
||||
libremidi_midi2_callback on_midi2_message;
|
||||
libremidi_midi2_callback on_midi2_raw_data;
|
||||
};
|
||||
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
libremidi_timestamp (*callback)(void* ctx, libremidi_timestamp);
|
||||
} get_timestamp;
|
||||
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const char* error, size_t error_len, const void* source_location);
|
||||
} on_error;
|
||||
struct
|
||||
{
|
||||
void* context;
|
||||
void (*callback)(void* ctx, const char* error, size_t error_len, const void* source_location);
|
||||
} on_warning;
|
||||
|
||||
const char* port_name;
|
||||
bool virtual_port;
|
||||
|
||||
bool ignore_sysex;
|
||||
bool ignore_timing;
|
||||
bool ignore_sensing;
|
||||
|
||||
enum libremidi_timestamp_mode timestamps;
|
||||
} libremidi_midi_configuration;
|
||||
|
||||
/// API utilities
|
||||
LIBREMIDI_EXPORT
|
||||
const char* libremidi_get_version(void);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
void libremidi_midi1_available_apis(void* ctx, void (*)(void*, libremidi_api));
|
||||
LIBREMIDI_EXPORT
|
||||
void libremidi_midi2_available_apis(void* ctx, void (*)(void*, libremidi_api));
|
||||
LIBREMIDI_EXPORT
|
||||
const char* libremidi_api_identifier(libremidi_api);
|
||||
LIBREMIDI_EXPORT
|
||||
const char* libremidi_api_display_name(libremidi_api);
|
||||
LIBREMIDI_EXPORT
|
||||
libremidi_api libremidi_get_compiled_api_by_identifier(const char*);
|
||||
|
||||
/// Create configurations
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_api_configuration_init(libremidi_api_configuration*);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_observer_configuration_init(libremidi_observer_configuration*);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_configuration_init(libremidi_midi_configuration*);
|
||||
|
||||
/// Read information about port objects
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_in_port_clone(const libremidi_midi_in_port* port, libremidi_midi_in_port** dst);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_in_port_free(libremidi_midi_in_port* port);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_in_port_name(
|
||||
const libremidi_midi_in_port* port, const char** name, size_t* len);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_port_clone(
|
||||
const libremidi_midi_out_port* port, libremidi_midi_out_port** dst);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_port_free(libremidi_midi_out_port* port);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_port_name(
|
||||
const libremidi_midi_out_port* port, const char** name, size_t* len);
|
||||
|
||||
/// Observer API
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_observer_new(
|
||||
const libremidi_observer_configuration*, libremidi_api_configuration*,
|
||||
libremidi_midi_observer_handle**);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_observer_enumerate_input_ports(
|
||||
libremidi_midi_observer_handle*, void* context,
|
||||
void (*)(void* ctx, const libremidi_midi_in_port*));
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_observer_enumerate_output_ports(
|
||||
libremidi_midi_observer_handle*, void* context,
|
||||
void (*)(void* ctx, const libremidi_midi_out_port*));
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_observer_free(libremidi_midi_observer_handle*);
|
||||
|
||||
/// MIDI input API (read MIDI messages)
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_in_new(
|
||||
const libremidi_midi_configuration*, const libremidi_api_configuration*,
|
||||
libremidi_midi_in_handle**);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_in_is_connected(const libremidi_midi_in_handle*);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
libremidi_timestamp libremidi_midi_in_absolute_timestamp(libremidi_midi_in_handle*);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_in_free(libremidi_midi_in_handle*);
|
||||
|
||||
/// MIDI output API (send MIDI messages)
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_new(
|
||||
const libremidi_midi_configuration*, const libremidi_api_configuration*,
|
||||
libremidi_midi_out_handle**);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_is_connected(const libremidi_midi_out_handle*);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_send_message(
|
||||
libremidi_midi_out_handle*, const libremidi_midi1_symbol*, size_t);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_send_ump(libremidi_midi_out_handle*, const libremidi_midi2_symbol*, size_t);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_schedule_message(
|
||||
libremidi_midi_out_handle*, int64_t ts, const libremidi_midi1_symbol*, size_t);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_schedule_ump(
|
||||
libremidi_midi_out_handle*, int64_t ts, const libremidi_midi2_symbol*, size_t);
|
||||
|
||||
LIBREMIDI_EXPORT
|
||||
int libremidi_midi_out_free(libremidi_midi_out_handle*);
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user