5 unsigned int calc_reload(int note);
7 int main(int argc, char **argv)
11 struct midi_event *ev;
15 fprintf(stderr, "pass the path to a midi file\n");
19 if((chan = atoi(argv[2])) < 0 || chan > 127) {
20 fprintf(stderr, "invalid channel: %d\n", chan);
25 if(!(midi = midi_load(argv[1]))) {
26 fprintf(stderr, "failed to load midi file: %s\n", argv[1]);
31 printf("midi file: %s\n", argv[1]);
33 printf(" pulses per quarter-note: %d\n", midi->ppqn);
36 printf(" fps: %d (ticks per frame: %d)\n", midi->fps, midi->ticks_per_frame);
38 printf(" tracks: %d\n", midi->num_tracks);
39 for(i=0; i<midi->num_tracks; i++) {
40 if(midi->tracks[i].name) {
41 printf(" %d - \"%s\":", i, midi->tracks[i].name);
45 printf(" %d events\n", midi->tracks[i].num_ev);
51 if(chan >= midi->num_tracks) {
52 fprintf(stderr, "invalid track: %d (file has %d tracks)\n", chan, midi->num_tracks);
58 ev = midi->tracks[chan].head;
63 /*printf("%ld: %d (%d)\n", ticks, MIDI_NOTE_NUM(ev), MIDI_NOTE_VEL(ev));*/
65 printf("\tdw %ld, %u\n", ticks, calc_reload(MIDI_NOTE_NUM(ev)));
70 /*printf("%ld: off\n", ticks);*/
72 printf("\tdw %ld, 0\n", ticks);
87 static float note_freq[] = {
88 27.500, 29.135, 30.868, 32.703, 34.648, 36.708, 38.891, 41.203, 43.654, 46.249,
89 48.999, 51.913, 55.000, 58.270, 61.735, 65.406, 69.296, 73.416, 77.782, 82.407,
90 87.307, 92.499, 97.999, 103.83, 110.00, 116.54, 123.47, 130.81, 138.59, 146.83,
91 155.56, 164.81, 174.61, 185.00, 196.00, 207.65, 220.00, 233.08, 246.94, 261.63,
92 277.18, 293.67, 311.13, 329.63, 349.23, 369.99, 392.00, 415.30, 440.00, 466.16,
93 493.88, 523.25, 554.37, 587.33, 622.25, 659.26, 698.46, 739.99, 783.99, 830.61,
94 880.00, 932.33, 987.77, 1046.5, 1108.7, 1174.7, 1244.5, 1318.5, 1396.9, 1480.0,
95 1568.0, 1661.2, 1760.0, 1864.7, 1975.5, 2093.0, 2217.5, 2349.3, 2489.0, 2637.0,
96 2793.0, 2960.0, 3136.0, 3322.4, 3520.0, 3729.3, 3951.1, 4186.0
101 unsigned int calc_reload(int note)
103 if(note < 21 || note > 108) return 0;
105 return (int)(OSC / note_freq[note - 21] + 0.5f);