Здравствуйте, Роман Дубров, Вы писали:
РД>Я думаю это поможет:
РД>http://jedi.ks.uiuc.edu/~johns/links/music/midifile.html
да, удивитесь, именно это и использовал для изучения.
кое с чем разобрался, вот что сейчас не могу понять
всё вроде правильно, но не работает.
track length я устанавливаю в конце после инициилизации массива
#! perl -w
my @d = (
0x4D, 0x54, 0x68, 0x64, # MThd
0x00, 0x00, 0x00, 0x06, # length
0x00, 0x00, # Format 0
0x00, 0x01, # the number of track chunks in the file
0x00, 0x60, # time Division
# MIDI track data
0x4D, 0x54, 0x72, 0x6B, # MTrk
0x00, 0x00, 0x00, 0x00, # length
#-----------------------------------------------------------------
# Time Signature
0x00, # Delta time
0xFF, 0x58, 0x04, 0x06, 0x04, 0x24, 0x08,
# Key Signature
0x00, # Delta time
0xFF, 0x59, 0x02, 0x00, 0x00,
# Set tempo
0x00, # Delta time
0xFF, 0x51, 0x03, 0x07 ,0xA1, 0x20,
# Set Instrument: Piano [0]
0x00, # Delta time
0xC0, 0x20, 0x00,
# Play C5 note
0x00, # Delta time
0x90, 0x3C, 0x7F,
# End of the track
0x10,# Delta time
0xFF, 0x2F, 0x00
);
$d[21] = scalar(@d) — 14 — 8 + 1;
print "track length = $d[21]";
open(FL, "> x.mid");
binmode FL;
for(@d){
printf FL "%c",$_;
}
close FL;