Утилита для упрощения ввода текста на PC3/PC3K

  • Автор темы Автор темы Alex_V
  • Дата начала Дата начала

Alex_V

Active Member
12 Апр 2017
485
231
43
В общем, наваял тут мелкую утилитку для упрощения ввода текста на курцах серий PC3/PC3K.
Будет полезной при вводе названий программ, описаний контроллеров, строк в поиске.
Работает только при включенном Buttons Mode (напомню, что в этом случае PC3 при нажатиях кнопок на морде генерит специальные SysEx сообщения и отвечает на них).
Реализовано это дело в виде панели для Ctrlr.

Имеется два режима:
Send text - строка вводится в текстовое поле и по нажатию кнопки отправляется в синт.
Direct Input - нажатия кнопок клавиатуры отправляются в синт сразу. Также возможно управление курсором.

Проверялось только на моем PC3K,но должно работать и на PC3. Модель выбирается в настройках. Думается, что можно подкрутить и для работы с PC3A и PC3LE, но я не знаю идентификаторов моделей этих синтов и насколько совместим Buttons Mode с PC3.

До кучи думаю сейчас над реализацией Direct Input для Lemur, чтобы можно было со смартфона текст вбивать.

P.S. кроме как для ввода текста, утилиту использовать ни для чего другого не предполагается и не рекомендуется.
 

Вложения

  • Like
Реакции: -=SGA=-
Прикольно! А как этим пользоваться на маке, объясни плиз?
 
