Do not include zero-length delays in output

This would cause lockup in ATtiny-playtune and output can be significantly
shorter without zero-length delays.

See http://www.mariopiano.com/Mario-Sheet-Music-Overworld-Main-Theme.mid
pull/11/head
László ÁSHIN 6 years ago
parent 5e7791bc68
commit 18656188be
No known key found for this signature in database
GPG Key ID: 35BA1675CD4AAD15
  1. 26
      miditones.c

@ -1225,18 +1225,20 @@ This is not unlike multiway merging used for tape sorting algoritms in the 50's!
unsigned long long temp;
temp = ((unsigned long long) delta_time * tempo) / ticks_per_beat;
delta_msec = temp / 1000; // get around LCC compiler bug
if (loggen)
fprintf (logfile, "->Delay %ld msec (%ld ticks)\n", delta_msec, delta_time);
if (delta_msec > 0x7fff)
midi_error ("INTERNAL: time delta too big", trk->trkptr);
/* output a 15-bit delay in big-endian format */
if (binaryoutput) {
putc ((unsigned char) (delta_msec >> 8), outfile);
putc ((unsigned char) (delta_msec & 0xff), outfile);
outfile_bytecount += 2;
} else {
fprintf (outfile, "%ld,%ld, ", delta_msec >> 8, delta_msec & 0xff);
outfile_items (2);
if (delta_msec) {
if (loggen)
fprintf (logfile, "->Delay %ld msec (%ld ticks)\n", delta_msec, delta_time);
if (delta_msec > 0x7fff)
midi_error ("INTERNAL: time delta too big", trk->trkptr);
/* output a 15-bit delay in big-endian format */
if (binaryoutput) {
putc ((unsigned char) (delta_msec >> 8), outfile);
putc ((unsigned char) (delta_msec & 0xff), outfile);
outfile_bytecount += 2;
} else {
fprintf (outfile, "%ld,%ld, ", delta_msec >> 8, delta_msec & 0xff);
outfile_items (2);
}
}
}
timenow = earliest_time;

Loading…
Cancel
Save