Использование клавиатуры пианино в качестве клавиатуры компьютера [закрыто]

727

У меня проблемы с RSI, и я пробовал 30 разных компьютерных клавиатур, которые причиняли мне боль. Игра на пианино не причиняет мне боли. Я играл на пианино около 20 лет без каких-либо проблем с болью. Я хотел бы знать, есть ли способ захвата MIDI с клавиатуры MIDI и вывода ударов клавиатуры. Я вообще ничего не знаю о MIDI, но мне хотелось бы получить несколько советов о том, как преобразовать этот сигнал в нажатие клавиши.

Peter Mortensen
источник
зачем захватывать миди, если можно использовать клавиатуру синтезатора в качестве клавиатуры?
Шевский
@I__: Какую операционную систему вам нужно поддерживать? Это, вероятно, будет иметь значение.
TJ Crowder
5
@shevski: Я ничего не пытаюсь сделать, @I__ - человек, задающий вопрос. Он / она не хочет конвертировать звук , а скорее сигналы событий цифровой клавиатуры, посылаемые электронными клавиатурами через цифровой интерфейс музыкальных инструментов . Это очень похоже на события на компьютерной клавиатуре: «Note on» хорошо соответствует нажатию клавиши, «note off» - нажатию клавиши и т. Д. Вы даже можете использовать данные о скорости для выполнения различных действий в зависимости от того, насколько «громко» звучит аккорд. Я люблю эту идею.
TJ Crowder
34
Если вы заставите это работать, вы можете кодировать, используя любое устройство midi. Вероятно, это требует некоторой практики, но использование оркестра в качестве команды разработчиков должно быть увлекательным.
Toon Krijthe
1
@I__: Наиболее одобренный ответ указывает вам на поддержку MIDI Java Sound API, которая должна помочь вам получать MIDI-данные, и описывает в деталях теорию, включающую превращение этого в серию нажатий клавиш. Во втором ответе, получившем наибольшее количество голосов, говорится об очень жизнеспособном способе его подключения к компьютеру с помощью Arduino, включая ... (продолжение)
TJ Crowder,

Ответы:

16

Хорошая библиотека в .NET с полной поддержкой midi (BASS), перейдите на http://www.un4seen.com .

Что касается другой части, переводя нотные заметки на клавиатуре в клавиши и многое другое, я бы выбрал AutoItX, интерфейс ActiveX / COM и DLL для autoIt. Информация и загрузка, перейдите на http://www.autoitscript.com/site/autoit/

Не нужно писать драйвер клавиатуры.

Эль н
источник
430

Я не занимался программированием MIDI годами, но ваша фундаментальная идея очень здравая (без каламбура).

MIDI - это поток «событий» (или «сообщений»), два из самых фундаментальных из которых - «примечание включено» и «примечание выключено», которые несут с собой номер ноты (0 = C на пять октав ниже среднего C, через 127 = G на пять октав выше G над серединой C, в полутонах). Эти события несут число «скорость» на клавиатурах, которые чувствительны к скорости («чувствительны к прикосновению»), с силой (как вы уже догадались) между 0 и 127.

Между скоростью, звуком и педалями, я думаю, вы могли бы придумать довольно неплохой «набор текста» для клавиатуры пианино. В частности, запись может быть очень мощной техникой - как я уже упоминал в комментариях, именно поэтому рядовые стенографисты могут использовать машину с использованием стенотипа, чтобы не отставать от людей, разговаривающих часами подряд, даже если машинистки высшего звена этого не сделают. не может быть в течение любого промежутка времени с помощью обычных клавиатур в стиле пишущей машинки. Как и в случае с машинной стенографией, вам понадобится «словарь» значений аккордов и последовательностей аккордов. (Можете ли вы сказать, что я работал в программной части машинной стенографии?)

Чтобы сделать это, основные части:

  • Получение MIDI-входа. Не пытайтесь сделать это самостоятельно, используйте библиотеку. Редактировать : Очевидно, Java Sound API поддерживает MIDI , включая получение событий от контроллеров MIDI. Круто. Эта страница также может быть полезной.
  • Преобразование этих данных в нажатия клавиш, которые вы хотите отправить, например, через словарь, который я упомянул выше.
  • Вывод нажатий клавиш на компьютер.

Чтобы быть наиболее совместимым с программным обеспечением, вы должны написать это как драйвер устройства клавиатуры. Это плагин для операционной системы, который служит источником событий клавиатуры, общаясь с базовым оборудованием (в вашем случае, клавиатурой пианино). Для Windows и Linux вы, вероятно, захотите использовать C для этого.

