Вы здесь

Запись и обработка звука на компьютере. Просто как дважды два. Глава 2. MIDI: цифровой интерфейс музыкальных инструментов (А. А. Лоянич, 2008)

Глава 2

MIDI: цифровой интерфейс музыкальных инструментов

Интерфейс MIDI, несомненно, – это самый мощный музыкальный инструмент, который появился со времен изобретения нотной грамоты.

Для чего же он служит? Дело в том, что практически каждая музыкальная задача, выполняемая на компьютере, требует использования MIDI в том или ином виде. Записывающее ПО применяет MIDI для совместной работы с другими программами и устройствами. Программные микшеры употребляют MIDI при настройке уровня сигнала, эффекты используют MIDI для динамического контроля, нотаторы (программы для записи нот) создают MIDI-файлы, чтобы вы могли прослушивать свою работу. Даже в играх MIDI в своей повседневной жизни применяются для управления музыкой, звуковыми эффектами и даже диалогами. И это только малая часть того, что может делать MIDI с вашей помощью или без нее. Очевидно, что музыкальная революция настольных компьютеров вряд ли сдвинулась бы с места, не будь MIDI.

Проще говоря, MIDI – это язык. Сам по себе он ничего не сделает: если вы решите послушать необработанный MIDI-поток, то он будет звучать просто как шум. Но соедините два устройства, которые разговаривают на одном языке, и произойдет чудо.

MIDI – как компьютерный язык, который просто позволяет одному устройству сообщать другому, что необходимо делать. В зависимости от того, какое устройство получает сообщение и как сообщение составлено, это может означать: «воспроизвести этот звук» или, к примеру, «начни воспроизведение новой песни и заглуши вокал».

Иногда можно услышать о «плохом качестве MIDI-музыки». Например, все мои друзья, знакомые с аудио и музыкой в компьютере на уровне WinAMP, искренне убеждены в этом мифе. Но на самом деле MIDI-файл – это не музыка, это набор команд по управлению электронными музыкальными инструментами и ничего более. Вспомним классический духовой орган: здесь исполнитель посредством сложнейшей механики управляет подачей воздуха в звучащие трубы. MIDI – это электронный аналог такой механики, инструмент, при помощи которого исполнитель реализует свои замыслы. Поэтому совершенно бессмысленно говорить о «плохом качестве MIDI», важно лишь определение возможностей управления, предоставляемого этим цифровым интерфейсом. Разговор о качестве уместен лишь тогда, когда дело касается используемых сэмплов.

Если вы играли на клавиатуре и записали данные MIDI в секвенсор (программу, которая записывает и воспроизводит эти данные), то программа в действительности сохранит серию сообщений о том, какие клавиши нажимали, как сильно вы их нажимали и когда отпускали (и именно поэтому проекты секвенсоров, содержащие чистые MIDI-данные, занимают крохотное место на диске). Проиграйте последовательность снова – и звуковой модуль в секвенсоре воспроизведет ваше исполнение. Можно изменить номер банка данных: вместо рояля поставить, скажем, трубу. Результат будет необычен, но для секвенсора – никакой разницы.

В этом сила MIDI: можно менять все. Измените ноту или тональность, смените банк звуков, растяните или сожмите дорожку по времени – все это и многое другое можно сделать с помощью этого замечательного интерфейса.

Более того: даже в вашем мобильном телефоне полифония осуществляется при помощи MIDI.

Возможности соединения

Устройства MIDI передают информацию с помощью специальных портов данных. Поскольку MIDI реализует одностороннюю передачу данных, вы обычно видите три разъема MIDI, обозначенных словами «in», «out» и «thru» (рис. 2.1). Будучи двоичным языком, MIDI хорошо подходит как для USB, так и для FireWire, поэтому все больше и больше устройств поддерживают эти интерфейсы. MIDI использует пятиконтактные DIN-разъемы, но при этом разводка разъема не такая, как в стандартных DIN-кабелях, используемых в советской радиоэлектронике. Поэтому убедитесь, что покупаете кабели, разработанные для MIDI, потому что, если вы решите подключить обычный советский кабель от папиного стереоусилителя, вы в лучшем случае не получите ничего. Старайтесь, чтобы кабель был как можно короче: при длине 5 м происходит ухудшение сигнала, а дешевые MIDI-кабели превращаются в замечательные радиоантенны, то есть создают помехи.

