Технологии программирования миди

 Навигация:

 Поиск:

 Новости:

17.02.2007
Полностью переработан дизайн сайта.

6.01.2007
Добавлен раздел Наработки Полезные и интересные программы и их исходники от автора.

19.11.2006
Функции WriteVarLen и ReadVarLen портированы с СИ на Delphi читать

14.11.2006
Появилась cтатья Midi-протокол глазами программиста

24.10.2006
Написана вторая часть MMSystem Функции midiOutGetVolume midiOutSetVolume midiOutMessage midiOutShortMsg и midiOutLongMsg

12.10.2006
Добавлен раздел Multimedia , который содержит большое количество информации по мультимедийным технологиям.

1.09.2006
Добавлен раздел MMSystem в котором находятся
подробные опсания функций winmm.dll, определенных в модуле mmSystem.pas,
с примерами их использования в Delphi.

13.08.2006
Опубликован исходник приложения, записывающего игру на клавиатуре
в стандартный midi-файл SMF - 0

4.07.2006
Добавлен раздел Структура формата миди-файла

 Счетчики:
Rambler's Top100 Яндекс цитирования Rambler's Top100
 Контент:

Midi-протокол глазами программиста.

Данные передаются в виде одно-,двух- и техбайтовых сообщений. Сообщения деляться на канальные и системные (SYSTEM EXCLUSIVE). Первый байт называется статусным (Stastus Byte) и несет информацию о типе сообщения. Следует отметить, что его старший бит всегда равен 1. Младший полубайт определяет какому каналу предназначено сообщение. Следовательно Всего может быть 16 каналов. Нумерация начинается с нуля.

Пример:
Пример Значение
C0 Смена инструмента на первом канале
92 Взятие ноты на третьем канале
8C Снятие ноты на тринадцатом канале

В режиме "Running Status" если статус-байт не был передан, то предполагается что он такой-же как и в предыдущем сообщении. Использование "Running Status" в комплекте с заменой сообщения NoteOff на NoteOn с нулевой динамикой позволяет значительно снизить нагрузку на соединение.

В миди каждая нота кодируется двумя сообщениями: о взятии ноты (NoteOn - генерируется в момент нажатия клавиши синтезатора) и о снятии ноты (NoteOff - в момент отпускания клавиши ).

В Delphi это выглядит примерно так:

Uses ... mmSystem;
...
var
Form1 : TForm1;
hMidi :integer;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
midiOutOpen(@hmidi, 0, 0, 0, 0); //открытие миди-выхода
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
midiOutShortMsg(hmidi,$7F3C90); //Взятие(90) 60-й (3С) ноты но первом канале (90) с динамикой (громкостью ) 128 (7F);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
midiOutShortMsg(hmidi,$3C80); //отпускание (80) 60-й (3С) ноты но первом канале (80)
end;

Список статус-байтов:
Статус-байт Значение
8n Отпускание ноты (NOTE OFF)
9n Взятие ноты (NOTE ON)
An Давление клавиши в полифоническом режим (POLYPHONIC KEY PRESSURE)
Bn Смена режиима управления (CONTROL CHANGE)
Cn Смена программы (инструмента) (PROGRAM CHANGE)
Dn Манипулятор высоты тональной перестройки (PITCH BEND)
En Чувствительность после нажатия (CHANNEL PRESSURE)
F Привилегированные сообщения (SYSTEM EXCLUSIVE)
*n- номер канала 0-F
Из всего этого нам скорее всего понадобяться только 8n 9n и Cn


Автор: Mo-skin(c) ,
URL: last.h16.ru - Технологии программирования миди.
Публикация данной статьи разрешается только при указании ссылки на сайт автора!


 Bash.org.ru:

 Реклама:

 ©Copyright:
http://www.last.h16.ru - программирование миди. Идея, разработка и поддержка : Mo-skin © 2006-2007
X