Файли формату Standard MIDI

Файл MIDI являє собою послідовність блоків даних Ці блоки мають такий же основний формат, що і блоки, які використовуються в форматах AIFF, IFF і WAVE Кожна область містить четирехсімвольное поле типу, 4-байтний код довжини (у форматі MSB) і дані Однак на противагу іншим форматам блоки MIDI не вкладати один в одного

B даний час існує всього два типи блоків Перший MThd со-

тримає загальну заголовну інформацію, другий MTrk одну доріжку

Ідентифікація файлів MIDI

Блок MThd, що зустрічається на початку кожного файлу MIDI, є кращим ознакою, за яким можна ідентифікувати файл у форматі Standard MIDI

Лістінг221 Ідентифікація файлу у форматі MIDI

#define ChunkName(a,b,c,d) (                       \ ((static_cast&ltunsigned long&gt(a)&amp255)&lt&lt24)                 \

+ ((static_cast&ltunsigned long&gt(b)&amp255)&lt&lt16)             \

+ ((static_cast&ltunsigned long&gt(c)&amp255)&lt&lt8)              \

+ ((static_cast&ltunsigned long&gt(d)&amp255)))

bool IsMidiFile(istream &ampfile) {

fileseekg (0) / / Переходимо на початок файлу

unsigned long form = ReadIntMsb(file,4)

return (form == ChunkName(&quotM&quot,T,h,d))

}

Блок заголовка MIDI

Область MThd, як показано в табл 221, містить ряд основних характерис-

тик файлу MIDI Всі значення зберігаються у форматі MSB

Музична інформація у файлі MIDI організована у вигляді декількох доріжок Наприклад, файл MIDI може зберігати партії піаніно, труби і флейти у вигляді окремих доріжок Це хоча злегка і ускладнює відтворення, зате робить більш легким використання файлів MIDI для обміну музичними партитурами

Таблиця 221 Вміст області MIDI MThd

Байти Опис

2 Тип файлу

2 Кількість доріжок

2 Формат часу

Існує три типи файлів MIDI, що відрізняються організацією доріжок Файли нульового muna (Type zero) містять всього одну доріжку Очевидно, що їх легше всього програвати Саме таким файлам слід віддавати перевагу, якщо ви хочете бути впевнені, що ваші файли MIDI легко вдасться відтворити кому-небудь щеФайли першого muna(Type one) містять декілька доріжок, які програються одночасно Програми для програвання файлів першого типу повинні перед програванням якось перетворити, «вирівняти» дані в єдиний потік подій Нарешті, файли другого типу (Type two) містять декілька доріжок, але не припускають ніякого звязку між доріжками Файли другого типу використовуються відносно рідко

O форматі зберігання інформації про час ми поговоримо трохи пізніше,

коли будемо більш детально розглядати синхронізацію MIDI

Лістинг 222 Читання блоку заголовка MIDI

void MidiRead::ReadHeader(void) {

unsigned long chunkType = ReadIntMsb(_stream,4) unsigned long bytesRemaining = ReadIntMsb(_stream,4) if (chunkType = ChunkName(M,T,h,d)) {

/ / Перший блок повинен мати мітку MThd

cerr &lt&lt &quotFirst chunk must be *MThd chunk\n"

exit(1)

}

_fileType = ReadIntMsb(_stream,2)

_numberTracks = ReadIntMsb(_stream,2)

_timeFormat = ReadIntMsb(_stream,2)

bytesRemaining = 6

/ / Санітарна перевірка типу файлу та кількості

/ / Доріжок

switch(_fileType) {

case 0:

/ / Доріжок: 1 cerr << "Tracks: 1 \ n"; if (_numberTracks! = 1)

/ / Ho у файлі .. доріжок!?!

cerr &lt&lt &quotBut it has &quot &lt&lt _numberTracks &lt&lt &quot tracks!?!\n"

break

case 1:

/ / Доріжки .. відтворюються одночасно

cerr &lt&lt &quotTracks: &quot &lt&lt _numberTracks &lt&lt &quot simultaneous\n"

break

case 2:

/ / Доріжки .. Відтворюються незалежно

cerr &lt&lt &quotTracks: &quot &lt&lt _numberTracks &lt&lt &quot independent\n"

break

default:

/ / Тип файлу не розпізнаний

cerr &lt&lt &quotUnknown file type: &quot &lt&lt _fileType &lt&lt &quot\n"

}

/ / Дамп формату часу

if (_timeFormat <0) {/ / Код часу SMPTE.

/ / Формат часу .. (SMPTE)

cerr &lt&lt &quotTime Format: &quot&lt&lt _timeFormat &lt&lt &quot (SMPTE)\n"

} Else {/ / Код часу тривалості

/ / Формат часу: .. тиків / чвертей ноти

cerr &lt&lt &quotTime Format: &quot &lt&lt _timeFormat &lt&lt &quot ticks/quarter note\n"

} SkipBytes(_stream,bytesRemaining)

}

Джерело: Кінтцель Т Керівництво програміста по роботі зі звуком = A Programmers Guide to Sound: Пер з англ М: ДМК Пресс, 2000 432 с, іл (Серія «Для програмістів»)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*