Рис. 2.1. Порты MIDI in, out и thru


В протоколе обмена информацией для MIDI-соединений нет ничего сложного: данные покидают устройство через порт «out» и входят через порт «in». А для двусторонней связи соответственно нужны два кабеля – так обычно и осуществляется обмен информацией между устройствами. Порты «MIDI thru» просто передают любое сообщение, полученное в порт «in», без прибавления новых данных.

Зачем нужно это делать? Одна из возможных причин – использование последовательного подключения нескольких звуковых модулей. Настроив все устройства так, чтобы они отвечали различным каналам, вы создадите многоэлементную цепочку модулей (рис. 2.2).

Рис. 2.2. Вот такая цепочка может получиться


Поток данных MIDI легко передается в компьютер и из него. Хотя вы до сих пор можете найти старые системы, использующие последовательные и параллельные порты (если сильно постараетесь), большинство интерфейсов MIDI сейчас применяют или USB, или FireWire.

Многие аудиоинтерфейсы, включая большинство внешних аудиоплат на FireWire и USB, также содержат MIDI-порты. Да и большинство клавишей (то есть MIDI-клавиатур и синтезаторов – так они называются в среде музыкантов) сейчас имеют возможность подключения к USB или FireWire, а некоторые даже содержат аудиоинтерфейсы.

Довольно распространенным до сих пор способом создания на компьютере MIDI-интерфейса остается вариант с подключением специального кабеля с оптронной развязкой к игровому порту звуковой платы (рис. 2.3). Такой вариант, пожалуй, наименее затратен – учитывая неизменную на протяжении многих лет стоимость такого кабеля в 10–15 долларов. Но это, конечно, не самый лучший вариант: вы представляете, что можете получить за такие гроши?

Рис. 2.3. Кабель с оптронной развязкой позволяет подключить MIDI-устройство к компьютеру, используя game port


Хорошенько подумайте о смысле жизни перед покупкой аудио/MIDI-интерфейса. Если у вас большая система или вы собираетесь подключать несколько синтезаторов (звуковых модулей) или любых других устройств с синхронизацией по MIDI – возможно, стоит подумать о покупке мультипортового интерфейса (то есть специализированного внешнего MIDI-интерфейса с двумя или более парами портов). Стоимость варианта вида 2×2 (два входных порта MIDI и два выходных) составляет около 1500 рублей. Больше портов – соответственно и дороже. Наиболее объемные по количеству портов варианты по цене превышают 9000 рублей.

Как все это работает

Далее я расскажу вам немного про то, как все это происходит внутри. Если эта часть вам не интересна, ее легко можно пропустить.

Сообщение MIDI состоит из трех 8-битовых «слов». По сути своей сообщения MIDI можно условно разделить на сообщения каналам и сообщения системе. Можно догадаться, что вторые обращены к целой системе, а первые относятся к одному из 16 MIDI-каналов. В дальнейшем сообщения каналам делятся на «голосовые», которые содержат большинство информации о музыкальном исполнении, такой как ноты, скорость исполнения и т. п., и «режимные», влияющие на то, как устройство-получатель будет отвечать на входящее сообщение. Сообщения системе делятся на «системное общее», «системное в режиме реального времени» и «системное эксклюзивное».

Сообщения банков

Здесь поток данных больше всего. Сообщения банков передают каналам самые важные данные исполнения – какие ноты и когда вы сыграли и как быстро нажимали клавиши.

Нажатие/отпускание клавиши

В действительности клавиатура электронного музыкального инструмента – это ряд переключателей. Коснитесь клавиши, и вы отошлете MIDI-сообщение вроде этого: «В канале XX была включена нота YY». Уберите палец, и будет переслано сообщение «Нота отключена».

Velocity

Оно относится к тому, насколько резко вы нажимаете клавишу и сыграете ноту. Чем сильнее нажатие, тем громче нота – как на фортепиано. Интересно, что при отключении ноты также регистрируется значение velocity, но большинство программного обеспечения это сообщение игнорирует.

Послекасание (Aftertouch)

Многие клавиатуры имеют под клавишами чувствительную к давлению мембрану, для того чтобы зафиксировать давление на клавишу после нажатия. Эту информацию принято использовать для добавления эффекта вибрато или других типов модуляции к звуку. Команда полифонического послекасания воздействует на каждую ноту индивидуально, а сообщение канального послекасания присваивает одно значение всем клавишам.

