#include <stdio.h>
#include <ctype.h>
#include "midifile.h"
static FILE *F;
int division; /* from the file header */
long tempo = 500000; /* the default tempo is 120 beats/minute */
filegetc()
{
return(getc(F));
}
main(int argc,char **argv)
{
char ch;
if(argc > 1)
{
if(F = fopen(argv[1],"r"))
{
initfuncs();
Mf_getc = filegetc;
midifile();
fclose(F);
}
else
printf("Error reading midi file!\n");
}
}
error(char *s)
{
fprintf(stderr,"Error: %s\n",s);
}
txt_header(format,ntrks,ldivision)
{
division = ldivision;
printf("Header format=%d ntrks=%d division=%d\n",format,ntrks,division);
}
txt_trackstart()
{
printf("Track start\n");
}
txt_trackend()
{
printf("Track end\n");
}
txt_noteon(chan,pitch,vol)
{
prtime();
printf("Note on, chan=%d pitch=%d vol=%d\n",chan+1,pitch,vol);
}
txt_noteoff(chan,pitch,vol)
{
prtime();
printf("Note off, chan=%d pitch=%d vol=%d\n",chan+1,pitch,vol);
}
txt_pressure(chan,pitch,press)
{
}
txt_parameter(chan,control,value)
{
}
txt_pitchbend(chan,msb,lsb)
{
}
txt_program(chan,program)
{
prtime();
printf("Program, chan=%d program=%d\n",chan+1,program);
}
txt_chanpressure(chan,press)
{
}
txt_sysex(leng,mess)
char *mess;
{
}
txt_metamisc(type,leng,mess)
char *mess;
{
}
txt_metaspecial(type,leng,mess)
char *mess;
{
}
txt_metatext(type,leng,mess)
char *mess;
{
}
txt_metaseq(num)
{
}
txt_metaeot()
{
prtime();
printf("Meta event, end of track\n");
}
txt_keysig(sf,mi)
{
}
txt_tempo(ltempo)
long ltempo;
{
tempo = ltempo;
prtime();
printf("Tempo, microseconds-per-MIDI-quarter-note=%ld\n",tempo);
}
txt_timesig(nn,dd,cc,bb)
{
int denom = 1;
while ( dd-- > 0 )
denom *= 2;
prtime();
printf("Time signature=%d/%d MIDI-clocks/click=%d 32nd-notes/24-MIDI-clocks=%d\n",
nn,denom,cc,bb);
}
txt_smpte(hr,mn,se,fr,ff)
{
}
txt_arbitrary(leng,mess)
char *mess;
{
}
prtime()
{
printf("Time=%f ",mf_ticks2sec(Mf_currtime,division,tempo));
}
initfuncs()
{
Mf_error = error;
Mf_header = txt_header;
Mf_trackstart = txt_trackstart;
Mf_trackend = txt_trackend;
Mf_noteon = txt_noteon;
Mf_noteoff = txt_noteoff;
Mf_pressure = txt_pressure;
Mf_parameter = txt_parameter;
Mf_pitchbend = txt_pitchbend;
Mf_program = txt_program;
Mf_chanpressure = txt_chanpressure;
Mf_sysex = txt_sysex;
Mf_metamisc = txt_metamisc;
Mf_seqnum = txt_metaseq;
Mf_eot = txt_metaeot;
Mf_timesig = txt_timesig;
Mf_smpte = txt_smpte;
Mf_tempo = txt_tempo;
Mf_keysig = txt_keysig;
Mf_seqspecific = txt_metaspecial;
Mf_text = txt_metatext;
Mf_arbitrary = txt_arbitrary;
}