Однако, поскольку вы просто генерируете нажатия клавиш (не пытаясь перехватить их, что я пытался сделать несколько лет назад), вы можете использовать любые функции операционной системы для отправки искусственных нажатий клавиш. В Windows есть интерфейс для этого (возможно, несколько, тот, о котором я думаю, SendInputно я знаю, что есть какой-то «журнальный» интерфейс, который делает нечто подобное), и я уверен, что другие операционные системы делают то же самое. Этого вполне может быть достаточно для ваших целей - это то, с чего я начну, потому что маршрут драйвера устройства будет неудобным, и вам, вероятно, придется использовать для него другой язык, чем Java. (Я большой поклонник Java, но интерфейсы, которые операционные системы используют для общения с драйверами устройств, как правило, легче использовать через C и тому подобное.)


Обновление : Подробнее о «словаре» аккордов для нажатия клавиш:

По сути, словарь - это три (спасибо, @Adam), который мы ищем с соответствием по длинному префиксу. Подробности:

В машинной стенографии стенографист пишет, нажимая одновременно несколько клавиш на машине стенотипа, затем выпуская их все. Они называют это «ударом» клавиатуры; это как играть аккорд на пианино. Удары часто (но не всегда) соответствуют слогу разговорной речи. Подобно слогам, иногда один удар (аккорд) имеет значение само по себе, в других случаях он имеет значение только в сочетании с последующими штрихами. (Думайте «хорошо» против «хорошо», а затем «пока»). Хотя они будут находиться под сильным влиянием школы, в которой они учились, у каждого стенографа будет свой «словарь» того, какие штрихи они используют для обозначения чего, словарь, который они будут постоянно оттачивать в течение своей трудовой жизни. В словаре будут записи, в которых стенографическая часть (сокращенно «steno») имеет длину одного хода или длину нескольких ходов. Часто будет несколько записей с одинаковым начальным ходом, которые различаются по длине и последующим ударам. Например (и я не буду использовать реальное стено здесь, только заполнители), могут быть эти записи:

A = альфа
A / B = алфавит
A / B / C = буквенный
A / C = кондиционер
B = пчела
B / C = потому что
C = море
D = собака
D / D = Ди Ди

(Эти буквы не предназначены для музыкальных нот, просто абстрактные маркеры.)

Обратите внимание, что Aначинается несколько записей, а также обратите внимание, что способ перевода Cштриха зависит от того, видели ли вы ранее a A, a Bили вы начинаете заново.

Также обратите внимание, что (хотя это не показано в очень небольшом примере выше), может быть несколько способов «воспроизвести» одно и то же слово или фразу, а не только один. Стенографы делают это, чтобы облегчить переход от предыдущего слова к следующему в зависимости от положения руки. Там есть очевидная аналогия с музыкой, и вы можете использовать ее, чтобы сделать процесс набора текста более похожим на воспроизведение музыки, чтобы не допустить, чтобы это отрицательно сказалось на игре на пианино, и максимально увеличить вероятность того, что это действительно поможет с RSI.

При переводе steno в стандартный текст мы снова используем поиск «поиск по самому длинному префиксу»: алгоритм перевода начинается с первого написанного штриха и ищет записи, начинающиеся с этого штриха. Если есть только одна запись длиной в один штрих, то мы можем с уверенностью сказать «это запись, которую нужно использовать», вывести соответствующий текст, а затем начать заново со следующего удара. Но, скорее всего, этот штрих запускает несколько записей разной длины. Итак, мы смотрим на следующий штрих и видим, есть ли записи, начинающиеся с этих двух штрихов по порядку; и так до тех пор, пока мы не получим совпадение.

Итак, со словарем выше, предположим, что мы видели эту последовательность:

ACBBCABCABD

Вот как мы могли бы перевести это:

  1. Aявляется началом трех записей различной длины; посмотрите на следующий штрих:C
  2. A/Cсоответствует только одной записи; Выведите «кондиционер» и начните заново со следующего хода:B
  3. Bначинается две записи; посмотрите на следующий штрих:B
  4. B/Bничего не запускается; возьмите самый длинный предыдущий match ( B) и выведите это ("пчела")
  5. Имея output B= "bee", у нас все еще есть Bштрих в нашем буфере. Он запускает две записи, поэтому посмотрите на следующий штрих:C
  6. B/Cсоответствует одной записи; выведите «потому что» и начните заново со следующего удара:A
  7. Aначинается три записи; посмотрим на следующий штрих:B
  8. A/Bначинается две записи; посмотрите на следующий штрих:C
  9. A/B/Cсоответствует только одной записи; выведите «буквенный» и начните заново со следующего удара:A
  10. Aначинается три записи; посмотрите на следующий штрих:B
  11. A/Bначинается две записи; посмотрите на следующий штрих:D
  12. A/B/Dничего не совпадает, поэтому возьмите самый длинный предыдущий match ( A/B) и используйте его для вывода «алфавита». Это оставляет нас Dв буфере.
  13. Dзапускает две записи, поэтому мы обычно просматриваем следующий штрих - но мы обработали все штрихи, поэтому рассмотрим его изолированно. В отдельности это переводится как "собака", поэтому вывод, что.