Амплитудное вибрато

С его помощью гитаристы и музыканты, играющие на духовых инструментах, прибавляют выразительности своему исполнению. Благодаря данной команде миллионы клавишников могут представить, что играют соло.

Смена банка

Эти сообщения выбирают звуки (сэмплы), которые будет воспроизводить инструмент-получатель. Так как у любого производителя (а на самом деле у каждой отдельной модели) есть собственная система нумерации сэмплов, в свое время для стандартизации был разработан специализированный протокол General MIDI. Звуки обычно хранят в банках данных по 128 сэмплов (см. далее).

Смена контроллера

Спецификация MIDI содержит большое количество управляющих сообщений, которые называются контроллерами. Некоторые из них, такие как, например, № 7 (громкость), № 33 (модуляция) и № 64 (нажатие педали), влияют на то, каким образом модулируется звук. Контроллер № 0 (выбор банка данных) расширяет количество выбираемых сэмплов выбором встроенных звуковых банков. Некоторые контроллеры зарезервированы.

Контроллеры MIDI работают в режиме реального времени. Некоторые из них имеют только два состояния: «включено» и «отключено», но большинство позволяет устанавливать значения в пределах от 0 до 127 (или, если хотите, от 1 до 128). Управляющую информацию можно записывать, редактировать и воспроизводить так же, как и обычные данные.

Всего существует 128 инструментов MIDI в спецификации GM. Не все они определены точно, поэтому производители по-разному реализуют возможности MIDI-устройств. Так, некоторые контроллеры могут иметь модификации для грубой и для точной настройки. Например, контроллер № 2, амплитудное вибрато, предполагает установку 128 возможных значений, а контроллер № 33, функционально тот же самый, предлагает гораздо больший диапазон выбора значений. Зачем нужны два контроллера? Для большинства случаев грубой настройки вполне хватает, и при этом меньше требования к производительности процессора. Но для некоторых из них, например более точной настройки громкости и панорамирования (паннинга), вам действительно потребуются дополнительные параметры.

Режимные сообщения

Так же как и голосовые, режимные сообщения определяют номер канала, на который должны влиять. Сообщение № 122 устанавливает режим работы клавишного пульта – например, можно отключить воспроизведение звука.

Другие четыре сообщения определяют, будет ли посылаемая информация монофонической (одна нота) или полифонической (более одной ноты).

Omni on/poly on. По всем каналам принимается полифоническая информация.

Omni on/poly off. Информация принимается по всем каналам, но в каждый момент времени будет звучать только одна нота на канал. Это имеет смысл, если вы хотите воспроизвести, например, звук духового инструмента.

Omni off/poly on. Полифоническая информация принимается только по выбранному каналу. Это основной режим при последовательном подключении нескольких устройств через порт thru, когда необходимо, чтобы каждое устройство исполняло отдельную партию.

Omni off/poly off. Информация принимается по отдельному (отдельным) MIDI-каналу, причем в определенный момент времени на определенном канале будет звучать только одна нота. Поскольку за раз может быть воспроизведена только одна нота, данный режим используется для таких монофонических инструментов, как духовые синтезаторы. Данный режим также обеспечивает возможность использования гитарных MIDI-контроллеров.

Общие системные сообщения

Общие системные сообщения используются для связи с каждым устройством в цепочке. Например, это может быть указание секвенсору относительно выбора записанного в памяти трека или его воспроизведения с произвольного места.

Системные сообщения в режиме реального времени

Интерфейс MIDI удобно использовать для синхронизации нескольких устройств при совместном воспроизведении, например синтезатора и программы-секвенсора. Синхрослово MIDI посылает 24 импульса на каждую четвертную ноту, основываясь на темпе воспроизведения.

Тайм-код SMPTE основан на частоте смены кадров фильма. Он был разработан для синхронизации звука и видео, чтобы саундтреки и диалоги в фильмах воспроизводились корректно. В процессе синхронизации дорожек аналоговый аудиосигнал, содержащий временной код, записывается из SMPTE-генератора прямо на ленту. Временной код MIDI (MTC) – это фактически SMPTE, переведенный на язык, который могут понимать цифровые устройства. В обоих временных кодах (и SMPTE, и MTC) время измеряется в часах, минутах, секундах и кадрах, например: 00:09:11:03. В приведенном примере определена точка в положении 0 часов, 9 минут, 11 секунд и третий кадр.

