in reply to MIDI time elapsed stat

I would think that dumping the midi into a wav file, then getting the time length of the wav would be the easiest. Of of course it is a "clunky approach", but easy. It would be sweeter to loop thru the midis, and summing the note durations, but there is the problem of overlapping notes. So maybe it can't be done that way? Anyways, you could use timidity to create a temp.wav with
system("timidity -Ow -o temp.wav $input.mid")
Then you can get the length of the wav with:
#!/usr/bin/perl -w use strict; use Fcntl; my $fnm = shift; sysopen WAV,$fnm,O_RDONLY; my $riff; sysread WAV,$riff,12; my $fmt; sysread WAV,$fmt,24; my $data; sysread WAV,$data,8; close WAV; # RIFF header: 'RIFF', long length, type='WAVE' my ($r1,$r2,$r3) = unpack "A4VA4", $riff; # WAV header, 'fmt ', long length, short unused, short channels, # long samples/second, long bytes per second, short bytes per sample, # short bits per sample my ($f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8) = unpack "A4VvvVVvv",$fmt; # DATA header, 'DATA', long length my ($d1,$d2) = unpack "A4V", $data; my $playlength = $d2/$f6; print << "EOF"; RIFF header: $r1, length $r2, type $r3 Format: $f1, length $f2, always $f3, channels $f4, sample rate $f5, bytes per second $f6, bytes per sample $f7, bits per sample $f8 Data: $d1, length $d2 Playlength: $playlength seconds EOF
The drawback to using this method, is that timidity takes the exact playlength of the midi to do the conversion, which could take a long time to process thousands of midis. But you would only have to do it once, and save the lengths in a file of your choice, then you could select midis from the list to give you an exact program of length "$x seconds". Maybe there are better midi-2-wav dumpers out there, that do it faster?

I know on the midi newsgroups, they always refer to the win32 gnmidi set of utilities to do this type of thing. gnmidi does run under Wine, so it may be worth investigating. gnmidi

Another thought is to determine the BPM(beats per minute) of the midi, then count the number of beats, and the duration of a beat?


I'm not really a human, but I play one on earth. flash japh