libmid.zip/libmid.h
#include <stdio.h>
typedef struct midi_data {
int time;
unsigned char stat;
unsigned char param1;
unsigned char param2;
unsigned char *param3;
struct midi_data *next;
}DATA;
typedef struct midi {
FILE *fp;
int time;
int type;
int tempo;
int delta;
DATA *data;
DATA *tail;
}MIDI;
void midi_head(FILE *fp);
void rev(void *a,int len);
MIDI *midi_open(char *fn);
int midi_close(MIDI* midi);
int write_delta(unsigned char *s,int time);
int midievent(MIDI *midi,char *data,int num);
int event_b3(MIDI *midi,unsigned char n,unsigned char a,unsigned char b,unsigned char c);
int event_b2(MIDI *midi,unsigned char n,unsigned char a,unsigned char b);
int set_tempo(MIDI *midi,int tempo);
int change_tempo(MIDI *midi,int tempo);
int change_delta(MIDI *midi,int delta);
void next(MIDI *midi,int time);
void MidiPlay(MIDI *midi,double start,int dev);
#define note_off(M,A,B,C) event_b3(M,0x80,A,B,C)
#define note_on(M,A,B,C) event_b3(M,0x90,A,B,C)
#define key_press(M,A,B,C) event_b3(M,0xA0,A,B,C)
#define ctl_change(M,A,B,C) event_b3(M,0xB0,A,B,C)
#define prg_change(M,A,B) event_b2(M,0xC0,A,B)
#define cha_press(M,A,B) event_b2(M,0xD0,A,B)
#define pitch_bend(M,A,B) event_b3(M,0xE0,A,B&0x7F,(B>>7)&0x7F)