Работа с MIDI

Качено от mic на Fri, 03/30/2018 - 10:37

администратор: Качено първо на 2016 06 22

Преди няколко години написах няколко статии за MIDI. Тези статии бяха технически. Обясниха съобщенията в MIDI, които устройствата използват за да комуникират едно с друго. По-късно, преместихме повечето от тази информация в Речника, но не всичко. Трябва, според мен, да върнем някои от бележките.

MIDI винаги ми е било интересно – повече като програмист отколкото като музикант. Преди няколко години, когато започнах да пиша за MIDI и преди да китарите MIDI да бяха практични, беше ми по-интересно да свиря на една акустична китара, отколкото да използвам софтуери или клавиатури (на които не знаех как да свиря) за да създавам писти с MIDI. По-същото време и не бях толкова впечатлен от звука на MIDI. Едно пиано MIDI звучеше достатъчно истинско, барабаните MIDI бяха добри, но китарите и духовите инструменти – не толкова.

Поиграх си малко с MIDI. Използвах Orinj за да построя една парче с пиано за една песен, на която и трябваше пиано (ето го пианото, компресирано в mp3). Едва можеш да свиря на пиано, но затова и имаме MIDI – за инструментите, които не притежаваме или на които не можем да свирим.

Musical Instrument Digital Interface

MIDI означава "Musical Instrument Digital Interface" и е един протокол, който устройствата (инструменти, компютри) използват за да комуникират и да пазят данни. С други думи, MIDI е език за запазване и прехвърляне на цифрова музика от едно устройство на друго.

Като един език за цифрова музика, MIDI не изглежда толкова различен от цифровото аудио с проби (например, файловете wave). Всяко число в един файл уейв казва на едно електронно устройство (например звуковата карта), че в едно определено време амплитудата на звука трябва да има някаква определена стойност. Комуникацията в MIDI е подобна. Всяко парче информация в един файл MIDI или една поредица MIDI казва на едно електронно устройство, че "в едно определено време", устройството MIDI трябва "да направи нещо". Тези парчета информация са събитията в MIDI. Те имат две парчета с данни: 1) времето, в което устройството MIDI трябва да направи нещо; и 2) съобщението, което казва на устройството MIDI какво точно да направи. Няколко примера са по-долу. Самият протокол MIDI е обяснен в Речника.

Работа с MIDI

И така, едно съобщение казва на едно устройство MIDI да направи нещо в някакво време. Обаче:

  • Съобщението си е само едно съобщение. Какво ще направи устройството MIDI зависи от устройството. Различните устройства MIDI могат да реагират различно на едно и също съобщение.
  • Като език, MIDI непрекъснато се развива. Възможно е едно устройства да не разбере някакво съобщение. Тогава, устройството трябва просто да пренебрегне това съобщение.
  • Някои съобщения са създадени за определени устройства произведени от някакви производители и трябва да се пренебрегнат от другите устройства.

