6 typedef unsigned char Byte;
7 typedef unsigned int DWord;
8 typedef unsigned short Word;
10 typedef struct _smf_header {
11 char str_header[4]; /* "MThd"(0x4d, 0x54, 0x68,0x64) */
12 DWord dw_data_size; /* Real DataSize - 32bit BigEndian */
13 Word uw_format; /* SMF format 0 or 1 - BigEndian */
14 Word uw_tracks; /* Tracks */
15 Word uw_deltabase; /* DeltaTime BaseValue */
16 } __attribute__ ((packed)) SmfHeader;
19 typedef struct _smf_track_header {
20 char str_header[4]; /* "MTrk" (0x4d, 0x54, 0x72, 0x6b) */
21 DWord dw_trksize; /* Track Data Size */
22 } __attribute__ ((packed)) SmfTrackHeader;
45 /* ===================================================================*/
46 #define BIG2LITTLE16(n) (((((unsigned short)(n))&0x00ff)<<8)|\
47 ((((unsigned short)(n))&0xff00)>>8))
49 #define BIG2LITTLE32(n) (((((unsigned int)(n))&0x000000ff)<<24)|\
50 ((((unsigned int)(n))&0x0000ff00)<< 8)|\
51 ((((unsigned int)(n))&0x00ff0000)>> 8)|\
52 ((((unsigned int)(n))&0xff000000)>>24))
55 #define SMF_HEADER_STRING "MThd"
56 #define SMF_TRKHEADER_STRING "MTrk"
58 #define SMF_EVENT_NOTEOFF 0x80 /* 3Byte */
59 #define SMF_EVENT_NOTEON 0x90 /* 3Byte */
60 #define SMF_EVENT_KEYPRESSER 0xa0 /* 3Byte */
61 #define SMF_EVENT_CTRLCHANGE 0xb0 /* 3Byte */
62 #define SMF_EVENT_PROGCHANGE 0xc0 /* 2Byte */
63 #define SMF_EVENT_CHNPRESSER 0xd0 /* 2Byte */
64 #define SMF_EVENT_PITCHBEND 0xe0 /* 3Byte */
65 #define SMF_EVENT_SYSEX_META 0xf0 /* Variable Size */
67 #define SMF_EVENT_SYSEX_F0 0xf0
68 #define SMF_EVENT_SYSEX_F7 0xf7
69 #define SMF_EVENT_META 0xff
71 #define SMF_META_SEQUENCENO 0x00 /* 3Byte=0x02(len), 4,5Byte=Data */
72 #define SMF_META_TEXT 0x01 /* 3Byte=len, 4Byte- =Data */
73 #define SMF_META_COPYRIGHT 0x02 /* 3Byte=len, 4Byte- =Data */
74 #define SMF_META_TITLE 0x03 /* 3Byte=len, 4Byte- =Data */
75 #define SMF_META_INSTRUMENT 0x04 /* 3Byte=len, 4Byte- =Data */
76 #define SMF_META_LYLIC 0x05 /* 3Byte=len, 4Byte- =Data */
77 #define SMF_META_MARKER 0x06 /* 3Byte=len, 4Byte- =Data */
78 #define SMF_META_QUEPOINT 0x07 /* 3Byte=len, 4Byte- =Data */
79 #define SMF_META_PROGRAM 0x08 /* 3Byte=len, 4Byte- =Data */
80 #define SMF_META_DEVICE 0x09 /* 3Byte=len, 4Byte- =Data */
81 #define SMF_META_CHNPREFIX 0x20 /* 3Byte=0x01(len), 4Byte=Data */
82 #define SMF_META_PORT 0x21 /* 3Byte=0x01(len), 4Byte=Data(Port) */
83 #define SMF_META_TRACKEND 0x2f /* 3Byte=0x00(len) */
84 #define SMF_META_TEMPO 0x51 /* 3Byte=0x03(len), 4,5,6Byte=TempoData */
85 #define SMF_META_SMPTEOFFSET 0x54 /* 3Byte=0x05(len), 4Byte- = hr,mn,se,fr,ff */
86 #define SMF_META_TIMESIGNATURE 0x58 /* 3Byte=0x04(len), 4Byte- = nn,dd,cc,bb */
87 #define SMF_META_KEYSIGNATURE 0x59 /* 3Byte=0x02(len), 4Byte- = sf,mi */
88 #define SMF_META_SPECIAL 0x7f /* 3Byte=len, 4Byte- =Data */
90 #define SMF_IS_RUNNING_STATUS(n) (!((n)&0x80))
93 #ifndef PLAYUMIDI_SRC_SMF
94 #define EXTERN_FUNC_SMF extern
96 #define EXTERN_FUNC_SMF
98 EXTERN_FUNC_SMF int ReadDeltaTime( DWord *dw_delta, Byte *pb_now );
99 EXTERN_FUNC_SMF int ReadMidiFile( Byte *pb_fbuf );
102 #ifndef PLAYUMIDI_SRC_MIDIEVENT
103 #define EXTERN_FUNC_MIDIEVENT extern
105 #define EXTERN_FUNC_MIDIEVENT
107 EXTERN_FUNC_MIDIEVENT void
108 MidiEvent_SetMidiDivision( Word uw_division ) ;
109 EXTERN_FUNC_MIDIEVENT Word
110 MidiEvent_GetMidiDivision( void );
111 EXTERN_FUNC_MIDIEVENT DWord
112 MidiEvent_GetMidiEvents( void );
113 EXTERN_FUNC_MIDIEVENT MidiEventInfo *
114 MidiEvent_GetMidiEventPointer( void );
115 EXTERN_FUNC_MIDIEVENT Byte *
116 MidiEvent_GetVarDataPointer( void );
117 EXTERN_FUNC_MIDIEVENT int
118 MidiEvent_AllocMidiVarData( DWord dw_size );
119 EXTERN_FUNC_MIDIEVENT int
120 MidiEvent_FreeMidiVarData( void );
121 EXTERN_FUNC_MIDIEVENT int
122 MidiEvent_AllocMidiEventInfo( DWord dw_events );
123 EXTERN_FUNC_MIDIEVENT int
124 MidiEvent_FreeMidiEvnetInfo( void );
127 #ifndef PLAYUMIDI_SRC_VERIFY_EVENT
128 extern int Veryfy_Event( TrackInfo *p_track_start, Word uw_tracks );