Аспекты вышесказанного отметить:

  • У вас есть буфер штрихов, которые вы прочитали, но еще не перевели.
  • Вы всегда хотите сопоставить наибольшее количество ударов с одной записью, которую вы можете. A/Bследует переводить как «алфавит», а не «альфа» и «пчела».
  • (Не показано выше) У вас вполне могут быть последовательности штрихов, которые вы не можете перевести, потому что они не совпадают с чем-либо в словаре. (Люди Steno используют существительное «непереведенный» - например, в нашем словаре штрихи Eбудут «непереведенными».)
  • (Не показано выше) Некоторые теории steno допускают, чтобы один и тот же набор штрихов означал более чем одну вещь, основываясь на более широком контексте. Стено люди называют эти «конфликты». Вы, вероятно, хотите запретить их в своем проекте, и на самом деле, когда стенографист переводил steno вручную, конфликты были хорошими, потому что они знали бы только, где в предложении они были, каков был правильный выбор, но с ростом машинного перевода, бесконфликтные теории steno возникли специально, чтобы избежать необходимости просматривать полученный переведенный текст и «исправлять» конфликты.
  • Перевод в реальном времени (что вы и делаете) означает, что если вы получите частичное совпадение, вы захотите удержать его в ожидании следующего аккорда - но, вероятно, только до тайм-аута, в этот момент вы бы переведите то, что у вас есть в буфере, как можно лучше. (Или, может быть, вы не хотите тайм-аут; это ваш звонок.)
  • Вероятно, лучше всего иметь инсульт, который говорит «не обращать внимания на предыдущий инсульт»
  • Вероятно, лучше всего иметь штрих, который говорит: «полностью очистить буфер, ничего не выводя»
TJ Crowder
источник
6
@I__: Некоторые программы пытаются общаться напрямую с клавиатурным устройством и поэтому не очень хорошо работают с интерфейсами, похожими на «sendkeys». Надеюсь, сейчас это встречается реже, чем несколько лет назад, когда я в последний раз имел дело с этим, и поэтому, как я уже сказал, я бы начал с механизмов, подобных «sendkeys», и беспокоился о других только тогда, когда это было необходимо. (Вероятно, лучше всего выполнить быструю программу тестирования отправки ключей [самостоятельно, а не путем их получения из MIDI] - включая специальные последовательности клавиш - и затем проверить это с помощью программного обеспечения, которым вы хотите управлять, прежде чем идти слишком далеко по пути. .)
TJ Crowder
7
Для тех, кто никогда не слышал об этом, словарь, который вы описываете, в основном является три (произносится «попробуй»)
Адам
14
@I__: Интересно написать сейчас, чтобы сказать это. Что вы еще хотите? Я думаю, что я рассмотрел многие важные аспекты того, что вам нужно сделать. Я не делал этого и не указывал ни на кого, потому что у меня есть другие дела, и я не знаю заранее готового решения. Но с точки зрения выработки решения, я думаю, я указал вам верное направление.
TJ Crowder
2
Обратите внимание, что вы можете заклинить все аккорды в линейный массив и выполнять обход каждый раз, когда получаете событие midi, и при этом не испытывать заметного замедления. Использование trie слегка пахнет преждевременной оптимизацией.
FeepingCreature
5
@FeepingCreature: Когда я делал это со стенографистами и придворными репортерами, их словари могли легко работать с сотнями тысяч записей (я помню того, кто преодолел отметку в миллион). В использовании оптимизирующей стратегии не было ничего преждевременного, мы имели дело с 12 МГц 386 с. В случае ___, если он согласится с идеей Arduino (которая является действительно классной идеей), он тоже будет иметь дело с довольно слабым оборудованием для современной эпохи, хотя, конечно, вещи смехотворно быстрее, чем у нас. Я думаю, что его словарь будет значительно меньше, но ...
TJ Crowder
184

Подумайте о том, чтобы сделать что-то на оборудовании, которое эмулирует USB (или PS / 2?) Клавиатуру. Вы больше не будете зависеть от конкретной ОС или API конкретной ОС. Аппаратное решение выдержит испытание временем. Не зацикливайтесь на использовании старого API в Windows 7, когда все остальные работают под управлением Windows 11! Arduino довольно прост в освоении.

