Страница 1 из 1

Midi структура файла

Добавлено: 09 фев 2006, 17:50
dykzei
помогите сгенерить массив байт как миди файл... обчитался структурой нет нигде вменяемых примеров где што пишется, в итоге не работает... может у кого-то есть нормальная дока?

Добавлено: 10 фев 2006, 12:48
BreakPointMAN
http://www.wotsit.org/ тебе в помощь.

Добавлено: 11 фев 2006, 01:26
dykzei
сорри что на перле показываю...
как правильно обозначать Delta time?
то что ниже - делает какую-то белеберду
:( ( по спецификации ведь должно быть 1 канал 1 нота?

Код: Выделить всё

#! 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, 0x00, # Delta time
		0xFF, 0x58, 0x04, 0x06, 0x04, 0x24, 0x08, 
		
		# Key Signature
		#0x00, 0x00, # Delta time
		0xFF, 0x59, 0x02, 0x00, 0x00, 
		
		# Set tempo
		#0x00, 0x00, # Delta time
		0xFF, 0x51, 0x03, 0x07 ,0xA1, 0x20,

		# Set Instrument: Piano [0]
		#0x00, 0x00, # Delta time
		0xC0, 0x20, 0x00, 
		
		# Play C5 note
		#0x00, 0x10,  # Delta time
		0x90, 0x3C, 0x7F, 
		
		
		# End of the track
		0x00, 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;

Добавлено: 12 фев 2006, 23:57
Real_Bastard
# MIDI track data
0x4D, 0x54, 0x72, 0x6B, # MTrk
0x00, 0x00, 0x00, 0x00, # length
у тебя ж длинна нулевая, потому и не пашет