Midi, содержимое файла
От: 0x45455844  
Дата: 09.02.06 19:22
Оценка:
Привет! Для простоты примера я хочу сгенерировать миди файл с одной нотой,
делаю это на перле.
все данные я выдрал из миди файла созданного в редакторе, и не могу понять
что делает последняя последовательность байт, обьясните плиз... она как-то отвечает
за длительность, но логику я не могу понять.

#! perl -w

my @d = (
# MIDI header
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, 0x17, # length
0x00, 0xFF, 0x58, 0x04, 0x04, 0x02, 0x18, 0x08, # Time Signature
0x00, 0xFF, 0x59, 0x02, 0x00, 0x00, # Key Signature
0x00, 0xFF, 0x51, 0x03, 0x09 ,0x27, 0xC0, # Set tempo

0x00, 0xC0, 0x00, # set Piano, instr no.0

0x00, 0x90, 0x3C, 0x7F, # play C5 note

# а вот за что отвечает эта строка байт?
0x78, 0x3C, 0x00, 0x00, 0xFF, 0x2F, 0x00

);

open(FL, "> x.mid");
binmode FL;
for(@d){
printf FL "%c",$_;
}
close FL;
Re: Midi, содержимое файла
От: emusic Франция https://software.muzychenko.net/ru
Дата: 10.02.06 15:49
Оценка:
Здравствуйте, 0x45455844, Вы писали:

0>Для простоты примера я хочу сгенерировать миди файл с одной нотой


Если надо однократно либо изредка сделать простой MIDI-файл — проще взять любой MIDI-редактор. Если надо это делать регулярно — стоит почитать про форматы, в инете описаний полно. Ключевые слова — Standard MIDI File (SMF) и Meta-event.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Midi, содержимое файла
От: 0x45455844  
Дата: 10.02.06 22:20
Оценка:
Здравствуйте, emusic, Вы писали:

E>Здравствуйте, 0x45455844, Вы писали:


0>>Для простоты примера я хочу сгенерировать миди файл с одной нотой


E>Если надо однократно либо изредка сделать простой MIDI-файл — проще взять любой MIDI-редактор. Если надо это делать регулярно — стоит почитать про форматы, в инете описаний полно. Ключевые слова — Standard MIDI File (SMF) и Meta-event.



Какой полезный ответ, что бы я без вас делал?! Тьфу!
Re[3]: Midi, содержимое файла
От: emusic Франция https://software.muzychenko.net/ru
Дата: 11.02.06 02:48
Оценка: -1
Здравствуйте, 0x45455844, Вы писали:

0>Какой полезный ответ, что бы я без вас делал?! Тьфу!


Ну, если лень читать нормальные и подробные описания — продолжайте догадываться самостоятельно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Midi, содержимое файла
От: Роман Дубров Украина Я@Blogspot
Дата: 14.02.06 14:09
Оценка:
0x45455844 wrote:
> что делает последняя последовательность байт, обьясните плиз... она
> как-то отвечает
> за длительность, но логику я не могу понять.

Я думаю это поможет:
http://jedi.ks.uiuc.edu/~johns/links/music/midifile.html

--
np: [foobar2000] not started
Posted via RSDN NNTP Server 2.0
http://www.linkedin.com/in/romandubrov .::. http://roman-dubrov.blogspot.com/ .::. http://www.flickr.com/photos/romandubrov/
Re[2]: Midi, содержимое файла
От: 0x45455844  
Дата: 14.02.06 17:14
Оценка:
Здравствуйте, Роман Дубров, Вы писали:

РД>Я думаю это поможет:

РД>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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.