Существует масса информации и помощи для Arduino. Это аппаратная платформа для взлома, созданная для новичков. Он станет больше только сейчас, когда Google продвигает Arduino.

РЕДАКТИРОВАТЬ: Виртуальная клавиатура USB программного и аппаратного обеспечения

Брайан О'Делл
источник
Мне нравится идея использовать Arduino для этого. Память может быть проблемой, хотя. Похоже, что самые большие предварительно разработанные платы имеют 256 Кбайт Flash (из которых 8 Кб используются загрузчиком). В свое время мы втиснули в реальном времени перевод / отображение / редактирование сокращений машины в 1M под DOS (например, обычный 640k плюс EMS или расширенную память), но мы писали жесткий C-код и сборку и словарь (который мог легко быть> 250к сам по себе) был на диске. Здесь нет отображения или одновременного редактирования, так что это хорошо, но словарь должен быть небольшим ...
TJ Crowder
О, это ничего. Я обычно имел дело с придворными журналистами, у которых были словари, которые, даже сохраненные в очень компактной форме, имели размер несколько мегабайт. Самым большим, что я лично видел, было 4,5 МБ - и опять же, это было в очень сжатой форме. Объедините это с тем фактом, что на клавиатуре Steno меньше клавиш, чем на клавиатуре пианино ... Тем не менее, Arduino имеет порт USB, поэтому словарь может быть на USB-флеш-адаптере или даже на внешнем источнике питания. ) SSD или HDD.
TJ Crowder
2
@ Вы, возможно, захотите рассмотреть для подростка вместо arduino ( pjrc.com/teensy ) значительно больше памяти и можете напрямую эмулировать клавиатуру. Он уже совместим со многими библиотеками Arduino, а несовместимые просто требуют переназначения выводов. - поочередно, atmega также делает демонстрационную плату, которая имеет 16 МБ встроенной флэш-памяти и стоит около $ 30 (at90usbkey)
Marc
8
Разработка полезного интерфейса пианино для компьютера - задача не из легких. ИМХО, ОП должен сначала прототипировать его в его / ее текущей среде, а затем, ЕСЛИ это удовлетворяет его / ее потребностям, беспокоиться о переносимости. Если, конечно, портативная альтернатива не будет заметно сложнее.
Эмилио М Бумачар
111

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

MIDI Stroke

Бесплатно. Для Mac OS X 10.3 и выше . Этот, в частности, поставляется с «возможностью использовать любую MIDI- клавиатуру в качестве полноценной замены компьютерной клавиатуры».

MIDI переводчик Bome

Бесплатно / Открытка (это немного странно). Для Windows 2000 и выше, а также Mac OS X . Изначально он кажется более ориентированным на использование типа AutoHotkey , но если посмотреть дальше, я думаю, что он может делать то, что вы хотите, приятно.

Макс и aka.keyboard

Бесплатно. Для Mac OS X . Не совсем готовое решение, но если вам удобна базовая конфигурация устройства, оно не должно быть слишком плохим.

kathryn
источник
49

Вы можете получить доступ к оборудованию с примерами исходного кода в .NET в MIDI DotNet .

Полный рабочий пример исходного кода для создания потока данных MIDI-нот приведен в VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, где-то тоже версия .NET)

Способ имитировать нажатия клавиш в VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, где-то тоже версия .NET)

А распознавание нажатий клавиш описано в Tipp-Upload: VB.NET 0266: Globaler KeyHook .

Введите описание изображения здесь

Тогда просто используйте хорошую рабочую матрицу для пианиста Тимо Беме www.goldengel.ch

На пианино и когда вы хороший игрок, у вас может быть 10 пальцев на клавиатуре, и если матрица пригодна для использования, вы можете быть намного быстрее, чем любой пользователь компьютерной клавиатуры, я думаю. :-)

В том случае, если я правильно понимаю ваш вопрос, это не должно быть большой вещью.

Nasenbaer
источник
41

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

Вы можете довольно быстро добиться этого в Linux, используя графический язык программирования для мультимедийных исполнителей " Pure Data " вместе с x11key external от Alex Andre .

На Mac вы можете использовать MidiStroke . Я полагаю, что метод в Windows задействовал инструменты MidiOx и AutoHotKey . В другой раз у меня была версия, использующая плагин Java для Max / MSP . Я полагаю, что Патрис Коле сделал окна для Pure Data внешними, которые также сработали, но я не могу найти их больше. Кроме того, есть внешний MaxMSP, который может сделать это в Windows. Наконец, несвободный, но потрясающий Osculator может делать то, что вы хотите - см. Страницу функций.

