staba писал(а):Про логику работы я вам уже ответил, вот только хранить данные у себя не нужно, пусть этим софт занимается, а ваш пульт только будет отдавать значение инкремента или декримента определённого канала.
сегодня весь день ковырялся - не вышло (не исключено что чего то не знаю или не так делаю,
плюс долго ловил глюки в кривом дескрипторе - пока не отловил)...
очень давно прошу пояснения по командам... пока пояснения так и не добился...
4) Какие значения управляющих байтов в пакете оптимально использовать под свои энкодеры, кнопки и файдеры?
В MIDI-DJ-CJ-CONTROLLER-2 были задействованы B0 5A 3C = Control90 60, B0 5B 01 = ReverbDepth 1 и т.д.
на данный момент о командах на поворот энкодера знаю только это.
Код: Выделить всё
if (En == 2) { // энкодер влево
midiMsg[iii++] = 0x0b;
midiMsg[iii++] = 0xb0+(midiPst[13] & 0x0F); // chanel
midiMsg[iii++] = midiPst[13+0x10]; // control#
midiMsg[iii++] = 0x00;
freeslot--;
}
if (En == 1) { // энкодер вправо
midiMsg[iii++] = 0x0b;
midiMsg[iii++] = 0xb0+(midiPst[13] & 0x0F); // chanel
midiMsg[iii++] = midiPst[13+0x10]; // control#
midiMsg[iii++] = 0x7F;
freeslot--;
}
Программа qlcplus для миди формата имеет 3 режима
Input - вход от устройства
Output - ДМХ выход (но только на 128 каналов и каналы и ползунки это совсем разные категории)
Feedback - обратная связь (повернули файдер программно в девайс прилетело значение поворота)
Программа qlcplus отправляет команды
Для режима Channel=1, Mode=Note Velocity, InitMessage=None
09 90 01 29 00 00 00 00
01 - номер канала (первый канал = 00, а так от 00 до 7F - выше не пашет, причем 7F=128каналу)
29 - значение канала (от 00 до 7F)
90 - это Channel=1
91 - это Channel=2
99 - это Channel=10
9F - это Channel=16
Для режима Channel=1, Mode=Control Change, InitMessage=None
0B B0 01 29 00 00 00 00
01 - номер канала (первый канал = 00, а так от 00 до 7F - выше не пашет, причем 7F=128каналу)
29 - значение канала (от 00 до 7F)
B0 - это Channel=1
B1 - это Channel=2
B9 - это Channel=10
BF - это Channel=16
Для режима Channel=1, Mode=Program Change, InitMessage=None
0C C0 01 00 00 00 00 00
01 - номер канала (первый канал = 00, а так от 00 до 7F - выше не пашет, причем 7F=128каналу)
А вот значение он вообще не возвращает....
С0 - это Channel=1
С1 - это Channel=2
С9 - это Channel=10
СF - это Channel=16
ПРОБЛЕМА В ТОМ, ЧТО 0B B0 01 00 00 00 00 00 СОВПАДАЕТ С КОМАНДОЙ - "энкодер влево"
вот только программа qlcplus не воспринимает это как енкодер, а как канал номер 2 (01 в пакете) в значение 00
staba писал(а):Какие вам угодно, главное чтоб ваша программа их понимала.
А ЧТО ЕСТЬ СТАНДАРТНОГО?
staba писал(а):Если на одном канале будет энкодер и фейдер, то может произойти ситуация подобно той, что вы описали. К примеру фейдер стоит в нулевом положении, энкодером измените значение к примеру до 120, а дернув фейдер значение канала опять вернётся к нулю, и произойдёт резкий скачёк.
Если все пойдет так как идит, то на один канал получится:
1) один файдер
2) два светика – зеленый = значение из компа соответствует файдеру и красный = значение из компа
НЕ соответствует файдеру
3) энкодер для плавного регулирования пришедшего из компа значения
4) две кнопки Max Min для быстрого переключения
5) осталась кнопка в энкодере.... пока не знаю под что заюзать...