| PC Help |
| уроци | | | софтуер | | | хардуер | | | речник | |
| | | връзки | ||||||||
| Използват се съединители-петици (DIN), а кабелът е екранирана усукана двойка. Ширмовката се свързва към краче 2 и от двата му края. Това краче остава свободно на входа MIDI IN (виж Фиг. A) и по този начин се получава Фарадеев кафез (екранът е свързан само в единия край - на изхода). Изходът MIDI THRU е незадължителен и се използва за свързване на един изход към повече входове на принципа "маргаритка" (daisy-chain), защото при токовия кръг един физически изход може да се свърже само към един-единствен физически вход. Каналните съобщения съставят по-голямата част от MIDI протокола, тъй като те отговарят за неща като ноти и програмни промени. Форматът на каналното MIDI съобщение е: [състояние] означава типа на каналното съобщение и номер на MIDI канала, на който принадлежи състоянието. Най-старшият бит (бит 7) на байта на състоянието е винаги установен в 1. (Или обратното - байт с установен най-старши бит е байт на състоянието). Броят на данновите байтове зависи от състоянието (в синтакса [] означава незадължителен). Байтът на състоянието на каналното съобщение е във формата 0xSC. Тетрадата S е типът на съобщението, а C е MIDI каналът, на който състоянието принадлежи. Тъй като по дефиниция най-старшият бит на тетрадата S е 1, това позволява 8 възможни типа съобщения (8, 9, 0xA, ..., 0xF). Но 0xF е запазено за системните съобщения, така че остават 7 възможни типа. От своя страна тетрадата С е 4 бита, затова тя може да дефинира канали от 0x00 до 0x0F, или по-просто казано, канали от 1 до 16. Например ето един обикновен байт на състоянието: 0x90. Това е "нота включена" за канал 1. Що се отнася до каналното съобщение, има едно важно понятие: текущо състояние. Когато имаме текущо състояние, се предават само данновите байтове на съобщението. Например, ако е изпратено съобщение с точно определено състояние "нота включена" за канал 1 (0x90), тогава "нота включена" за канал 1 става текущо състояние. По този начин следващата "нота включена" може да бъде предадена чрез предаване само на данновите байтове, свързани със съобщението "нота включена". Когато пристигне байтът за състояние на каналното съобщение, текущото състояние се променя в ново състояние. Има три типа системни съобщения: обикновени, в реално време и специални. Форматът на всяко едно от тези съобщения е различен и ние ще ги обсъдим малко по-късно. В MIDI има доста специални случаи, но има един, който трябва да изясним, защото той е в постоянна употреба. Съобщение "нота включена" (0x90) със скорост 0 винаги се интерпретира като нота изключена (0x80). Това е залегнало в MIDI спецификацията, за да могат нотите с веднъж установено текущо състояние да се изключат без промяна на текущото състояние на "нота изключена". Без този специален случай, където "нота включена" е всъщност "нота изключена", понятието за текущо състояние щеше да бъде без голяма стойност. Това е така, защото всъщност самото предназначение на текущото състояние е да съкрати информационния поток в MIDI. Нека да погледнем един пример за информационния поток в MIDI, за да се уверим, че разбираме текущото състояние и двете различни употреби на "нота включена". 0x90 0x41 0x40 0x41 0x00 0x91 0x42 0x40 0x81 0x42 0x40 Има 5 общи системни съобщения. Те винаги отменят текущото състояние. Има 6 системни съобщения за реално време. Обърнете внимание, че съобщениятя в реално време се състоят от един-единствен байт на състоянието. Също така, съобщенията в реално време не отменят текущото състояние и те могат да се появат навсякъде, дори по средата на друго съобщение! И накрая, има системни специални съобщения. Както общите съобщения, специалните съобщения винаги отмянят текущото състояние. Системното специално съобщение започва с 0XF0 и завършва с 0XF7 или някакъв друг байт на състояние за нереално време. Следователно, информационните байтове на системното специално съобщение никога не могат да имат установен най-старши бит. Този факт води до многобройни схеми за преминаване на 8-битова информация през механизъм, проектиран за 7-битова информация. Това е може би един от най-големите пропуски при проектирането на MIDI протокола. Системните специални съобщения се използват за предаване на пакети и други видове информация, специфична за всяко MIDI устройство. 1001cccc 0nnnnnnn Събитие "Нота включена" 1010cccc 0nnnnnnn Полифонична сила на натиска (After-touch) 1011cccc 0ccccccc Промяна в управлението. 1100cccc 0ppppppp Смяна на програмата 1101nnnn 0ccccccc Налягане на канала (After-touch). 1110nnnn 0lllllll Промяна в колелото за смяна на строя. ----------------------------------------------------------------- Местно управление. Всички ноти изключени. ----------------------------------------------------------------- 11110001 Неопределено. 11110010 0lllllll Указател за позицията в песента. 11110011 0sssssss Избор на песен. 11110100 Неопределено. 11110101 Неопределено. 11110110 Заявка за настройка. 11110111 Край на Системно специално съобщение. -----------------------------------------------------------------Системни съобщения в реално време----------------------------------------------------------------- 11111001 10 ms (1 съобщение на всеки 10 ms) 11111010 Старт. 11111011 Продължение. 11111100 Стоп. 11111101 Неопределено. 11111110 Aктивна чувствителност 11111111 Начално установяване. Заб.: Октава 1 е суб-контра октавата, 1 - контра,..., 10 - щеста. Със знак ">" е отбелязана първа октава, 60 е до от първа. Дефинират се два типа порции: заглавна (MThd) и пистова. Заглавната порция осигурява минимално количество информация, отнасяша се до целия MIDI файл. Пистовата порция съдържа последователен информационен поток от MIDI данни, които могат да съдържат информация за до 16 MIDI канала. Концепциите за множество писти, множество MIDI изходи, музикални мотиви, последователности и песни могат да бъдат реализирани чрез използването на няколко пистови порции. Един MIDI файл винаги започва със заглавна порция, следвана от една или повече пистови порции. Най-голямото позволено число е 0FFFFFFF, така че представянето с променлива дължина да се побере в 32 бита в програма за запис на числа с променлива дължина. Теоретично, и по-големи числа са възможни, но 200000000 96ти от удара при бързо темпо от 500 удара в минута трае дни, достатъчно дълго за всяко делта-време! Ето синтаксиса на една MTrk порция: <събитие> = <MIDI събитие> | <sysex събитие> | <meтa-събитие> <MIDI събитие> e всяко съобщение на MIDI канал. Използва се текущо състояние: байтовете на състоянието могат да бъдат изпуснати след първия байт. Първото събитие във файла задава състоянието. Самото делта-време не се счита за събитие: то е интегрална част от спецификацията. Обърнете внимание, че текущото състояние се използва между делта-времената. <meтa-събитието> означава не-MIDI информация, използвана в този формат или в секвенсерите, със следния синтаксис: FF <тип> <дължина> <байтове> Всички мета-събития започват с FF, следва байт за типа на събитието (който е винаги по-малък от 128), след това - дължината на данните, записана с променлива дължина и накрая самите данни. Ако няма данни, дължината е 0. Както при sysex събитията, не е позволено използването на текущо състояние. Както при порциите, в бъдеще могат да бъдат дефинирани нови мета-събития, които могат да не са известни на съществуващите програми, така че програмите трябва подходящо да игнорират мета-събитията, които те не разпознават и наистина да очакват да ги срещнат. <sysex събитие> означава MIDI системно специално съобщение или "escape", определящо произволни байтове за предаване. За съжаление, някои производители на синтезатори определят своите системни специални съобщения за предаване като малки пакети. Всеки пакет е само част от едно синтактично цяло системно специално съобщение, но времето, по което те се предават е важно. Примери за това са байтовете, предавани в синтезатора CZ на Casio kato данни на инструментите или в тоналния модул на Yamaha FB-01 в "системен специален" режим, в който могат да се предават микротонални данни. За да могат да се обработват ситуации като тези, са предвидени две форми на <sysex събитие>: F0 <дължина> <байтове за предаване след F0>F7 <дължина> <всички байтове за предаване> Синтактичното системно специално съобщение трябва винаги да завършва с F7, дори ако реалното устройство не го е изпратило, така че вие знаете кога сте достигнали края на цялото съобщение без да се очаква следващото събитие в MIDI файла. Огромното мнозинство системни специални съобщения просто използват F0 формата. Например, предаденото съобщение F0 43 12 00 07 F7 ще бъде записано в MIDI файл като F0 05 43 12 00 07 F7. Както бе отбелязано по-горе, изисква се да се включи F7 накрая, така че четецът на MIDI файла да знае, че е прочел цялото съобщение. За особени ситуации, когато единичното съобщение е разделено с части от него, предавани по различно време, както е при прехвърляне на данни за инструментите в Casio CZ, или при "системния специален режим" на Yamaha FB-01, се използва форматът с F7 на sysex събитието за всеки пакет с изключение на първия. Никой от пакетите няма да завърши с F7 освен последния, който трябва да завърши с F7. Трябва също да няма никакви предаваеми MIDI събития между пакетите на едно многопакетно съобщение. Събитието F7 може да бъде използвано също като "escape" за предаване на какви да са байтове, включително байтове в реално време, указател на песента, или MIDI код за време, които нормално не са позволени в тази спецификация. Не трябва да се правят никакви усилия за интерпретирането на тези байтове по този начин. Тъй като системно специално съобщение не се предава, не е необходимо или уместно да се завърши F7-събитие с F7 в този случай. 0 файлът съдържа единствена многоканална писта1 файлът съдържа една или повече едновременни писти (или MIDI изходи) на последователност2 файлът съдържа една или повече последователно независими еднопистови музикални мотива Формат 0, т.е. една многоканална писта, е най-взаимозаменяемото представяне на данни. Едно от приложенията на MIDI файловете е просто еднопистово просвирващо устройство в програма, която трябва да накара синтезаторите да издават звуци, но която се занимава предимно с нещо друго като смесители или устройства за звукови ефекти. Много е желателно да може да се получава такъв формат, дори ако дадена програма е базирана върху писти, за да работи с тези прости програми. MIDI файловете могат да изразяват темпо и размер и те са избрани да правят това за прехвърляне на картите на темпото от едно устройство към друго. За файл във формат 0 темпото ще бъде разхвърляно по протежение на пистата и четецът на картата на темпото трябва да игнорира междинните събития; за файл във формат 1 картата на темпото трябва да бъде съхранено като първа писта. Учтиво е четецът на картата на темпото да предложи на вашия потребител възможността да направи един файл във формат 0 само с темпото, освен ако Вие можете да използвате формат 1. Всички MIDI файлове трябва да обозначават темпото и размера. Ако не го правят, размерът се приема да е 4/4 и темпото 120 удара в минута. Във формат 0 тези мета-събития трябва да настъпят поне в началото на единичната многоканална писта. Във формат 1, тези мета-събития трябва да се съдържат в първата писта. Във формат 2, всеки от временно независимите музикални мотиви трябва да съдържа поне начална информация за размера и темпото. Могат да се дефинират други форматни идентификатори, за да се поддържат други структури. Програма, четяща непознат форматен идентификатор трябва да върне грешка към потребителя вместо да се опитва да чете по-нататък. FF 02 дължина текст Обявление за авторско правоFF 03 дължина текст Име на последователността / пистатаFF 04 дължина текст Име на инструментаFF 05 дължина текст Лирика (текст на песен)FF 06 дължина текст MaркерFF 07 дължина текст Момент за репликаFF 2F 00 Край на пистата Това събитие е задължително. То се включва, за да може да бъде зададен точният момент на завършване за пистата, така че да има точна дължина, която е необходима за писти, които са зациклени или слети. FF 51 03 tttttt Ново тeмпо, в микросекунди за MIDI четвърт нота Това събитие показва смяна на темпото. Друг начин на изразяване на "микросекунди за четвърт нота" е "24ти от микросекундата за MIDI такт". Представянето на темпото като време за един удар вместо удари за единица време позволява абсолютно точна дълговременна синхронизация с базиран върху времето протокол като SMPTE или MIDI кодирането по време. Такава точност, осигурена от това разрешение на темпото позволява четириминутна пиеса със 120 удара в минута да бъде точна в рамките на 500 usec в края на пиесата. В идеалния случай тези събития трябва да настъпват само там, където биха били разположени MIDI тактовете. Това съглашение е предназначено да гарантира, или поне да увеличи вероятността за съвместимост с други устройства за синхронизация, така че картата на размера и темпото, записана в този формат да може лесно да се прехвърля към друго устройство. FF 54 05 час мин сек кадър част Отместване по SMPTE (SMPTE е формат за кодиране на времето, използван в киното, телевизията и видеоиндустрията) Това събитие, ако го има, означава SMPTE времето, по което пистовата порция се очаква да започне. То трябва да съществува в началото на пистата, т.е. преди всички ненулеви делта-времена и преди всички предаваеми мета-събития. Часът трябва да бъде кодиран в SMPTE формат, точно както е в MIDI кодирането на времето. Във файл от формат 1 SMPTE отместването трябва да бъде ваписано с картата на темпото и няма смисъл в коя да е друга писта. Полето "част" съдържа частични кадри, в 100тни от кадъра, дори в SMPTE-базирани писти, които определят различно разделяне на кадъра за делта-времената. FF 58 04 числ знам тактове bb Размер Размерът се изразява като четири числа. "числ" и "знам" означават числителя и знаменателя на размера, както той би бил обозначен. Знаменателят е отрицателна степен на две: 2 означава четвъртина нота, 3 означава осмина нота, и т.н. Параметърът "тактове" изразява броя на MIDI тактовите импулси за едно тракване на метронома. Параметърът "bb" изразява броя на отбелязаните 32-ини ноти в еднa MIDI четвърт нота (24 MIDI импулса). Tова е добавено, защото има множество програми, които позволяват на потребителя да обозначи, че това, което MIDI счита за четвъртинка нота (24 импулса) трябва да бъде нотирано като, или да се свързва с нещо друго. Следователно, пълното събитие за 6/8 такт, където метрономът траква всеки три осминки ноти, но има 24 импулса за четвъртинка нота, 72 в един такт, ще бъде (шестнадесетично): FF 58 04 06 03 24 08 T.е., 6/8 такт (8 е 2 на 3та степен, така че това е 06 03), 36 MIDI импулса за точкувана четвъртинка (24 шестн.!), и осем нотирани 32-ини ноти за MIDI четвърт нота. FF 59 02 sf mi Знак за ключа sf = -7: 7 бемола FF 7F дълж данни Специфично за секвенсера мета-събитие if ((value = getc(infile)) & 0x80) WriteVarLen (value) buffer = value & 0x7f; Лекция 1 - Въведение. Апаратна част Лекция 2 - Протокол. Канални съобщения Лекция 3 - Системни съобщения Лекция 4 - Стандарти GM / GS / XG / GM2 Лекция 5 - MIDI - преговор и Стандартни MIDI-файлове | |||||||||||||||||||||||||||||||||||||||