Когда я работал, я никогда не зацикливался на этом, потому что не мог перестать работать с макетом. Было здорово, если бы у меня был электрический монитор на электрической клавиатуре! Удачи.

Peter Nore
источник
37

О MIDI

Вы заявили, что «вообще ничего не знаете о MIDI». Технология MIDI довольно проста, как только вы ее освоите, но с самого начала она может сбить с толку. Одним из ресурсов, который мне чрезвычайно помог в понимании основ MIDI (которые, безусловно, необходимы, если вы хотите программировать взаимодействия MIDI), является книга под названием MIDI для Technophobe . Это простая книга для чтения и очень полезная.


Чистые данные и Макс

По своему опыту разработки интерактивных мультимедиа я столкнулся с двумя очень похожими программами, которые облегчают подключение и отображение сигналов / входов с любого устройства.

Это Max для среды Mac и Pure Data для среды ПК. У обоих есть множество онлайн-документации и учебных пособий по YouTube. Видео Max / MSP Tutorial 1 - использование клавиатуры компьютера в качестве миди-клавиатуры (стиль ableton) демонстрирует встроенную в Max программу, которая отображает клавиатуру компьютера на входы MIDI-клавиатуры (что в сущности является полной противоположностью тому, что вы пытаетесь сделать). Вы можете получить ожидаемые результаты, используя тот же шаблон, но поменять местами сигналы / отображения.


AutoHotKey

AutoHotKey - это бесплатная утилита с открытым исходным кодом для Windows, которая позволяет переназначать клавиши и кнопки на ваших устройствах в макросы. Он изначально поддерживает QWERTY-клавиатуры, джойстики и мышиные макросы.

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

  1. Поддержка MIDI IN в AutoHotkey , обсуждение варианта использования. Автор искал программу, которая могла бы обнаружить вход MIDI IN и преобразовать его в нажатия клавиш .

  2. Библиотека ввода MIDI , решение проблемы автора и опубликованный код / ​​патч для AutoHotKey, который фактически реализует ваш намеченный результат.

По сути, похоже, что AutoHotKey вместе с пользовательским патчем этого пользователя предоставит именно то, что вам нужно для создания сопоставления с клавиатуры MIDI и входного сигнала клавиатуры QWERTY. Все, что вам нужно сделать, это установить, настроить и определить ваши сопоставления.


Что-нибудь еще?

Некоторые из других ответов дали вам гораздо более обширную информацию о MIDI и MIDI-программировании в целом, но, как говорится в вашем посте, это не совсем то, что вы ищете. Я хотел бы помочь вам больше, если это возможно, но было бы проще, если бы вы могли более точно определить тип информации, которую вы ищете. Например, вас больше интересует, как преобразовать входные сигналы MIDI-клавиатуры в сигналы QWERTY- клавиатуры , или ваш основной интерес заключается в поиске готового решения вашей конкретной проблемы? Что вы ищете, что еще не решено?

smartcaveman
источник
27

Вы можете довольно быстро взломать собственную USB-клавиатуру с помощью микроконтроллера Teenys.

На самом деле, у них есть пример кода для того, как сделать клавиатуру USB .

Вы можете подойти к этому двумя способами:

  1. Получить старое пианино и подключить переключатели прямо к подростку

  2. Добавьте дополнительную логику для подключения к порту MIDI и необходимое декодирование.

cmcginty
источник
Это самый многообещающий ответ, потому что, как только вы укомплектуете устройства, они будут работать на любом компьютере и любой ОС. Возьмите его в работу или просто будьте счастливы, что вы можете обновить свой компьютер, не беспокоясь о клавиатуре. Я бы использовал два устройства Teensy и соединил их вместе со своими выводами ввода / вывода. Так как Teensy уже поддерживает USB MIDI pjrc.com/teensy/td_midi.html, вашему коду нужно просто позаботиться о перемещении сигналов между клавиатурой и средой.
Майкл Диллон
24

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

Удачи в любом случае.

Брендан
источник
23

Попробуйте MIDI-переводчик Bome .

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

Существует краткое руководство : MIDI Translation - MIDI to Keystrokes , о том, как его легко настроить:

По сути, есть бесконечные возможности того, что вы можете сделать, в том числе клавиши редактирования и изменения. Я использую его для своей живой аудиосистемы, чтобы управлять моей DAW, используя мое пианино, и у меня никогда не было проблем.

stepheninohio
источник
18

В Java вы можете использовать JMF (Java Media Framework) для преобразования MIDI-сигналов. Основы дизайна клавиатуры просты в использовании, то есть пользовательский интерфейс; и поместите часто используемые символы / символы под рукой.