@-=SGA=-, маков в доступнсти нет ни одного. :( Можно, конечно, попытаться поднять виртуалку с макосью, но это отдельная песня и я даже не знаю, будет ли работать оттуда MIDI. Поэтому, пока могу только объяснить, как это все работает у меня.

1. Подразумевается, что нужно иметь установленный ctrlr ( www.ctrlr.org ). Причем, в самых последних версиях, говорят, что-то сломалось, я сам лично для винды использую 5.3.201.

2. На своем PC3K включаю Buttons Mode (параметр Master -> MAIN -> Buttons выставляется в On)

3. В ctrlr открываю панельку и в меню MIDI выставляю input и output на порты, куда подключен курц. Канал при этом не важен, т.к. работает это через System Exclusive

4. В настройках панели выставляю модель - PC3K и Unit ID. Unit ID должен совпадать с тем, который в курце выставлен в настройках MIDI -> RECV -> SysExId

5. При использовании подразумевается, что курц находится в каком-то из режимов, который требует ввода текста. Это либо поиск, либо редактирование какого-либо текстового параметра. Сама панелька никаких других действий кроме эмуляции нажатий кнопок и вращения колеса не производит.

Дальше все в зависимости от выбранного в панельке режима ввода - можно либо отправлять текст в виде строки, либо набирать непосредственно на клавиатуре.

Да, кстати, о птичках. Панелька обновлена. Кой-чего внутрях поправлено и переписано, добавлено определение модели синта. По идее должно работать также на PC3LE и PC3 (которые без К), но опять же, не проверялось, ибо негде. Обновленная версия лежит в папке на гуглодрайве.
Там же рядом версия для Lemur (файл PC3Kbd.jzml). От ctrlr версии отличается тем, что там пока нет определения синта и имеется только режим прямого ввода со встроенной в панельку экранной клавиатуры. Проверялось под лемуром на андроидном смартфоне при прямом подключении синта по USB .
 
на маке поставил контрл 5.3.198 - другой версии нет. Она панельку не открывает. Говорит формат неизвестный :(
 
Эмм...Видимо, придется поднимать виртуалку и смотреть, что получается...
 
Так... Раскопал виртуалку макоси. Какая-то не самая свежая - написано OS X 10.7 DP2. Взял с сайта ctrlr 5.3.198, открыл в виртуалке, там же открылась панелька:
macos.png
Прицепил синт, подцепилось, детект синта сработал, режим Send Text работает. С Direct Input пока всё плохо, непонятно почему.
 
  • Like
Реакции: -=SGA=-
С Direct input пока вот так: не работает обработка нажатий кнопок клавиатуры в компоненте ctrlr и результате в этом режиме любое нажатие клавиши приводит к ошибке. Возможно, что это какая-то проблема в самом ctrlr конкретно под макосью. А может дело и в виртуалке. Не имея доступа к полноценному маку сказать, увы, ничего не могу. :( Под виндой (7 и 10) все работает, как часы, но там версии ctrlr более свежие.
 
  • Like
Реакции: -=SGA=-
Странно. Так и не запустил. Кстати, а другие панельки как-то сразу идут с контролом в одной упаковке. А твою так можно сделать?
 
То, что идет "в одной упаковке" - это демки в исходном архиве. Мою, ясен пень, туда не закинуть. Тут вопрос в том, что может оно как-то криво скачивается? Я щас в папочку на гуглодрайве положил файлик в виде zip-а. Можно попробовать его скачать...
 
  • Like
Реакции: -=SGA=-
Не, не демки. Посмотри на контрое сайте панель управления лфо курца. Я скачал для мака, открылась сразу старая версия кнтрл с панелькой. Удобно. :)
 
Еще одна попытка сохранить в другом формате. В папку добавлен файлик PC3Kbd.bpanelz
 
  • Like
Реакции: -=SGA=-
Заработало! Панелька открылась PC3Kbd.bpanelz
(пока не тестил, погляжу вечерком)
 
Заработало! Панелька открылась PC3Kbd.bpanelz
Во! Это уже результат. Из этого я делаю вывод, что видимо под конкретной системой почему-то не воспринялся XML. Это странно, но другого объяснения я не вижу.

Да. Если будет попытка использовать Direct Input, то скорее всего будет вылетать ошибка. Во всяком случае, на виртуалке она вылетала всегда. Сделать с этим у меня ничего не получилось.
 
  • Like
Реакции: -=SGA=-
Почти победил проблему под эмулятором макоси. Чуть пожже выложу результат.
 
@-=SGA=-, вроде удалось победить. Под виртуалкой в макоси режим Direct Input заработал. Соответственно, в папке выложен обновленный файл PC3Kbd.bpanelz

И до кучи имеется вопрос. В режиме Direct Input под виндой для вставки и удаления символа используются комбинации клавиш Ctrl+Insert и Ctrl+Delete соответственно. Насколько я понимаю, на маке это во-первых будет называться как-то иначе, а во-вторых клавиши Insert там нет. Поэтому, хотелось бы узнать, какие комбинации лучше использовать для макоси.
 
Запутался и затестил предыдущий вариант. Текст шлет. Автодетект правда ничего не сказал. Может так и надо. Директ инпут не пашет. Ну это прошлая панелька. Так что, вернусь с тренировки и затестю новую.
Еще при посыле текста не понравилось что следующая порция добавляется к предыдущей, а не заменяет ее.
И вопрос. А можно курсорное управление всем курцем сделать, а не только текст? Ну прыгать по меню, энтер и эксит жать и тд.
 
Автодетект правда ничего не сказал.
Он говорить ничего не должен. Работает так: запрашивает модель синта и выставляет в поле то, что получилось. Что-то говорить оно начинает только если приходит что-то для программы неожиданное.


Еще при посыле текста не понравилось что следующая порция добавляется к предыдущей, а не заменяет ее.
По-другому - никак. Получить текущее значение возможности нет, плюс к тому, неизвестно, где находится курсор в данный момент. Собственно, в режиме Direct Input все гораздо проще и интерактивнее. Главное, чтобы он таки заработал. :)


И вопрос. А можно курсорное управление всем курцем сделать, а не только текст? Ну прыгать по меню, энтер и эксит жать и тд.
В теории, конечно, да но на практике не очень выйдет. Дело в том, что для полноценного управления нужно иметь полную документацию, но её нет ни у кого, кроме производителя. Ну, может, только в SoundTower имеют к ней доступ. А просто отправлять нажатия кнопочек смысла не имеет, т.к никогда не известно, в каком состоянии находится синт и к чему эти нажатия кнопок приведут.

Единственное, на что я сам лично пока готов замахнуться - нечто типа софтины, которая будет работать в качестве внешнего контроллера, с поиском и переключением программ (возможно, сетапов), управлением MIDI параметрами. Копаю в данном направлении, но это не быстро и не на ctrlr, а на Python. Затачивать буду изначально на работу с планшета.
 
  • Like
Реакции: -=SGA=-
тоже самое - ошибка при любом нажатии любой клавиши
[DOUBLEPOST=1522147208][/DOUBLEPOST]текст посылает - уже неплохо :)
 
