3 #define MAX_UMIDI_PORT 4
4 #define DEFAULT_TEMPO 500000 /* Default tempo = 120 */
5 #define UMIDIDEV_RETRY_WRITE 3
8 typedef unsigned char Byte;
9 typedef unsigned int DWord;
10 typedef unsigned short Word;
12 typedef struct _smf_header {
13 char str_header[4]; /* "MThd"(0x4d, 0x54, 0x68,0x64) */
14 DWord dw_data_size; /* Real DataSize - 32bit BigEndian */
15 Word uw_format; /* SMF format 0 or 1 - BigEndian */
16 Word uw_tracks; /* Tracks */
17 Word uw_deltabase; /* DeltaTime BaseValue */
18 } __attribute__ ((packed)) SmfHeader;
21 typedef struct _smf_track_header {
22 char str_header[4]; /* "MTrk" (0x4d, 0x54, 0x72, 0x6b) */
23 DWord dw_trksize; /* Track Data Size */
24 } __attribute__ ((packed)) SmfTrackHeader;
53 MidiEventInfo *p_event;
58 /* ===================================================================*/
59 #define BIG2LITTLE16(n) (((((unsigned short)(n))&0x00ff)<<8)|\
60 ((((unsigned short)(n))&0xff00)>>8))
62 #define BIG2LITTLE32(n) (((((unsigned int)(n))&0x000000ff)<<24)|\
63 ((((unsigned int)(n))&0x0000ff00)<< 8)|\
64 ((((unsigned int)(n))&0x00ff0000)>> 8)|\
65 ((((unsigned int)(n))&0xff000000)>>24))
68 #define SMF_HEADER_STRING "MThd"
69 #define SMF_TRKHEADER_STRING "MTrk"
71 #define SMF_EVENT_NOTEOFF 0x80 /* 3Byte */
72 #define SMF_EVENT_NOTEON 0x90 /* 3Byte */
73 #define SMF_EVENT_KEYPRESSER 0xa0 /* 3Byte */
74 #define SMF_EVENT_CTRLCHANGE 0xb0 /* 3Byte */
75 #define SMF_EVENT_PROGCHANGE 0xc0 /* 2Byte */
76 #define SMF_EVENT_CHNPRESSER 0xd0 /* 2Byte */
77 #define SMF_EVENT_PITCHBEND 0xe0 /* 3Byte */
78 #define SMF_EVENT_SYSEX_META 0xf0 /* Variable Size */
80 #define SMF_EVENT_SYSEX_F0 0xf0
81 #define SMF_EVENT_SYSEX_F7 0xf7
82 #define SMF_EVENT_META 0xff
84 #define SMF_META_SEQUENCENO 0x00 /* 3Byte=0x02(len), 4,5Byte=Data */
85 #define SMF_META_TEXT 0x01 /* 3Byte=len, 4Byte- =Data */
86 #define SMF_META_COPYRIGHT 0x02 /* 3Byte=len, 4Byte- =Data */
87 #define SMF_META_TITLE 0x03 /* 3Byte=len, 4Byte- =Data */
88 #define SMF_META_INSTRUMENT 0x04 /* 3Byte=len, 4Byte- =Data */
89 #define SMF_META_LYLIC 0x05 /* 3Byte=len, 4Byte- =Data */
90 #define SMF_META_MARKER 0x06 /* 3Byte=len, 4Byte- =Data */
91 #define SMF_META_QUEPOINT 0x07 /* 3Byte=len, 4Byte- =Data */
92 #define SMF_META_PROGRAM 0x08 /* 3Byte=len, 4Byte- =Data */
93 #define SMF_META_DEVICE 0x09 /* 3Byte=len, 4Byte- =Data */
94 #define SMF_META_CHNPREFIX 0x20 /* 3Byte=0x01(len), 4Byte=Data */
95 #define SMF_META_PORT 0x21 /* 3Byte=0x01(len), 4Byte=Data(Port) */
96 #define SMF_META_TRACKEND 0x2f /* 3Byte=0x00(len) */
97 #define SMF_META_TEMPO 0x51 /* 3Byte=0x03(len), 4,5,6Byte=TempoData */
98 #define SMF_META_SMPTEOFFSET 0x54 /* 3Byte=0x05(len), 4Byte- = hr,mn,se,fr,ff */
99 #define SMF_META_TIMESIGNATURE 0x58 /* 3Byte=0x04(len), 4Byte- = nn,dd,cc,bb */
100 #define SMF_META_KEYSIGNATURE 0x59 /* 3Byte=0x02(len), 4Byte- = sf,mi */
101 #define SMF_META_SPECIAL 0x7f /* 3Byte=len, 4Byte- =Data */
103 #define SMF_IS_RUNNING_STATUS(n) (!((n)&0x80))
105 #define PLAYSTATUS_INITIALIZE 0x00
106 #define PLAYSTATUS_PREPARE 0x01
107 #define PLAYSTATUS_PLAYING 0x10
108 #define PLAYSTATUS_CLOSING 0x40
109 #define PLAYSTATUS_REQ_STOP 0x21
110 #define PLAYSTATUS_REQ_PAUSE 0x22
111 #define PLAYSTATUS_ERROR 0xff
113 #define IS_PLAYSTATUS_REQUEST(n) (0x20==((n)&0xf0))
116 #ifndef PLAYUMIDI_SRC_SMF
117 #define EXTERN_FUNC_SMF extern
119 #define EXTERN_FUNC_SMF
121 EXTERN_FUNC_SMF int DecodeValue( DWord *dw_delta, Byte *pb_now );
122 EXTERN_FUNC_SMF int ReadMidiFile( Byte *pb_fbuf );
125 #ifndef PLAYUMIDI_SRC_MIDIEVENT
126 #define EXTERN_FUNC_MIDIEVENT extern
128 #define EXTERN_FUNC_MIDIEVENT
130 EXTERN_FUNC_MIDIEVENT int
131 MidiEvent_GetMidiInfo( MidiInfo *p_midi );
132 EXTERN_FUNC_MIDIEVENT void
133 MidiEvent_SetMidiDivision( Word uw_division ) ;
134 EXTERN_FUNC_MIDIEVENT DWord
135 MidiEvent_GetMidiEvents( void );
136 EXTERN_FUNC_MIDIEVENT MidiEventInfo *
137 MidiEvent_GetMidiEventPointer( void );
138 EXTERN_FUNC_MIDIEVENT Byte *
139 MidiEvent_GetVarDataPointer( void );
140 EXTERN_FUNC_MIDIEVENT int
141 MidiEvent_AllocMidiVarData( DWord dw_size );
142 EXTERN_FUNC_MIDIEVENT int
143 MidiEvent_FreeMidiVarData( void );
144 EXTERN_FUNC_MIDIEVENT int
145 MidiEvent_AllocMidiEventInfo( DWord dw_events );
146 EXTERN_FUNC_MIDIEVENT int
147 MidiEvent_FreeMidiEvnetInfo( void );
149 #ifndef PLAYUMIDI_SRC_PLAY_EVENT
150 #define EXTERN_FUNC_PLAY_EVENT extern
152 #define EXTERN_FUNC_PLAY_EVENT
154 EXTERN_FUNC_PLAY_EVENT void Play_RequestStop( void );
155 EXTERN_FUNC_PLAY_EVENT void PlayEvent_Play( void *v_arg );
156 EXTERN_FUNC_PLAY_EVENT int PlayEvent_Initialize( void );
157 EXTERN_FUNC_PLAY_EVENT int PlayEvent_Term( void );
160 #ifndef PLAYUMIDI_SRC_VERIFY_EVENT
161 extern int Veryfy_Event( TrackInfo *p_track_start, Word uw_tracks );