00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackMidiPort__
00022 #define __JackMidiPort__
00023
00024 #include "types.h"
00025 #include "JackConstants.h"
00026 #include "JackPlatformPlug.h"
00027 #include <stddef.h>
00028
00030 typedef unsigned char jack_midi_data_t;
00031
00033 struct jack_midi_event_t
00034 {
00035 jack_nframes_t time;
00036 size_t size;
00037 jack_midi_data_t *buffer;
00038 };
00039
00041 #define JACK_DEFAULT_MIDI_TYPE "8 bit raw midi"
00042
00043 namespace Jack
00044 {
00045
00046 struct SERVER_EXPORT JackMidiEvent
00047 {
00048
00049 enum { INLINE_SIZE_MAX = sizeof(jack_shmsize_t) };
00050
00051 uint32_t time;
00052 jack_shmsize_t size;
00053 union {
00054 jack_shmsize_t offset;
00055 jack_midi_data_t data[INLINE_SIZE_MAX];
00056 };
00057
00058 jack_midi_data_t* GetData(void* buffer)
00059 {
00060 if (size <= INLINE_SIZE_MAX)
00061 return data;
00062 else
00063 return (jack_midi_data_t*)buffer + offset;
00064 }
00065 };
00066
00067
00068
00069
00070
00071
00072
00073
00074 struct JackMidiBuffer
00075 {
00076 enum { MAGIC = 0x900df00d };
00077
00078 uint32_t magic;
00079 jack_shmsize_t buffer_size;
00080 jack_nframes_t nframes;
00081 jack_shmsize_t write_pos;
00082 uint32_t event_count;
00083 uint32_t lost_events;
00084 uint32_t mix_index;
00085
00086 JackMidiEvent events[1];
00087
00088 int IsValid() const
00089 {
00090 return magic == MAGIC;
00091 }
00092 void Reset(jack_nframes_t nframes);
00093 jack_shmsize_t MaxEventSize() const;
00094
00095
00096 jack_midi_data_t* ReserveEvent(jack_nframes_t time, jack_shmsize_t size);
00097 };
00098
00099 }
00100
00101 #endif