Пример кода и API в Java Sound Resources: Примеры: цифровая обработка сигналов (DSP) помогают понять, как обрабатывать сигнал.

Еще несколько ссылок:

Камахир
источник
15

Есть программа под названием GlovePIE . Вы можете запрограммировать его на простом языке сценариев, и я считаю, что он поддерживает MIDI. Я не уверен, подходит ли это под категорию «Java», но, тем не менее, это отличная программа. Я использовал его для управления роботами с помощью контроллеров PS3 . Это очень мощно.

Peter Mortensen
источник
15

Многие клавиатуры имеют разъем последовательного порта ( RS-232 ) для отправки MIDI-сигналов на компьютер. Я использую программу Girder для преобразования связи через последовательный порт в нажатия клавиш.

Girder имеет функцию «сопоставления», которая позволяет вам сопоставлять каждый ключ, один за другим, с соответствующим нажатием клавиши.

Это может быть простое решение, которое вы ищете!

Скотт Риппи
источник
12

Просто изучите стенографию!

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

К счастью, проблема была решена и отточена, хотя веками назревали ...

Учитесь стенографии!

Да, это отбросит вас назад. Но сколько стоят сотни часов вашего собственного времени, что в итоге дает менее благоприятный результат? Кроме того, в статье о стенографии в Википедии говорится, что «это больше похоже на клавиатуру пианино».

Если, конечно, вам не нужен побочный эффект. Я должен был признать, я никогда не думал об этой возможности, это было бы действительно интересно видеть, как кто-то выбил текст с клавиатуры пианино!

Вы можете начать с клавиатуры USB с сенсорной панелью (или указатель будет более эргономичным?), Использовать Plover для его перевода (я уверен, что его можно настроить так, чтобы не буквенные клавиши сохраняли свою функциональность, поскольку они важны для программирование), или, следуйте нити Re: Plover клавиатура, чтобы накатить свою собственную USB-клавиатуру для стенографии, или, купить стенотип .

Удачи!

FastAl
источник
Где {и} на клавиатуре стенографии? Как вы собираетесь вводить имена, которые не являются словами, как pthread?
Бобобобо
Ссылка на Википедию неверна и должна быть en.wikipedia.org/wiki/Stenography
joelhoro
11

Посмотрите на аркадные игры MAME . Они создали аппаратные устройства, позволяющие вводить данные из любого количества различных предметов. IPAc , например, преобразует сигналы от устройств ввода в USB , что компьютер может затем использовать для эмуляции клавиш. Вы можете использовать любую комбинацию устройств ввода, расположенную любым удобным для вас способом, не требуя сумасшедшей логики программирования - поскольку программное обеспечение для интерпретации ввода уже выполнено и хорошо протестировано.

Я видел входы в кабину симулятора полета, специальные киоски и системы голосования, встроенные в этот метод ..... и цена подходящая!

bpeterson76
источник
10

Для решения этой проблемы вам понадобится несколько вещей:

  1. Способ захвата данных MIDI с вашей клавиатуры. В зависимости от интерфейса: MIDI-интерфейс (классический) или USB- MIDI-интерфейс (современный) наиболее вероятным интерфейсом является компьютер, поскольку он предоставляет наибольшее количество опций. Микроконтроллеры USB-хоста не так просты, как просто использование компьютера.

  2. Схема для преобразования MIDI-данных в нажатия клавиш. Как заметил один пользователь, аккорды - это путь, так как количество клавиш не будет зависеть от количества клавиш пианино.

  3. Способ ввода ключа в операционную систему. Для этого потребуется драйвер низкого уровня, чтобы быть точным. Я поиграл с приложениями, которые вводят данные клавиатуры и мыши в приложения в Windows 7, и они могут быть нестабильными и зависеть от того, находится ли приложение в фокусе. Это самая сложная часть интерфейса. Что может сработать, так это создать микроконтроллер HID USB с последовательным интерфейсом.

Последовательный интерфейс создаст виртуальный последовательный порт. Программное обеспечение, которое считывает данные MIDI и производит нажатия клавиш, может отправлять последовательное сообщение на виртуальный последовательный порт. Микроконтроллер посылает нажатие клавиши, чтобы оно выглядело как стандартный ввод с клавиатуры. Это позволило бы сопрягать как MIDI-порты, так и USB-MIDI-клавиатуры.

Хммм, с этим типом интерфейса вы также можете имитировать мышь и использовать некоторые настройки клавиш пианино для оси мыши и кнопок. Давление может быть использовано для определения скорости указателя мыши. Таким образом, вы могли бы также устранить мышь. Еще одно преимущество этого подхода - любой тип устройства ввода, которое вы подключаете, может взаимодействовать с виртуальным последовательным портом для получения событий клавиатуры и мыши. Поэтому, если вы хотите добавить другое оборудование, такое как барабанные педали или джойстик, нужно настроить программу, которая взаимодействует с последовательным интерфейсом.

