libremidi 0.1.0 → 0.1.1
raw patch · 2 files changed
+282/−1 lines, 2 files
Files
- libremidi.cabal +7/−1
- vendor/libremidi/libremidi-c.h +275/−0
libremidi.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: libremidi-version: 0.1.0+version: 0.1.1 synopsis: libremidi bindings for haskell description: Please see the README on GitHub at <https://github.com/ejconlon/libremidi-haskell#readme> homepage: https://github.com/ejconlon/libremidi-haskell#readme@@ -66,6 +66,8 @@ ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints -fno-warn-unused-top-binds include-dirs: vendor+ install-includes:+ vendor/libremidi/libremidi-c.h cxx-sources: vendor/libremidi/client.cpp vendor/libremidi/libremidi-c.cpp@@ -137,6 +139,8 @@ TypeOperators TypeFamilies ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints -fno-warn-unused-top-binds -threaded -rtsopts -with-rtsopts=-N+ install-includes:+ vendor/libremidi/libremidi-c.h build-depends: base >=4.12 && <5 , containers >=0.6.7 && <0.7@@ -187,6 +191,8 @@ TypeOperators TypeFamilies ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints -fno-warn-unused-top-binds -threaded -rtsopts -with-rtsopts=-N+ install-includes:+ vendor/libremidi/libremidi-c.h build-depends: base >=4.12 && <5 , containers >=0.6.7 && <0.7
+ vendor/libremidi/libremidi-c.h view
@@ -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