Вы уверены, что ctrlr открывает новый файл? у него есть особенность - он запоминает все предыдущие открытые файлы. Принудительно закройте в нем все открытые панели и откройте файл заново.
На всякий случай. Откройте LUA Editor (Panel -> Lua Editor) и в списке слева щелкните два раза на KeyDownHandler.
Там должно быть вот это:
Код:
recode = {
["`"]="~",
["1"]="!",
["2"]="@",
["3"]="#",
["4"]="$",
["5"]="%",
["6"]="^",
["7"]="&",
["8"]="*",
["9"]="(",
["0"]=")",
["-"]="_",
["="]="+",
["["]="{",
["]"]="}",
[","]="<",
["."]=">",
["/"]="?",
[";"]=":",
["'"]="\"",
["\\"]="|"
}
function getTextCharacter(code, shift)
  
    if code < 0xFF then
        t = string.char(code)
        console(t)
        if shift == false then
            return string.lower(t)
        else
            r = recode[t]
            if r ~= nil then
                return r
            else
                return t
            end
        end
    end
    return string.char(0)
end
KeyDownHandler = function(--[[ CtrlrComponent --]] comp, --[[KeyPress --]] keyEvent, --[[ Component --]] originatingComponent)
    if panel:getRestoreState() == true or panel:getProgramState() == true then
        return
    end
    local IsCtrlDown = keyEvent:getModifiers():isCommandDown();
    local IsShiftDown = keyEvent:getModifiers():isShiftDown();
    local desc = keyEvent:getTextDescription()
    local code = keyEvent:getKeyCode()
    local c = getTextCharacter(code,IsShiftDown)
    if code == KeyPress.leftKey then
        --left
        SendKurzweilKey(0x12)
    elseif code == KeyPress.rightKey then
        --right
        SendKurzweilKey(0x1A)
    elseif desc == "ctrl + delete" then
        --del
        SendKurzweilKey(0x02)
    elseif desc == "ctrl + insert" then
        --insert
        SendKurzweilKey(0x0A)
    elseif code == KeyPress.backspaceKey then
        --backspace
        SendKurzweilKey(0x12)--left
        SendKurzweilKey(0x02)--del
    elseif code == KeyPress.escapeKey then
        --Esc
        SendKurzweilKey(0x2A)--cancel
    elseif code == KeyPress.returnKey then
        --Enter
        SendKurzweilKey(0x22)--OK
    elseif c ~= string.char(0) then
        SendString(c)
    end
end
 
  • Like
Реакции: -=SGA=-
В общем работает :) Код окзался другим, Вставил его, сохранил с компиляцией, переоткрыл и все заработало. проверил несколько раз. Директ удобен! не работает только контрол+инсерт - остальные команды все работают ок. Классно! Очень удобно! Спасибо!
 
В общем работает Код окзался другим, Вставил его, сохранил с компиляцией, переоткрыл и все заработало.
Значит все-таки увы, открывался старый файл. Потому, что в новом гарантировано другой код (причем, я там на самом деле еще кой-чего подкручивал). Что-то там не то происходит у вас с файликами.


Директ удобен!
В общем-то ради него все и делалось. А первый режим, он больше тестовый и не завязан на обработку клавиатуры.


не работает только контрол+инсерт - остальные команды все работают ок.
На виртуалке это тоже не работало нормально. Вот потому у меня и был вопрос. Насколько я в курсе, на маке не везде есть клавиша insert и в результате оно не факт, что заработает. Но можно приделать другую комбинацию клавиш на это. Вопрос - какую? Я видел, что под виртуалкой нажатие на Ctrl+insert дает некий код клавиши и я могу прикрутить его обработку, дело пяти минут, но у меня виртуалка под виндой и не факт, что на реальном маке будет вообще такая клавиша на клавиатуре.
 
Над делете на клаве есть кнопка хелп (может ее код указать)
 
Над делете на клаве есть кнопка хелп (может ее код указать)
Так... На винде у меня такой кнопки нет. :( Но можно узнать её код.

1. Надо взять из моего каталога панельку "DEMO - Keyboard events.panel" (она же прямой ссылкой)

Она же есть на гитхабе разработчика ctrlr.
2. Открыть её в ctrlr и ткнуть мышой на бордовый квадрат.
3. Нажать нужную клавишу, там появится некий текст. Если текст не появляется, значит ctrlr эту кнопку не воспринимает. На винде он, например, не понимает кнопку delete.
4. Этот текст можно вписать прямо вместо строки ctrl + insert в приведенный ниже фрагмент кода из обработчика нажатий кнопок
Код:
elseif desc == "ctrl + insert" then
--insert
SendKurzweilKey(0x0A)
elseif code == KeyPress.backspaceKey then
Ну, или мне сообщить, а я уже докручу.
 
  • Like
Реакции: -=SGA=-

Сейчас просматривают