Другой подход к описанному выше аналогичен рассмотренному выше использованию Arduino, но также включает USB Host Shield от Sparkfun для работы с музыкальными клавиатурами на основе USB. Это позволяет запрограммировать Arduino как комбинацию клавиатуры или мыши в микросхеме загрузчика и позволяет устройству выступать в роли USB- хоста для музыкальной клавиатуры на основе USB. Тогда вы покрыты для обоих типов. Хотя я все еще думаю, что метод виртуального последовательного порта является более гибким и будет проще программировать в долгосрочной перспективе. Устройство Arduino будет сложнее изменить, чем настольную программу или сервис.

Есть еще одна возможность: клавиатуры для одной руки уже существуют. Я видел видео на них, но вы должны были бы определить, повредили ли они ваши руки или нет.

Demolishun
источник
7

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

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

Как только вы получите сообщения, переводящие их, вывод на клавиатуру должен быть довольно простым из .NET.

В других ответах есть много советов по техническим вопросам; Я просто хотел дать вам представление о реальных MIDI-сообщениях. Удачи!

Simon Inns
источник
В качестве дополнительного примечания документ «Определение класса устройства универсальной последовательной шины для устройств MIDI» дает очень аккуратный обзор сообщений MIDI: usb.org/developers/devclass_docs/midi10.pdf
Simon Inns,
7

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

Если ваша звуковая карта не поддерживает MIDI I / O (входы / выходы / выходы), это не проблема. Вы можете рассмотреть возможность исследования и инвестирования во внешний настольный конвертер MIDI. Многие из них оснащены для дальнейшего преобразования MIDI-выходов в USB 2.0 (в обход существующей звуковой карты в целом).

Например: довольно сложно получить результаты «благодати», похожие на человеческие, с помощью клавиши изменения Z и X с помощью компьютерной клавиатуры и карандаша. Когда вместо этого ваши собственные пальцы могут просто играть на ней с помощью MIDI-клавиатуры из собственных диапазонов физических октавных регистров - немедленно!

Я понимаю, бюджетные ограничения могут быть связаны. Но некоторые из этих, казалось бы, дешевых октавных клавиатур типа «Casio», продаваемых в Radio Shack менее чем за 100 долларов США (* или меньше), - это все, что вам нужно (плюс некоторые из их встроенных звуковых патчей и секвенсоров звучат и работают). на удивление хорошо и для других вещей).

Опции RadioShack MIDI клавиатуры .

Что касается внешних MIDI-конвертеров для существующих звуковых карт, я провел несколько поисков в Google для вас, особенно с учетом платформ Mac:

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

Нет ничего плохого в том, чтобы использовать виртуальные клавиатуры как VST при использовании DAW . У них есть свое место.

Но вы звучите как опытный клавишник. Итак, почему бы не рассмотреть внешние варианты преобразования MIDI / клавиатуры, которые я только что упомянул для себя?

Удачи, и я надеюсь, что это дало вам некоторые идеи, которые могут и будут работать для вас!

Angshuman Bhattacharjee
источник
6

Если вы не хотите заниматься программированием самостоятельно, а просто хотите решить проблему, вы можете просто купить USB-MIDI-клавиатуру, где вы можете переназначить любую клавишу для отправки выходного сигнала клавиатуры QWERTY вместо MIDI-выхода, для пример M-Audio Axiom Pro

Этот метод будет работать с любой ОС и любым компьютером, который поддерживает стандартные USB-клавиатуры, поскольку MIDI-клавиатура будет идентифицировать себя как стандартная клавиатура QWERTY.

