clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

commit 606dec8fc3d5dfee1265f7a48fb2d0f4535d91fb
parent 984916081977763f3ae643f7edc9668aeeab5ca1
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date:   Sun, 26 Dec 2021 17:37:41 +0100

Trying a different design

Diffstat:
Minclude/clap/events.h | 53+++++++++++++++++++++++++++++++----------------------
1 file changed, 31 insertions(+), 22 deletions(-)

diff --git a/include/clap/events.h b/include/clap/events.h @@ -12,6 +12,15 @@ extern "C" { #pragma pack(push, CLAP_ALIGN) +static const CLAP_CONSTEXPR uint16_t CLAP_EVENT_SPACE_CORE_ID = 0; + +// event header +typedef struct clap_event_header { + alignas(4) uint32_t time; + alignas(2) uint16_t space_id; + alignas(2) uint16_t event_id; +} clap_event_header_t; + // Some of the following events overlap, a note on can be expressed with: // - CLAP_EVENT_NOTE_ON // - CLAP_EVENT_MIDI @@ -81,10 +90,12 @@ typedef int32_t clap_event_flags; * - key and channel are used to match active notes, a value of -1 matches all. */ typedef struct clap_event_note { - int32_t port_index; - int32_t key; // 0..127 - int32_t channel; // 0..15 - double velocity; // 0..1 + alignas(4) clap_event_header_t header; + + alignas(4) int32_t port_index; + alignas(4) int32_t key; // 0..127 + alignas(4) int32_t channel; // 0..15 + alignas(8) double velocity; // 0..1 } clap_event_note_t; enum { @@ -109,6 +120,8 @@ enum { typedef int32_t clap_note_expression; typedef struct clap_event_note_expression { + clap_event_header_t header; + alignas(4) clap_note_expression expression_id; // target a specific port, key and channel, -1 for global @@ -132,6 +145,8 @@ enum { typedef int32_t clap_event_param_flags; typedef struct clap_event_param_value { + clap_event_header_t header; + // target parameter void *cookie; // @ref clap_param_info.cookie alignas(4) clap_id param_id; // @ref clap_param_info.id @@ -147,6 +162,8 @@ typedef struct clap_event_param_value { } clap_event_param_value_t; typedef struct clap_event_param_mod { + clap_event_header_t header; + // target parameter void *cookie; // @ref clap_param_info.cookie alignas(4) clap_id param_id; // @ref clap_param_info.id @@ -172,6 +189,8 @@ enum { typedef uint32_t clap_transport_flags; typedef struct clap_event_transport { + clap_event_header_t header; + alignas(4) clap_transport_flags flags; alignas(8) clap_beattime song_pos_beats; // position in beats @@ -194,6 +213,8 @@ typedef struct clap_event_transport { } clap_event_transport_t; typedef struct clap_event_note_mask { + clap_event_header_t header; + uint32_t port_index; // bitset of active keys: @@ -208,39 +229,27 @@ typedef struct clap_event_note_mask { } clap_event_note_mask_t; typedef struct clap_event_midi { + alignas(4) clap_event_header_t header; + alignas(4) uint32_t port_index; alignas(1) uint8_t data[3]; } clap_event_midi_t; typedef struct clap_event_midi_sysex { + alignas(4) clap_event_header_t header; + alignas(4) uint32_t port_index; const uint8_t *buffer; // midi buffer alignas(4) uint32_t size; } clap_event_midi_sysex_t; typedef struct clap_event_midi2 { + alignas(4) clap_event_header_t header; + alignas(4) uint32_t port_index; alignas(4) uint32_t data[4]; } clap_event_midi2_t; -typedef struct clap_event { - alignas(4) clap_event_type type; - alignas(4) uint32_t time; // offset from the first sample in the process block - alignas(4) clap_event_flags flags; // bitset of clap_event_flags - - union { - clap_event_note_t note; - clap_event_note_expression_t note_expression; - clap_event_param_value_t param_value; - clap_event_param_mod_t param_mod; - clap_event_transport_t time_info; - clap_event_note_mask_t note_mask; - clap_event_midi_t midi; - clap_event_midi_sysex_t midi_sysex; - clap_event_midi2_t midi2; - }; -} clap_event_t; - typedef struct clap_event_list { void *ctx; // reserved pointer for the list