00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackCoreMidiInputPort__
00021 #define __JackCoreMidiInputPort__
00022
00023 #include "JackCoreMidiPort.h"
00024 #include "JackMidiAsyncQueue.h"
00025 #include "JackMidiBufferWriteQueue.h"
00026
00027 namespace Jack {
00028
00029 class JackCoreMidiInputPort: public JackCoreMidiPort {
00030
00031 private:
00032
00033 jack_nframes_t
00034 GetFramesFromTimeStamp(MIDITimeStamp timestamp);
00035
00036 jack_midi_event_t *jack_event;
00037 jack_midi_data_t *sysex_buffer;
00038 size_t sysex_bytes_sent;
00039 jack_midi_data_t running_status_buf[3];
00040 JackMidiAsyncQueue *thread_queue;
00041 JackMidiBufferWriteQueue *write_queue;
00042
00043 protected:
00044
00045 void
00046 Initialize(const char *alias_name, const char *client_name,
00047 const char *driver_name, int index,
00048 MIDIEndpointRef endpoint);
00049
00050 public:
00051
00052 JackCoreMidiInputPort(double time_ratio, size_t max_bytes=4096,
00053 size_t max_messages=1024);
00054
00055 virtual
00056 ~JackCoreMidiInputPort();
00057
00058 void
00059 ProcessCoreMidi(const MIDIPacketList *packet_list);
00060
00061 void
00062 ProcessJack(JackMidiBuffer *port_buffer, jack_nframes_t frames);
00063
00064 bool
00065 Start();
00066
00067 bool
00068 Stop();
00069
00070 };
00071
00072 }
00073
00074 #endif