Мартин Одхелиус
источник
Знаете ли вы, можно ли было бы назначить аккорды для определенных нажатий клавиш? например, если я играю аккорд C MAJOR, могу ли я перевести его на «прыгнул лис»
l - '''''--------- '' '' '' '' '' ' '
Извините, что не отвечал так быстро, у меня был отпуск в течение 4 дней;) Нет, к сожалению, вы можете назначить только один QWERTY-код для каждой клавиши, так что он в значительной степени работает как стандартная клавиатура.
Мартин Одхелиус
Кстати, если вы покупаете один, просто не забудьте купить PRO-один, потому что я не думаю, что не-PRO-версия имеет функцию назначения QWERTY.
Мартин Одхелиус,
Я не думаю, что можно назначить аккорды ASCII-кодам, только один ключ на код, но я проверю это на своей собственной Аксиоме сегодня вечером, когда вернусь домой с работы.
Мартин Одхелиус,
Я только что заметил, что назначать qwerty коды можно только кнопкам управления (функциональные клавиши, ударные, цифровые клавиши и т. Д.), Но не клавишам пианино на клавиатуре. Я сам владею этой клавиатурой и был уверен, что можно назначить коды ASCII для любой клавиши, но теперь, когда я ее опробовал, я заметил, что это неправильно! Мне очень жаль, возможно ли как-то вернуть награду?
Мартин Одхелиус,
6

Вы можете использовать простой скрипт AutoIt для чтения событий MIDI, см. « MIDI Input» .

Вам также понадобится MIDI UDF и имитировать нажатия клавиш .

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

Если вы хотите, вы могли бы что - то на экране или в лоток , чтобы помочь вам увидеть , что вы делаете (то есть, для Shift, Ctrlи Altмоделирование).

Martijn
источник
5

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

Peter Mortensen
источник
5

Если вы знаете кодирование на Java, вы можете использовать этот способ:

Во- первых, реализовать javax.sound.midi.Receiverс помощью send(..)метода, отображающего On 'событий нажатия клавиш , как вы хотите.

Вам нужно будет получить содержимое MidiMessage с его getMessageметодом и интерпретировать его по-своему. Значение байтов сообщения можно найти в сообщениях MIDI .

Получив «note on» или «note off» для определенной клавиши клавиатуры, вы можете сопоставить ее с клавишей, которая вам нравится, присвоив ей константу класса KeyEvent, что-то вроде C # 4 -> KeyEvent.VK_A и т. Д. , Этот код ключа может затем использоваться методами java.awt.RobotkeyPress и keyRelease для фактической отправки нажатия клавиши в ОС и, следовательно, в другие приложения.

дронус
источник
4

Я согласен с ответом Брайана О'Делла - если бы это был мой проект, я бы сделал это аппаратно. Его преимущество в том, что он не зависит от платформы и аппаратного обеспечения - ваш компьютер заменяет необходимость в интерфейсе MIDI-USB и API для ПК.

mbed - это платформа для быстрого создания прототипов, которую очень легко освоить, и она имеет множество преимуществ по сравнению с Arduino IMHO (онлайн-компилятор, 512 КБ флэш-памяти, 96 МГц, язык C ++). Он имеет интерфейс клавиатуры USB и интерфейс USB Midi, предварительно написанный для вас.

Сообщество очень дружелюбно и готово помочь, и существует множество существующих проектов, использующих скрытую эмуляцию MIDI и USB - поиск на Youtube по запросу «mbed MIDI» или аналогичный.

Alex L
источник
4

Если вы используете Linux, обратите внимание на Footware .

Это должно быть именно то, что вы ищете - если вы подстраиваете MIDI-тональность в соответствии с вашими предпочтениями ...

Я никогда не думал, что это может быть полезно для всех, кроме меня; о)

FlashKorten
источник
2
На моей предыдущей работе в качестве администратора у меня был ножной контроллер под столом - чтобы минимизировать оставление домашнего ряда в vim
FlashKorten
2

Попробуйте использовать систему на основе микроконтроллера, такую ​​как Arduino .

Peter Mortensen
источник
1

Это не было бы слишком сложно.

Я предполагаю, что вы находитесь на Windows , но не уверен в этом. Я написал MIDI- секвенсор, http://pianocheetah.com , на простом старом C ++ , и он позволяет вам использовать клавиатуру пианино для запуска команд. Нет никаких причин, по которым вы не могли бы сделать то же самое, чтобы вставить клавиши в поток ввода с клавиатуры.

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

Вам нужно будет использовать как минимум 26 буквенных, 10 цифровых, 11 знаков пунктуации и как минимум 12 функциональных клавиш И их смещенные состояния. Так что это 60 клавиш плюс сдвинутые состояния. Это сожжет целых 5 октав ключей. Вы будете играть на пианино "хмель" = все = время. Попрощайтесь, чтобы коснуться набора текста.

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

И удачи в том, чтобы ваш босс купил вам MIDI-клавиатуру на работе.

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

Стивен Хейзел
источник
Спасибо за добрые слова, но я потрудился над этим и не планирую делать его открытым исходным кодом - извините. Но то, что вы должны сделать, это использовать midiInOpen (); предоставить ему обратный вызов для обработки ввода midi; игнорируйте все, кроме отмеченных известных событий, сопоставьте примечание midi с некоторой клавишей клавиатуры и вставьте ее в поток ввода с клавиатуры (я забываю API для этого, но я ДЕЙСТВИТЕЛЬНО уверен, что она есть, по крайней мере).
Стивен Хейзел