Зачем нужно знать номер кадра? Например, это помогает вставлять эффекты в нужную точку фильма. При работе с музыкальными композициями это дает большую степень точности хронометража, чем при использовании только минут и секунд. В мире существует несколько стандартов, и до сих пор не достигнуто соглашения о том, сколько кадров нужно воспроизводить за секунду.

Существуют четыре стандарта скорости, и вы сталкивались с ним даже на бытовом уровне: например, если вы хотели посмотреть какой-то фильм с субтитрами и сами субтитры «убегали» вперед при просмотре – это просто значит, что титры были записаны при одной скорости, а фильм – при другой. Короче говоря, основные значения – 24 кадра в секунду (movie-формат), 25 (в европейском видеостандарте) и 29,97 (в американском). Также может быть и 30 кадров, и 23,978, и 24,999, и еще много разных вариантов.

Другие сообщения в режиме реального времени – начало, продолжение и остановка. Их удобно использовать для контроля перемещения по дорожке.

Эксклюзивные системные сообщения

Sysx, или эксклюзивные системные сообщения, – это команды, которые работают только на одной конкретной модели MIDI-устройства, и с их помощью пользователь получает доступ к некоторым специфическим параметрам управления.

Писать эти сообщения в виде, очень похожем на ассемблерный код, – занятие крайне неблагодарное, и, пожалуй, ни один нормальный музыкант подобными ужасами не занимается. Для этого существуют специализированные программы с развитым графическим интерфейсом, которые работают с конкретными моделями синтезаторов или звуковых карт. Например, для редактирования эффектов синтезаторов формата XG существует программа XG Edit. Пользователь при работе с этой программой имеет дело с регуляторами и кнопками, а программа после всех операций создает файл Sysx, который может быть вставлен в композицию.

…Для синтезаторов и звуковых карт Roland есть программа Canvas Man, которая так же, как и XG Edit, позволяет получить доступ ко всем параметрам управления синтезаторов этой именитой фирмы и затем сохранить их в виде Sysx-сообшения.

Тем же, кто работает с синтезаторами и звуковыми картами других производителей, можно только порекомендовать внимательно перечитать руководство пользователя (да, большое и тяжелое) – почти всегда там описывается формат Sysx для данного устройства – или же изучить сайт производителя в Интернете.

Сообщения Sysx представляют собой последовательность двузначных шестнадцатеричных чисел. Каждое системное сообщение начинается с числа F0, затем следует идентификатор устройства (или того устройства, с которым совместимо ваше оборудование), а после идентификатора идет последовательность кодов, длина и формат которой определяются моделью синтезатора (устанавливается производителем) и типом передаваемых сообщений. Завершается всегда системное сообщение числом F7 – идентификатором конца системного сообщения.

О том, какие системные сообщения понимает ваш синтезатор, можно узнать из его инструкции. Информация о поддерживаемых системных сообщениях обычно содержится в разделе System Exclusive Messages. Как правило, эти сведения приводятся в виде таблицы, содержащей тип системного сообщения, его формат и назначение отдельных байтов. Конкретные значения переменных в системных сообщениях следует искать в других таблицах, содержащихся в техническом описании. Кстати, в Сети можно найти готовые банки системных сообщений и загрузить их в свое устройство, если оно поддерживает эту возможность.

Системные сообщения можно хранить в двух видах:

▪ непосредственно на треках в качестве параметров сообщений;

▪ в банках системных сообщений (такой способ предпочтительнее). Каждый банк может содержать последовательность системных сообщений практически неограниченной длины и имеет свой номер, который указывается в качестве параметра этого сообщения.

В общем, если вы хотите получить доступ ко всем без исключения ресурсам вашего устройства, без редактора системных сообщений Sysx вам не обойтись.

Стандарты MIDI

В начале существования интерфейса MIDI у каждого изготовителя были собственные методики организации звуков и каналов. Некоторые устройства использовали один банк данных из 128 сэмплов, другие делили их на кусочки поменьше. Звуки пианино и клавишных могли храниться рядом или быть случайным образом разбросаны по всей памяти устройства. Это вызывало постоянную путаницу, а композиторам, сочинявшим музыку для игр или других приложений, нужно было писать варианты для каждой системы.

