| PC Help |
| уроци | | | софтуер | | | хардуер | | | речник | |
| | | връзки | ||||||||
| Цикъл лекции за MIDI 2. Протокол. Канални съобщения Както изяснихме в първата лекция, една от съставните части на MIDI е протоколът. 2.1. Формат на MIDI-съобщението MIDI-съобщението се състои от две части - команда (наричана още "статус-байт") и данни. Командата винаги е точно един байт. Данните са един, два или повече байта. Всяка команда изисква точно определен брой байтове. За да може да се синхронизира потокът от MIDI-информация в произволен момент, е прието всички команди да имат в най-старшия си бит единица. Съответно всички данни имат в най-старшия си бит нула. Има няколко различни типа MIDI-съобщения. На най-високо ниво MIDI-съобщенията се класифицират като канални или системни. Каналните съобщения са тези, които се отнасят до даден канал, а номерът на канала се задава с младшата тетрада на техния статус-байт (командата). Така могат да се кодират 16 канала. На всяка музикална партия обикновено се присвоява по един канал, но има и изключения - например много ударни инструменти могат да звучат на един и същ канал, а при MIDI-китарите информацията за всяка струна често се изпраща по отделен канал. Системните съобщения не се отнасят до никой канал поотделно, а до всички устройства, които ги приемат, и служат за настройка и синхронизация на MIDI-системата. Те ще бъдат тема на следващата ни лекция. Сега ще се съсредоточим върху каналните съобшения. Каналните съобщения могат да се класифицират като гласови и режимни. Гласовите съобшения пренасят информация за музикалното изпълнение. Те съставляват по-голямата част от трафика на типичния поток от MIDI-данни. Съобщенията за промяна на режима регулират начина, по който приемащият инструмент отговаря на гласовите съобщения. 2.2. Гласови съобщения (Voice Messages) Използват се за предаване на информация за музикалното изпълнение. Съобщенията в тази категория са "Включване на нота", "Изключване на нота", "Полифоничен клавишен натиск", "Клавишен натиск за канала", "Промяна на височината на тона", "Смяна на програмата" и "Промяна на контролер". Всички те са обяснени по-долу. 2.2.1. Включване и изключване на нота (Note On/Off). Скорост (Velocity) В MIDI-системите активирането на дадена нота и отпускането на същата нота се считат за две отделни съобщения. Когато се натисне клавиш на MIDI-инструмент или MIDI-клавиатурен контролер, той изпраща съобщение "Включване на нота" на изхода MIDI OUT. Това става по някой от 16-те логически канала. Статус-байтът включва информация за този канал. След този байт следват два даннови байта, които задават номера на клавиша (с други думи, кой клавиш е натиснат) и скоростта на натискане (сиреч, колко силно е натиснат този клавиш). Номерът на клавиш се използва в приемащия синтезатор за избор на нотата, която трябва да се свири, а скоростта нормално задава амплитудата (а много често и тембъра) на нотата. Когато клавишът се отпусне, клавишният инстумент или контролерът изпращат съобщение "Изключване на нота". Това съобщение също включва два даннови байта за номера на клавиша и за скоростта, с която той е отпуснат. Обикновено информацията за скоростта се игнорира, с изключение на някои редки и скъпи модели синтезатори. 2.2.2. Натиск върху клавиша (Pressure/Aftertouch) Някои MIDI-клавишни инструменти могат да отчитат натиска, което се прилага към клавишите, докато те са натиснати. Тази информация за натиска, която е прието да се нарича "aftertouch" (англ. = "след докосването"), може да се използва за управление на някои свойства на звука, произвеждан от синтезатора (напр. вибрато). Ако клавиатурата има датчик на налягане за всеки клавиш, то получената информация за "полифоничен натиск" ще се изпраща във формата на съобщения "Полифоничен клавишен натиск". Тези съобщения включват отделни даннови байтове за номера на клавиша и за величината на натиска. Но включването на датчици за налягане за всеки клавиш (много често безконтактни, отчитащи едновременно налягане и скорост) силно оскъпява клавиатурата. Затова много по-често срещани са клавиатурите, които отчитат едно-единствено ниво на натиска за цялата клавиатура. Тази информация за "канален натиск" се изпраща чрез съобщението "Клавишен натиск за канала". което има само един даннов байт - за нивото на натиска. 2.2.3. Промяна на височината на тона (Pitch Bend) Съобщението "Промяна на височината на тона" (англ. "pitch bend" = букв. "огъване на височината на тона") обикновено се изпраща от клавишен инструмент в отговор на промяна в положението на специално колело. (При някои производители този манипулатор има вида на лостче, понякога покрито с част от сфера). Тази информация се използва за измемение на височината на всички звуци (гласове), изсвирени на даден канал. Това съобщение включва два даннови байта за задаване на стойността на промяната. Изискват се два байта, за да има достатъчно малка разлика между съседните стойности, така че промените във височината на тона, получаващи се от движението на колелото (лоста), да се чуват като плавна промяна, а не на отделни стъпки (стъпалообразно). 2.2.4. Смяна на програмата (Program Change) Това съобщение задава типа инструмент, който трябва да се използва за изсвирване на звуците на даден канал. То има само един даннов байт, който задава номера на новата програма. Вместо "програма" на английски често се употребява друг термин - "patch", съкратено от "patch cord" = телефонна букса, с които са се програмирали аналоговите синтезатори. Това понятие е свързано с необходимостта от програмиране на тембъра, свойствата и ефектите на звука на всеки един "инструмент" при синтезаторите. Съобщението "Смяна на програмата" само превключва готовите програми. За предварително програмиране се използват "Системните специални" съобщения, разглеждани в следващата лекция. 2.2.5. Промяна на контролер (Control Change) Тези съобщения се използват за управление на широк спектър от функции в синтезатора. Те като другите канални съобщения влияят само върху канала, зададен в статус-байта. След този байт следва един даннов байт, задаващ "номера на контролер" и още един, който задава стойността му. Номерът на контролер обозначава коя функция на синтезатора се управлява от съобщението. Физически тези "контролери" са изпълнени подобно на манипулатора за промяна на височината на тона - като колело или лостче, но има някои контролери, които се управляват с потенциометър или с педал. Някои от педалите имат само две положения - отпуснат и натиснат, които се кодират съответно с 0 и 127 (7FH). Често се среща комбиниране на манипулаторите за промяна на височината на тона и контролера за модулация на тона (вибрато) във вид на лостче (Роланд, Корг), което, като се движи наляво-надясно, предизвиква промяна на височината на тона, а напред-назад - на модулацията. В справочните таблици (вж. края на тази лекция) са дадени стандартните контролери. 2.2.5.1. Смяна на банката с програми (Bank Change) Контролери номер 0 (старши байт) и 32 (младши байт) се дефинират като смяна на банката програми. Тази функция се използва в някои синтезатори в комбинация със съобщението "Смяна на програмата" за разширяване на броя на различните звуци на инструменти, които могат да бъдат зададени. Тъй като най-старшият бит на данновите байтове е задължително нула, със съобщението "Смяна на програма" може да се избира една от 128 възможни програми. Допълнителните звуци се избират чрез съобщение за смяна на контролер, предхождащо това за смяна на програма, което задава нова стойност за контролер 0 и / или 32. Това позволява да се използват 16384 банки от по 128 звука всяка. Преди появата на стандарта "General MIDI 2" MIDI-спецификацията не описваше начина, по който банките на синтезатора са свързани със съобщенията за смяната им. Затова нямаше стандартен начин дадено съобщение за смяна на банка да избере дадена банка на синтезатора. Някои производители като Roland (със стандарта "GS" от 1991 г.) и Yamaha (със стандарта "XG" от 1994 г.), въведоха свои собствени методи, за до осигурят някаква стандартизация в рамките на своите продукти. Yamaha дори въведе умишлена несъвместимост с Roland на байта, с който се сменя банката (старши срещу младши), за да избегне патентни проблеми! Предполагаше се, че стандартът "General MIDI 2" ще промени нещата, но този стандарт дойде твърде късно (2000 г.), за да измести утвърдените вече GS и XG. 2.2.5.2. Регистрирани (RPN) и нерегистрирани (NRPN) параметри RPN означава "Номер на регистриран параметър", а NRPN - на нерегистриран (нестандартен). Контролер номер 6 (въвеждане на данни), в комбинация с контролер 96 (увеличаване на данните с 1), 97 (намаляване с 1), 98 (младши байт на RPN), 99 (старши байт на RPN), 100 (младши байт на NRPN) и 101 (старши байт на NRPN) разширяват броя на MIDI-контролерите. Данните на дадения параметър се предават, като първо с контролери 98 и 99 или 100 и 101 се избира номера на параметъра, който ще се променя, а после се настройва стойността на данните за този параметър чрез контролер 6, 96 или 97. RPN и NRPN обикновено се използват за предаване на параметрични данни към синтезатора, за да се редактират програмите на звуците или други данни. Регистрираните параметри са тези, на които е присвоена някаква функция от Асоциацията на MIDI-производителите (MMA) в САЩ или японската Асоциацията по музикална електроника AMEI (бившият Комитет по MIDI-стандарти в Япония, JMSC). Например има RPN, присвоен за управление на чувствителността на промените на височината на тона и за груба и фина настройка на височината на тона "ла" от Първа октава. На нерегистрираните параметри не е присвоена функция и те могат да се използват за различни функции от различните производители. Тук отново Роланд и Ямаха си въведоха свои собствени функциии, за да осигурят накаква стандартизация с GS и XG съответно. И отново твърде късното въвеждането на стандарта "General MIDI 2" не промени нищо. 2.3. Съобщения за промяна на режима (Mode Messages) Контролери с номера от 120 до 127 влияят на начина, по който синтезаторът отговаря на MIDI-данните. Контролер 120 моментално изключва всички звуци. Контролер 121 установява всички контролери и височината на тона в начално положение. Чрез контролер 122 се разрешава и забранява мeстното управление ("local control"). В MIDI-синтезатор, който има собствена клавиатура, функциите на клавишния контролер и на синтезатора могат да бъдат изолирани чрез изключването (нулирането) на този контролер. Контролер 123 изключва всички ноти, но звуковият генератор преминава през фазата на затихване на обвиващата крива на звука (за разлика от контролер 120). Контролери от 124 до 127 се използват за включване и изключване на режима "Омни" и избор между моно- и полифоничен (едно- и многогласен) режим на работа. Когато е включен режимът "Омни", синтезаторът отговаря на входящите MIDI-данни по всички канали (този режим вече практически не се използва). Когато режимът "Омни" е изключен (нормално това е така), синтезаторът отговаря само на MIDI-съобщенията на един канал за всеки един свой тембър (ако е еднотембров - само на един канал). Когато е включен режимът "Поли", входящите съобщения за включване на нота се изсвирват многогласно (полифонично). Това означава, че когато се приемат множество съобщения "Включване на нота", на всяка нота й се присвоява свой собствен глас (съгласно броя на свободните гласове в синтезатора). Резултатът е, че се свирят много ноти едновременно. Когато е избран режим "Моно" (т.е. "Поли" е изключен), на всеки MIDI-канал се присвоява само един глас. Ще рече, че може да се свири само по една нота за всеки канал по едно и също време. Това е характерно за MIDI-китарите. При тях съобщенията за всяка струна се предават по отделен канал. Това не само дава възможност всяка струна да свири с различен тембър (което отговаря на действителността), но (което е по-важно) позволява да се предават отделни съобщения за промяна на височината на тона за всяка струна независимо от другите, както и да се свири в режим "легато", ако той се поддържа от китарата и синтезатора. (В този режим се влиза, ако на същия канал се появи съобщение "Включване на нота", без да е изключена предишната.) Съвременните многотемброви синтезатори (без китарните, работещи в режим "Моно") работят в изключен режим "Омни" и включен "Поли". Така синтезаторът свири нотните съобщения, приемани от всеки канал, със свой собствен тембър, полифонично. Този режим понякога се нарича "Мулти". MIDI-инструментите имат по един базов канал, който е или твърдо установен (напр. 16), или може да се избира. Съобщенията за промяна на режима могат да се предават единствено по него. 2.4. Текущ статус (Running Status) Нормално едно MIDI-съобщение се предава за 3 X 320 = 960 микросекунди, или почти 1 ms. При наситена музикална картина със сложни многогласни акорди последователните MIDI-съобщения могат да доведат до забележимо на слух "размазване" на акордите във времето. Има начин (специално предвиден в стандарта) този ефект да се намали чрез намаляване на количеството данни, предавани по MIDI-кабела. Този "трик" се нарича "Текущ статус". Текущият статус се основава върху факта, че много често се срещат низове от последователни съобщения от един и същи тип. Например, когато се свири акорд на MIDI-клавиатурата, могат да се генерират 10 последователни съобщения за включване на ноти, следвани от други 10 за изключването им. Когато се използва текущ статус, се изпраща статус-байт само ако съобщението не е от същия тип като последното съобщение, изпратено по същия канал. Статус-байтът за спедващите съобщения от същия тип може да се изпусне (предават се само данновите байтове). Ефективността на текущия статус може да се увеличи чрез изпращането на съобщения "Включване на нота" с нулева скорост вместо съобщенията "Изключване на нота". (В стандарта е специално предвидено такива съобщения да се възприемат като "Изключване на нота".) В такъв случай често ще се образуват дълги низове от съобщения "Включена нота" само с даннови байтове, което може да намали плътността на MIDI-потока с до 1/3. Промените в някои MIDI-контролери или движенията на колелото за промяна на височината на тона на музикалния инструмент могат да породят дълга поредица от гласови канални съобщения. Текущият статус може да помогне и тук (особено при MIDI-китарите). А използването на текущ статус при Стандартните MIDI-файлове, които ще разгледаме в по-следващата лекция (4), съществено намалява обема на файла. Важно е да се отбележи, че текущият статус е позволен само при каналните, но не и при системните съобщения, нито при Мета-събитията в MIDI-файловете! 2.5. Справочни таблици на каналните MIDI-съобщения Тук даваме списъци на по-главните канални MIDI-съобщения в числов (двоичен) ред. Те са на английски език. (Съжалявам, но преводът им на български не би позволил те да се ползват като база за изучаване на фирмените документации и на MIDI-стандарта.) Тези таблици са по-скоро общ преглед на MIDI. Те не са пълни и не могат да заместят официалната Пълна MIDI-спецификация. В този документ, който не се разпространява свободно, а се продава за $60 от MMA, са дадени и описани всички останали съобщения. За съжаление дейността на MMA (създадена първоначално като организация с "идеална" цел) през последните няколко години се свежда главно до продаване на ксерокопия от MIDI-спецификацията. Наблюдава се определено плъзгане по наклонената плоскост на компютърните игри (стандартът DLS) и MIDI-играчките (най-новите стандарти XMF и GML от 2001 г.). Май че е време сериозните студийни и концертиращи музиканти, звукоинженери, както и хората, които създават апаратни и програмни средства за студийни и сценични приложения, да се замислят за реорганизация на тази асоциация... или просто за закриването й! С това тази лекция завършва. В следващата лекция ще разгледаме системните MIDI-съобщения. Благодаря за вниманието! Лекция 1 - Въведение. Апаратна част Лекция 2 - Протокол. Канални съобщения Лекция 3 - Системни съобщения Лекция 4 - Стандарти GM / GS / XG / GM2 Лекция 5 - MIDI - преговор и Стандартни MIDI-файлове | |