OSDN Git Service

0252d6e9a4e1b0c12914624ec68725b620cb4d76
[playumidi/playumidi.git] / src / playumidi.h
1
2
3 #define MAX_UMIDI_PORT  4
4 #define DEFAULT_TEMPO   500000  /* Default tempo = 120 */
5 #define UMIDIDEV_RETRY_WRITE    3
6
7
8 typedef unsigned char   Byte;
9 typedef unsigned int    DWord;
10 typedef unsigned short  Word;
11
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;
19
20
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;
25
26
27 typedef struct  {
28         DWord           dw_tracksize;
29         Byte            *pb_data;
30
31         Byte            *pb_now;
32         Byte            b_run_status;
33         DWord           dw_delta_now;
34 } TrackInfo;
35
36
37 typedef struct  {
38         DWord           dw_delta;
39         DWord           dw_dataptr;
40         DWord           dw_length;
41         Byte            b_data[3];
42         Byte            b_run_status;
43 #ifdef  VERIFY_EVENT
44         Word            uw_track;
45 #endif
46 } MidiEventInfo;
47
48
49 typedef struct  {
50         Word                    uw_division;
51         DWord                   dw_max_events;
52
53         MidiEventInfo   *p_event;
54         Byte                    *pb_vardata;
55 } MidiInfo;
56
57
58 /* ===================================================================*/
59 #define BIG2LITTLE16(n)         (((((unsigned short)(n))&0x00ff)<<8)|\
60                                                                 ((((unsigned short)(n))&0xff00)>>8))
61
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))
66
67
68 #define SMF_HEADER_STRING               "MThd"
69 #define SMF_TRKHEADER_STRING    "MTrk"
70
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 */
79
80 #define SMF_EVENT_SYSEX_F0              0xf0
81 #define SMF_EVENT_SYSEX_F7              0xf7
82 #define SMF_EVENT_META                  0xff
83
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 */
102
103 #define SMF_IS_RUNNING_STATUS(n)        (!((n)&0x80))
104
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
112
113 #define IS_PLAYSTATUS_REQUEST(n)        (0x20==((n)&0xf0))
114
115
116 #ifndef PLAYUMIDI_SRC_SMF
117         #define EXTERN_FUNC_SMF         extern
118 #else
119         #define EXTERN_FUNC_SMF 
120 #endif
121 EXTERN_FUNC_SMF int DecodeValue( DWord *dw_delta, Byte *pb_now );
122 EXTERN_FUNC_SMF int ReadMidiFile( Byte *pb_fbuf );
123
124
125 #ifndef PLAYUMIDI_SRC_MIDIEVENT
126     #define EXTERN_FUNC_MIDIEVENT     extern
127 #else
128     #define EXTERN_FUNC_MIDIEVENT 
129 #endif
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 );
148
149 #ifndef PLAYUMIDI_SRC_PLAY_EVENT
150     #define EXTERN_FUNC_PLAY_EVENT     extern
151 #else
152     #define EXTERN_FUNC_PLAY_EVENT 
153 #endif
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 ); 
158
159 #ifdef  VERIFY_EVENT
160         #ifndef PLAYUMIDI_SRC_VERIFY_EVENT
161                 extern int Veryfy_Event( TrackInfo *p_track_start, Word uw_tracks );
162         #endif
163 #endif
164