Така, MIDI е малко неясен. Доста е гъвкав, от гледна точка на тълкуването. Ето няколко примера.

  • Вземи едно устройство MIDI, което получава съобщението от три байта 0x92 0x3C 0x50. Тези три байта казват на устройството MIDI да изсвири в канал 2 (0x92) нотата средно До (0x3C) със скорост 0x50. Ако просто изпратиш това съобщение към устройството MIDI, то ще започне да свири нотата. Инструментът, който ще изсвири нотата обаче, не е определен. Колко дълго ще се свири нотата също не е определено.
  •  
  • Ако искаш да определиш инструмента, който трябва да изсвири нотата, трябва да изпратиш едно съобщение на устройството MIDI преди съобщението по-горе. Това съобщение трябва да определи инструмента за канал 2. Ако изпратиш съобщението по-горе без да определиш инструмента преди това, едно от следните две неща ще се получи – устройството ще изсвири нотата с някакъв предопределен инструмент (обикновено "акустично пиано") или пък ще изсвири нотата с инструмента, който е бил използван в този канал преди, какъвто и да е бил. Може даже да е един инструмент, който е бил изпратен към канал 2 от някаква предишна поредица MIDI (може преди това да си изсвирил някакъв друг файл MIDI).
  •  
  • Колко дълго ще се свири нотата зависи от устройството и от какво става след това. Едно устройство MIDI, понякога в зависимост от избрания инструмент, може изобщо да не спре нотата. Едно друго устройство MIDI може да накара нотата да затихне. Ако искаш една нота да спре в едно определено време, трябва да изпратиш едно съобщение на устройството MIDI, което да му каже да спре нотата. Вземи съобщението 0x82 0x3C 0x50. Това съобщение кара устройството да спре в канал 2 (0x82) нотата средно До (0x3C) със скорост 0x50. Какво точно означава "скорост" обаче, не е ясно. Може да е колко бързо нотата ще затихне или пък може да е нещо друго. Даже и ако е скоростта на затихване, не е ясно точно колко дълго нотата ще затихва, за една скорост равна на 0x50.
  •  
  • Да предположим, че 0x92 0x3C 0x50 е последната нота, която искаш да бъде изсвирена в твоята поредица MIDI. Поредицата MIDI ще има поне още едно събитие MIDI – това което определя края на пистата MIDI. Най-вероятно, устройството MIDI ще спре всички ноти в края на пистата. Възможно е съобщението "край на пистата" да дойде веднага след съобщението "свири тази нота" (например след една микросекунда). Тогава нотата сигурно изобщо няма да се чуе.
  •  
  • Да предположим, че преди нотата изпратиш едно съобщение, което започва с байта 0xE2. Това е съобщението за промяна в тоналността за канал 2. Има три байта, които започват с този байт и завършват с два байта, които определят колко трябва да бъде промяната в тоналността. Стойността на двата байта е между 0x0000 и 0x3FFF, но кое какво е зависи от устройството MIDI. Обикновено, 0x0000 означава два полутона надолу и 0x3FFF означава два полутона нагоре, като 0x2000 е средата. На устройствата обаче е позволено да тълкуват тези стойности по различен начин.

Така, на устройствата, които свирят MIDI е позволена някаква свобода при тълкуването или пренебрегването на съобщенията. Да кажем, че местиш една поредица MIDI от едно устройство на друго. Ако поредицата MIDI е добре конструирана, ще започне като каже на устройството MIDI кой инструмент да използва за кой канал, какви трябва да са амплитудата и панорамата на канала и така нататък. Ако поредицата MIDI не е добре конструирана, може да не съдържа цялата тази информация. В този случай, същата поредица може да е едно шумно пиано на първото устройство, една тиха китара на второто и нещо съвсем друго на същото устройство, ако е изсвирена втори път. Забелязах например, че една поредица MIDI звучи различно, ако е изсвирена в Orinj и ако е изсвирена в Windows Media Player, въпреки че и двете трябва да използват едно и също устройство MIDI и не направих никакви промени между двете свирения.

На устройствата, които ти позволяват да записваш MIDI, е позволена допълнителна свобода. Когато записваш едно парче на твоята клавиатура MIDI например, клавиатурата MIDI може да избере да запише или да не запише съобщението за кой инструмент е избран. Софтуерите за редактиране на MIDI работят подобно. Когато създавахме Orinj, накарахме всяка писта в един файл MIDI да започва с един комплект от предопределени контроли. Включихме съобщения за инструмента, амплитудата, панорамата и други. Приехме и, за да е всичко по-ясно, че един малък, правилно организиран файл MIDI ще използва една писта за един канал. Както при всеки софтуер обаче, имаме избор между един софтуер, който "не позволява грешки" и един софтуер, който "дава свобода". Избрахме второто. Това означава, че потребителят на Orinj може да маха тези контроли и да меша каналите и пистите. Оставихме потребителят сам да избира как да организира файловете MIDI.

MIDI е интересен, защото е гъвкав. Малко е и обезсърчаващ, защото цялата тази свобода прави документацията му малко неорганизирана. Така или иначе, доста е мощен.

автори: mic

Comments

Сега открих, че някои от нещата, които не са определени в стандарта MIDI, са определени на други места. Например, във формата Downloadable Sounds (DLS) има предложения как да се използва скоростта на съобщението свири нотата в MIDI (но не за съобщението спри нотата в MIDI).

Добави нов коментар

Filtered HTML

  • Freelinking helps you easily create HTML links. Links take the form of [[indicator:target|Title]]. By default (no indicator): Click to view a local node.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.