00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackWinMMEInputPort__
00021 #define __JackWinMMEInputPort__
00022
00023 #include <mmsystem.h>
00024
00025 #include "JackMidiAsyncQueue.h"
00026 #include "JackMidiBufferWriteQueue.h"
00027 #include "JackWinMMEPort.h"
00028
00029 namespace Jack {
00030
00031 class JackWinMMEInputPort : public JackWinMMEPort {
00032
00033 private:
00034
00035 static void CALLBACK
00036 HandleMidiInputEvent(HMIDIIN handle, UINT message, DWORD port,
00037 DWORD param1, DWORD param2);
00038
00039 void
00040 EnqueueMessage(DWORD timestamp, size_t length, jack_midi_data_t *data);
00041
00042 void
00043 GetInErrorString(MMRESULT error, LPTSTR text);
00044
00045 void
00046 ProcessWinMME(UINT message, DWORD param1, DWORD param2);
00047
00048 void
00049 WriteInError(const char *jack_func, const char *mm_func,
00050 MMRESULT result);
00051
00052 HMIDIIN handle;
00053 jack_midi_event_t *jack_event;
00054 jack_time_t start_time;
00055 bool started;
00056 jack_midi_data_t *sysex_buffer;
00057 MIDIHDR sysex_header;
00058 JackMidiAsyncQueue *thread_queue;
00059 JackMidiBufferWriteQueue *write_queue;
00060
00061 public:
00062
00063 JackWinMMEInputPort(const char *alias_name, const char *client_name,
00064 const char *driver_name, UINT index,
00065 size_t max_bytes=4096, size_t max_messages=1024);
00066
00067 ~JackWinMMEInputPort();
00068
00069 void
00070 ProcessJack(JackMidiBuffer *port_buffer, jack_nframes_t frames);
00071
00072 bool
00073 Start();
00074
00075 bool
00076 Stop();
00077
00078 };
00079
00080 }
00081
00082 #endif