他人の空似自作物置場

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)