General MIDI

Спецификация General MIDI (сокращенно GM) упорядочила этот хаос, создав систему нумерации сэмплов. Теперь, независимо от того, кто сделал ваш синтезатор или звуковую карту, сэмпл номер 1 – это акустический рояль, а номер 128 – звук выстрела. Благодаря GM вам не надо беспокоиться о том, что ваше творение будет (или не будет) воспроизводиться правильно. Почти любые существующие синтезаторы, звуковые карты или другие устройства воспроизведения сэмплов (и аппаратные, и программные) поддерживают GM, а многие и расширяют его. Это же касается операционных систем Mac OS и Windows.

Что содержит в себе GM?

GM использует каналы 1–9 и 11–16 для таких инструментов, как клавишные, гитары и духовые (канал 10 закреплен за ударными). Для этих инструментов настройка стандартизирована таким образом, чтобы воспроизведение клавиши под номером 60 звучало как до первой октавы.

Звуки размещены в более или менее логичном порядке: например, звуки пианино сгруппированы в банках с 1 по 9, за ними следуют звуки хроматических ударных, такие как маримба, в каналах с 9 по 16. Звуки басовых можно найти в каналах с 33 по 40. Хотя спецификация GM определяет, какой звук будет вызываться, она ничего не говорит о том, как он должен воспроизводиться.

Соответственно качество и характер отдельных звуков различаются у разных производителей или даже у различных устройств одного изготовителя. Некоторые звуки GM, например акустического пианино, известны своей сложностью качественного исполнения. Другие же, например звук блок-флейты (№ 75), очень просто воссоздать даже на самой дешевой звуковой карте.

GM охватывает множество звуков, от роковых и джазовых до оркестровых, групп струнных и духовых, звуков синтезатора и народных инструментов со всего мира. Есть даже звуковые эффекты для разработчиков игр. Эта огромная гибкость и делает GM настолько мощным. Несмотря на то что все программы более или менее стандартизированы, названия банков иногда слегка отличаются. Поэтому электропианино № 2 может называться цифровым пианино, пиано FM или как-то еще.

Единственным недостатком звуков GM является то, что чаще всего им недостает глубины и характерных особенностей звуков, хранящихся в вашем клавишном пульте или коллекции сэмплов.

Ударные GM

Канал 10 зарезервирован за звуками ударных, таких как наборы барабанов или ручные ударные инструменты. В отличие от хроматических звуков других каналов, каждая нота канала № 10 используется для выбора конкретного ударного инструмента. Это позволяет играть партию ударных прямо на клавишном пульте. Например, используйте ноты № 60 и 61 (среднее до и ре на октаву выше) для ритма с высоким и низким бонго.

Некоторые GM-пульты и модули расширяют идею единого набора барабанов. Используя сообщения о выборе банка данных, вы сможете отдавать предпочтение тому или иному комплекту, разработанному для джаза, тяжелого рока, электронной музыки и другого.

И напоследок я скажу…

General MIDI – это нечто больше, чем просто список звуковых банков. Спецификации требуют, чтобы совместимые звуковые модули (и аппаратные, и программные) распознавали все 16 MIDI-каналов и использовали любой из 24 динамически распределяемых голосов для одновременного воспроизведения звуков ударных и мелодии, иногда разделяемых на 8 голосов для ударных и 16 – для звуков мелодии. GM также определяет, как модули будут отвечать на конкретные сообщения контроллера, и некоторые другие полезные мелочи.

Главное, что можно создать песню на своей системе и знать, что она будет правильно воспроизводиться на любой GM. Так как файлы MIDI очень маленькие по сравнению с файлами цифрового аудио, MIDI идеально подходит для использования в Сети. Стандартные MIDI-файлы (SMF) могут быть отображены на любом секвенсоре MIDI, независимо от платформы. Ассоциация производителей MIDI (которая следит за стандартами MIDI) определила три типа файлов SMF, хотя только два из них реально используются. Тип 0 сохраняет все данные последовательности на одной дорожке. Тип 1 – это многодорожечные файлы. Из-за небольших размеров и универсальности файлы SMF и Интернет – это лучшее сочетание всех времен и народов. Быстрый поиск выдаст миллионы файлов SMF, охватывающих практически все музыкальные жанры, которые только можно себе представить. Хотите петь караоке? Выбирайте из тысяч доступных файлов. Работаете с соавтором, живущим на другом континенте? Просто перешлите ему SMF-файл со своей работой. Он сможет загрузить его в свой секвенсор, добавить новые фрагменты и выслать обратно с помощью электронной почты.

