OSDN Git Service

* »Ã\83Ã\84êŪ¡¢¤À¤Â¬Â¡Â¢meta¥¤¥٥ó¥ȤÃ\8eʸ»úÃ\8eó½Ã\90Ã\8eϤÃ\8bÃ\82бþ
[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         Byte            b_data[3];
41         Byte            b_run_status;
42 #ifdef  VERIFY_EVENT
43         Word            uw_track;
44 #endif
45 } MidiEventInfo;
46
47
48 typedef struct  {
49         Word                    uw_division;
50         DWord                   dw_max_events;
51
52         MidiEventInfo   *p_event;
53         Byte                    *pb_vardata;
54 } MidiInfo;
55
56
57 /* ===================================================================*/
58 #define BIG2LITTLE16(n)         (((((unsigned short)(n))&0x00ff)<<8)|\
59                                                                 ((((unsigned short)(n))&0xff00)>>8))
60
61 #define BIG2LITTLE32(n)         (((((unsigned int)(n))&0x000000ff)<<24)|\
62                                                                 ((((unsigned int)(n))&0x0000ff00)<< 8)|\
63                                                                 ((((unsigned int)(n))&0x00ff0000)>> 8)|\
64                                                                 ((((unsigned int)(n))&0xff000000)>>24))
65
66
67 #define SMF_HEADER_STRING               "MThd"
68 #define SMF_TRKHEADER_STRING    "MTrk"
69
70 #define SMF_EVENT_NOTEOFF               0x80            /* 3Byte */
71 #define SMF_EVENT_NOTEON                0x90            /* 3Byte */
72 #define SMF_EVENT_KEYPRESSER    0xa0            /* 3Byte */
73 #define SMF_EVENT_CTRLCHANGE    0xb0            /* 3Byte */
74 #define SMF_EVENT_PROGCHANGE    0xc0            /* 2Byte */
75 #define SMF_EVENT_CHNPRESSER    0xd0            /* 2Byte */
76 #define SMF_EVENT_PITCHBEND             0xe0            /* 3Byte */
77 #define SMF_EVENT_SYSEX_META    0xf0            /* Variable Size */
78
79 #define SMF_EVENT_SYSEX_F0              0xf0
80 #define SMF_EVENT_SYSEX_F7              0xf7
81 #define SMF_EVENT_META                  0xff
82
83 #define SMF_META_SEQUENCENO             0x00            /* 3Byte=0x02(len), 4,5Byte=Data */
84 #define SMF_META_TEXT                   0x01            /* 3Byte=len, 4Byte- =Data */
85 #define SMF_META_COPYRIGHT              0x02            /* 3Byte=len, 4Byte- =Data */
86 #define SMF_META_TITLE                  0x03            /* 3Byte=len, 4Byte- =Data */
87 #define SMF_META_INSTRUMENT             0x04            /* 3Byte=len, 4Byte- =Data */
88 #define SMF_META_LYLIC                  0x05            /* 3Byte=len, 4Byte- =Data */
89 #define SMF_META_MARKER                 0x06            /* 3Byte=len, 4Byte- =Data */
90 #define SMF_META_QUEPOINT               0x07            /* 3Byte=len, 4Byte- =Data */
91 #define SMF_META_PROGRAM                0x08            /* 3Byte=len, 4Byte- =Data */
92 #define SMF_META_DEVICE                 0x09            /* 3Byte=len, 4Byte- =Data */
93 #define SMF_META_CHNPREFIX              0x20            /* 3Byte=0x01(len), 4Byte=Data */
94 #define SMF_META_PORT                   0x21            /* 3Byte=0x01(len), 4Byte=Data(Port) */
95 #define SMF_META_TRACKEND               0x2f            /* 3Byte=0x00(len) */
96 #define SMF_META_TEMPO                  0x51            /* 3Byte=0x03(len), 4,5,6Byte=TempoData */
97 #define SMF_META_SMPTEOFFSET    0x54            /* 3Byte=0x05(len), 4Byte- = hr,mn,se,fr,ff */
98 #define SMF_META_TIMESIGNATURE  0x58            /* 3Byte=0x04(len), 4Byte- = nn,dd,cc,bb */
99 #define SMF_META_KEYSIGNATURE   0x59            /* 3Byte=0x02(len), 4Byte- = sf,mi */
100 #define SMF_META_SPECIAL                0x7f            /* 3Byte=len, 4Byte- =Data */
101
102 #define SMF_IS_RUNNING_STATUS(n)        (!((n)&0x80))
103
104 #define PLAYSTATUS_INITIALIZE   0x00
105 #define PLAYSTATUS_PREPARE              0x01
106 #define PLAYSTATUS_PLAYING              0x10
107 #define PLAYSTATUS_CLOSING              0x40
108 #define PLAYSTATUS_REQ_STOP             0x21
109 #define PLAYSTATUS_REQ_PAUSE    0x22
110 #define PLAYSTATUS_ERROR                0xff
111
112 #define IS_PLAYSTATUS_REQUEST(n)        (0x20==((n)&0xf0))
113
114
115 #ifndef PLAYUMIDI_SRC_SMF
116         #define EXTERN_FUNC_SMF         extern
117 #else
118         #define EXTERN_FUNC_SMF 
119 #endif
120 EXTERN_FUNC_SMF int ReadDeltaTime( DWord *dw_delta, Byte *pb_now );
121 EXTERN_FUNC_SMF int ReadMidiFile( Byte *pb_fbuf );
122
123
124 #ifndef PLAYUMIDI_SRC_MIDIEVENT
125     #define EXTERN_FUNC_MIDIEVENT     extern
126 #else
127     #define EXTERN_FUNC_MIDIEVENT 
128 #endif
129 EXTERN_FUNC_MIDIEVENT int
130         MidiEvent_GetMidiInfo( MidiInfo *p_midi );
131 EXTERN_FUNC_MIDIEVENT   void 
132         MidiEvent_SetMidiDivision( Word uw_division ) ;
133 EXTERN_FUNC_MIDIEVENT   DWord
134         MidiEvent_GetMidiEvents( void );
135 EXTERN_FUNC_MIDIEVENT   MidiEventInfo *
136     MidiEvent_GetMidiEventPointer( void );
137 EXTERN_FUNC_MIDIEVENT   Byte *
138     MidiEvent_GetVarDataPointer( void );
139 EXTERN_FUNC_MIDIEVENT   int
140     MidiEvent_AllocMidiVarData( DWord dw_size );
141 EXTERN_FUNC_MIDIEVENT int
142     MidiEvent_FreeMidiVarData( void );
143 EXTERN_FUNC_MIDIEVENT int
144     MidiEvent_AllocMidiEventInfo( DWord dw_events );
145 EXTERN_FUNC_MIDIEVENT int
146     MidiEvent_FreeMidiEvnetInfo( void );
147
148 #ifndef PLAYUMIDI_SRC_PLAY_EVENT
149     #define EXTERN_FUNC_PLAY_EVENT     extern
150 #else
151     #define EXTERN_FUNC_PLAY_EVENT 
152 #endif
153 EXTERN_FUNC_PLAY_EVENT void Play_RequestStop( void ); 
154 EXTERN_FUNC_PLAY_EVENT void PlayEvent_Play( void *v_arg );
155 EXTERN_FUNC_PLAY_EVENT int PlayEvent_Initialize( void );
156 EXTERN_FUNC_PLAY_EVENT int PlayEvent_Term( void ); 
157
158 #ifdef  VERIFY_EVENT
159         #ifndef PLAYUMIDI_SRC_VERIFY_EVENT
160                 extern int Veryfy_Event( TrackInfo *p_track_start, Word uw_tracks );
161         #endif
162 #endif
163