General MIDI существует уже достаточно долго, чтобы начал сказываться его возраст. Например, исходные спецификации ограничивали количество сэмплов, которые могли быть сохранены. К счастью, усовершенствованные форматы GM, такие как GS от Roland и XG от Yamaha, значительно повысили его мощность и функциональность.

Roland GS

GS начал развиваться в 1991 году сразу за GM и неоднократно расширялся в связи с выпуском новых продвинутых моделей. XG от Yamaha активно продвигался с 1996 года, и при его разработке учитывался опыт фирмы Roland.

Стандарт GS имеет обратную совместимость с General MIDI, то есть любая MIDI-композиция, созданная для GM-устройств, может быть успешно воспроизведена и на GS-устройствах. Все GS должны соответствовать требованиям к GM-устройствам. Кроме того, для них предусмотрены некоторые дополнительные условия:

▪ минимальный набор из 226 инструментов (вместо 128 в GM), причем для выбора инструментов, не входящих в базовый набор, используется переключение банков с помощью контроллера № 0;

▪ несколько (до 128) различных 61-звучных наборов ударных;

▪ поддержка как минимум 20 контроллеров;

▪ возможность динамической редакции по MIDI восьми звуковых параметров (время атаки и затухания, частота среза фильтра, скорость вибрато и пр.);

▪ возможность динамической редакции по MIDI пяти параметров для ударных тембров (высота, пространственная локализация, а также уровень громкости, реверберации и хоруса);

▪ широкие возможности редактирования звучания с помощью исключительных системных MIDI-сообщений.

Стандарт GS не получил такого широкого распространения, как General MIDI, однако некоторые музыканты все же отдают ему предпочтение. Использовать у себя Roland GS вы можете в том случае, если у вас есть соответствующий синтезатор или звуковой модуль этой фирмы (рис. 2.4).

Рис. 2.4. Использовать стандарт GS вы сможете с синтезаторами фирмы Roland

Yamaha XG

А в сентябре 1994 года появился формат XG (Extended General MIDI), разработанный фирмой Yamaha, чтобы расширить и усложнить стандарт GM (люди вообще любят все усложнять). XG полностью обратно совместим с GM и в то же время обеспечивает большой набор дополнительных элементов: новые инструменты и редактирование их, несколько сотен эффектов и множество других возможностей, которые используются мультимедийными приложениями. Вот почему многие компании – производители музыкальной аппаратуры приняли данный стандарт и выпускают технику, которая позволяет его применять.

Прежде всего спецификация XG поддерживает гораздо большее количество инструментов, чем GM. Минимальный набор, определенный в спецификации, должен содержать 480 инструментов. Вместе со всеми эффектами цифра получается еще более внушительной – 676 инструментов.

Спецификация XG предусматривает и большие возможности редакции исполнительских параметров по MIDI. Предусмотрено также много эффектов – реверберация (эффект «эха», когда звуковой сигнал смешивается со своими копиями, задержанными на различные временные интервалы), хорус (эффект исполнения одного звука несколькими инструментами) и другие эффекты, коих несколько десятков. Минимальное количество типов реверберации и хоруса – 8, а остальных – 35. Последние включают в себя как различные варианты и комбинации реверберации и хоруса, так и дополнительные эффекты: вращение, тремоло, «вау-вау», искажения, шумы и т. п. Любой эффект может быть использован как на отдельном MIDI-канале, так и на общем выходе.

Все группы эффектов можно применять одновременно, причем их параметры легко изменяются с помощью MIDI-сообщений. Некоторые XG-устройства имеют управляемые по MIDI графические эквалайзеры. Эти эквалайзеры могут быть либо пресетные (то есть с заранее записанными установками: в этом случае по MIDI можно изменять тип установки эквалайзера), либо настраиваемые. В последнем случае пользователь получает возможность очень гибкой работы со звуковым спектром в реальном времени, причем совершенно не загружая ресурсы процессора, ведь компьютер работает с обычным потоком MIDI-информации.

Конец ознакомительного фрагмента.