Використання клавіатури фортепіано як клавіатури комп'ютера [закрито]


727

У мене проблеми з RSI і я спробував 30 різних клавіатур комп’ютера, які все спричинили мені біль. Гра на фортепіано не заподіює мені болю. Я майже 20 років грав на фортепіано без жодних проблем з болем. Мені хотілося б знати, чи є спосіб захоплення MIDI з клавіатури MIDI та виведення обведення клавіатури. Я нічого не знаю про MIDI, але я хотів би отримати деякі вказівки щодо перетворення цього сигналу в натискання клавіші.


навіщо захоплювати міді, якщо ви можете використовувати клавіатуру синтезатора як клавіатуру?
шевський

@I__: Яку операційну систему вам потрібно підтримувати? Мабуть, це матиме значення.
TJ Crowder

5
@shevski: Я нічого не намагаюся робити, @I__ - це людина, яка задає питання. Він / вона не шукає перетворення звуку , а швидше сигнали подій цифрової клавіатури, що надсилаються електронними клавіатурами через цифровий інтерфейс музичного інструменту . Це дуже схоже на події на клавіатурі комп'ютера: "Примітка увімкнена" добре відповідає клавіатурі, "відмітка" клавіатурі тощо. Ви навіть можете використовувати дані швидкості для виконання різних дій залежно від того, наскільки "голосно" відтворювався акорд. Мені подобається ідея.
TJ Crowder

34
Якщо ви працюєте з цим, ви можете кодувати за допомогою будь-якого пристрою midi. Це, мабуть, вимагає певної практики, але використовувати оркестр як команду розвитку слід із задоволенням.
Toon Krijthe

1
@I__: Найбільш схвалена відповідь вказує на підтримку MIDI API звукового сигналу Java, яка повинна змусити вас отримувати MIDI-дані, а також детально описує теорію, що перетворюється на перетворення в серію натискань клавіш. На другий найбільший upvoted відповідь говорить про дуже життєздатний спосіб ви могли б підключитися , що до комп'ютера з допомогою 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 вище середнього С, напівтонами). Ці події мають "швидкісні" цифри на клавіатурах, які чутливі до швидкості ("чутливі до дотику") із силою (ви здогадалися) між 0 і 127.

Між швидкістю, акордом і педалями, я думаю, ви могли б придумати досить хороший інтерфейс для набору клавіш для фортепіано. Зокрема, акордування може бути дуже потужною технікою - як я вже згадував у коментарях, саме тому рядові стенографи можуть використовувати стенотипову машину, щоб не відставати від людей, що розмовляють годинами поспіль, коли навіть машиністи з вищого польоту не хочуть ' не зможете будь-який проміжок часу користуватися звичайними клавіатурами в машинці. Як і в машинній стенографії, вам знадобиться "словник" значень акордів і послідовностей акордів. (Чи можете ви сказати, що я працював у програмній частині машинної стенографії?)

Для цього основними елементами є:

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

Щоб максимально сумісна з програмним забезпеченням, вам доведеться писати це як драйвер клавіатури. Це плагін до операційної системи, який служить джерелом подій на клавіатурі, розмовляючи з базовим обладнанням (у вашому випадку клавіатурою фортепіано). Для Windows та Linux, ймовірно, ви хочете використовувати для цього C.

Однак, оскільки ви просто генеруєте натискання клавіш (не намагаючись їх перехопити, що я намагався зробити років тому), ви, можливо, зможете використовувати будь-які функції операційної системи для надсилання штучних натискань клавіш. У Windows є інтерфейс для цього (можливо, декілька, про який я думаю, SendInputале я знаю, що є якийсь "журнальний" інтерфейс, який робить щось подібне), і я впевнений, що це роблять і інші операційні системи. Це може бути достатньо для ваших цілей - саме там я б почав, оскільки маршрут драйвера пристрою буде незручним, і вам, мабуть, доведеться використовувати іншу мову, ніж Java. (Я великий шанувальник Java, але інтерфейси, які операційні системи використовують для розмови з драйверами пристроїв, як правило, легше споживаються через C та подібні.)


Оновлення : докладніше про "словник" акордів до натискань клавіш:

По суті, словник - це трійка (спасибі, @Adam), яку ми шукаємо із збігом найдовших префіксів. Деталі:

У машинній стенографії стенограф пише одночасно натисканням декількох клавіш на стенотипній машині, потім випускаючи їх усіх. Вони називають це "обведенням" клавіатури; це як грати акорд на фортепіано. Штрихи часто (але не завжди) відповідають складові розмовної мови. Як і склади, іноді один штрих (акорд) має значення сам по собі, в іншому випадку він має лише значення в поєднанні з наступними штрихами. (Подумайте "добре" проти "добре", а потім "побачення"). Хоча на них буде сильно впливати школа, в якій вони навчалися, у кожного стенографа буде свій власний "словник" того, якими штрихами вони користуються для позначення чого, словником, який вони будуть постійно відточувати протягом свого трудового життя. У словнику будуть записи, де стенографічна частина ("коротко", коротко) - одна штриха або кілька штрихів. Часто буде кілька записів з однаковим початковим штрихом, які диференціюються за їх довжиною та наступними штрихами. Наприклад (і я тут не використовуватиму справжній стено, просто заповнювачі), можуть бути такі записи:

А = альфа
A / B = алфавіт
A / B / C = алфавітний
A / C = кондиціонер
В = бджола
B / C = тому що
С = море
D = собака
D / D = Ді Ді

(Ці букви не мають бути музичними нотами, а лише абстрактними маркерами.)

Зауважте, що Aпочинається кілька записів, а також зауважте, що спосіб перекладу Cштриха залежить від того, ви раніше бачили A, a Bчи ви починаєте свіжим.

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

Перекладаючи стено в стандартний текст, ми знову використовуємо пошук "збігу найдовших префіксів": алгоритм перекладу починається з першого написаного штриха, який коли-небудь написано, і шукає записи, починаючи з цього обведення. Якщо є лише один запис, і він триває один штрих, то ми можемо з упевненістю сказати "це запис, який потрібно використовувати", виведіть відповідний текст, а потім почніть свіжим із наступного обведення. Але ймовірніше, що інсульт запускає кілька записів різної тривалості. Отже, ми дивимось на наступний штрих і бачимо, чи є записи, які починаються з цих двох штрихів в порядку; і так далі, поки не отримаємо сірник.

Отже, зі словником вище, припустимо, ми побачили цю послідовність:

ACBBCABCABD

Ось як ми це переклали:

  1. A- початок трьох записів різної довжини; подивіться на наступний штрих:C
  2. A/Cвідповідає лише одному запису; виведіть "кондиціонер" і почніть свіжим із наступного обведення:B
  3. Bпочинає два записи; подивіться на наступний штрих:B
  4. B/Bне починає нічого; візьміть найдовший попередній збіг ( B) і виведіть, що ("бджола")
  5. Маючи результат B= "бджола", ми все ще маємо 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нічого не відповідає, тому візьміть найдовший попередній збіг ( A/B) і використовуйте його для виведення "алфавіту". Це залишає нас із Dще в буфері.
  13. Dпочинається два записи, тому ми зазвичай дивимось на наступний штрих - але ми обробили всі штрихи, тому розглянемо це окремо. Окремо це перекладається як "собака", щоб вивести, що.

Аспекти зазначеного вище:

  • У вас буфер штрихів, які ви прочитали, але ще не переклали.
  • Ви завжди хочете співставити найбільш обриси проти одного запису, який можете. A/Bслід перекладати як «алфавіт», а не «альфа» та «бджола».
  • (Не показано вище) Можливо, у вас є послідовності штрихів, які ви не можете перекласти, оскільки вони нічого не відповідають словнику. (Стіно люди використовують іменник "неперекладений" - наприклад, у нашому словнику штрихи Eбули б "неперекладеними".)
  • (Не показано вище) Деякі теорії стено дозволяють одному й тому ж штриху означати більше ніж одне, спираючись на більш широкий контекст. Люди стено називають ці "конфлікти". Ви, мабуть, хочете заборонити їх у своєму проекті, а насправді, коли стенограф використовував стенограф вручну, конфлікти були нормальні, оскільки вони могли знати, де саме в реченні вони були правильним вибором, але зі зростанням машинного перекладу, безконфліктні теорії стено виникли спеціально, щоб уникнути необхідності переглядати отриманий перекладений текст та «виправляти» конфлікти.
  • Переклад у режимі реального часу (що ви б робили) означає, що якщо ви отримаєте часткову відповідність, ви захочете затриматися на ньому, чекаючи наступного акорду, але, ймовірно, лише до тайм-ауту, в який момент ви б перекладіть все, що є у буфері, якнайкраще. (Або, можливо, ви не хочете, щоб очікувати час; це ваш дзвінок.)
  • Напевно, найкраще мати інсульт, який говорить про "зневагу до попереднього інсульту"
  • Напевно, найкраще мати інсульт, який говорить "повністю очистити буфер, не виводячи нічого"

6
@I__: Деякі програми намагаються спілкуватися безпосередньо з пристроєм клавіатури, тому не грайте добре з інтерфейсами, подібними до "sendkeys". Сподіваюсь, це є ще менш поширеним, ніж декілька років тому, коли я востаннє займався цим, і тому, як я вже кажу, я би почав із таких "механізмів", як механізми, і хвилюватися про інших лише тоді, коли і коли потрібно. (Можливо, найкраще зробити швидку програму тестування відправки ключів [самостійно, не отримуючи їх від MIDI] - включаючи спеціальні послідовності ключів - а потім протестувати те, що за допомогою програмного забезпечення, яке ви хочете контролювати, перш ніж ви зайшли занадто далеко вниз по шляху .)
TJ Crowder

7
Для тих, хто ніколи про це не чув, словник, який ви описуєте, в основному є трієм (вимовляється "спробувати")
Адам,

14
@I__: Цікаво написати зараз, щоб сказати це. Що ще ти хочеш? Я думаю, я торкнувся багатьох важливих аспектів того, що вам потрібно зробити. Я цього не робив і не вказував на когось, хто має, тому що я маю робити інші речі і не знаю про заздалегідь побудоване рішення. Але з точки зору побудови рішення, я думаю, я спрямував вас у правильному напрямку.
TJ Crowder

2
Зауважте, що ви можете заклинити всі акорди в лінійному масиві і робити обхід кожного разу, коли отримуєте подію midi, і все одно не відчуваєте помітного уповільнення. Використання трійки трохи пахне передчасною оптимізацією.
FeepingCreature

5
@FeepingCreature: Коли я робив це зі стенографами та журналістами суду, їхні словники могли легко перейти до сотень тисяч записів (я пам’ятаю одного, який зламав мільйонну позначку). Не було нічого віддаленого в застосуванні оптимізуючої стратегії, ми мали справу з 12 МГц 386. У випадку I ___, якщо він піде з ідеєю Arduino (що є дуже цікавою ідеєю), він теж матиме справу з досить недооціненим обладнанням для сучасної епохи, хоча, звичайно, речі смішно швидше, ніж у нас. Я думаю, що його словник, як правило, буде значно меншим, але ...
TJ Crowder

184

Подумайте про те, щоб зробити щось із обладнання, яке імітує usb (або ps / 2?) Клавіатуру. Ви більше не будете залежати від конкретної ОС або конкретного API API. Апаратне рішення витримає випробування часом. Не зациклюйтеся на використанні старого API в Windows 7, коли всі інші працюють під керуванням Windows 11! Ардуїно досить легко вивчити.

Тут є багато інформації та допомоги для Arduino. Це апаратна хакерська платформа, побудована для новачків. Він тільки зросте тепер, коли Google наполягає на Arduino.

EDIT: Програмне забезпечення та обладнання для віртуальної USB-клавіатури


Мені подобається використовувати для цього Arduino. Хоча пам'ять може бути проблемою. Схоже, найбільші заздалегідь розроблені плати мають 256 кб Flash (з них завантажувач завантажує 8 к). Ще в той день ми перебили переклад / показ / редагування машинного скорочення в режимі реального часу в 1М під DOS (наприклад, звичайні 640k плюс EMS або розширена пам'ять), але ми писали щільний код C і збірку та словник (який легко бути> 250k самостійно) був на диску. Тут не буде відображення чи одночасного редагування, тож це добре, але словник повинен бути невеликим ...
TJ Crowder

О, це нічого. Я звичайно мав справу з журналістами суду, які мали словники, які навіть у дуже компактній формі, яку ми використовували, мали розмір декількох мегабайт. Найбільший, що я особисто бачив, був 4,5 Мб - і знову, що зберігався у високо стисненому вигляді. Поєднайте це з тим, що на клавіатурі стено менше клавіш, ніж на клавіатурі для фортепіано ... Однак, у Arduino є порт USB, тому словник може бути на USB-адаптері флеш-пам'яті, або навіть (зовнішнє живлення) ) SSD або HDD.
TJ Crowder

2
@можливо, ви хочете розглянути підліток замість ардуїно ( pjrc.com/teensy ) значно більше пам’яті і може безпосередньо імітувати клавіатуру. Він сумісний з багатьма бібліотеками ардуїно, а несумісні з ними просто потребують переназначення. - по черзі, ATmega також робить демо - плата , яка має 16 МБ вбудованої спалахом і коштує близько $ 30 (AT90USBKey)
Марк

8
Розробка корисного для фортепіано інтерфейсу для комп'ютера - завдання не з легких. ІМХО, ОП повинен спочатку прообразувати його у своєму поточному середовищі, потім, якщо воно задовольняє його потреби, турбуйтеся про переносимість. Якщо, звичайно, портативна альтернатива не помітно складніше.
Еміліо М Бумачар

111

Мені це здається, що ви шукаєте менше порад щодо того, як це зробити самостійно, і більше запитуєте, які ресурси вже є для досягнення того, що ви хочете. Залежно від вашої ОС, існує безліч способів досягти цього без необхідності писати власну програму з нуля:

MIDI інсульт

Безкоштовно. Для Mac OS X 10.3 і вище . Це спеціально поставляється з "можливістю використовувати будь-яку клавіатуру MIDI як повноцінна заміна комп'ютерної клавіатури".

Перекладач MIDI Bome

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

Макс та ака.keyboard

Безкоштовно. Для Mac OS X . Не зовсім "готове з коробки" рішення, але якщо вам подобається основна конфігурація пристрою, це не повинно бути погано.


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 пальців на клавіатурі, і якщо матриця зручна, ви можете бути набагато швидше, ніж будь-який користувач клавіатури комп'ютера, я думаю. :-)

У тому випадку, якщо я правильно розумію ваше запитання, це не повинно бути великою справою.


41

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

Ви можете отримати цю роботу досить швидко в Linux, використовуючи графічну мову програмування для мультимедійних виконавців " Чисті дані " разом із зовнішнім x11key від Алекса Андре .

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

Коли я працював, я ніколи не зациклювався на цьому, тому що не міг перестати працювати з компонуванням. Це було круто, просто маючи на моїй електричній клавіатурі монітор! Удачі.


37

Про MIDI

Ви заявили, що "взагалі нічого не знаєте про MIDI". Технологія MIDI досить зрозуміла, як тільки ви її зрозумієте, але вона може заплутатись з самого початку. Одним із ресурсів, який надзвичайно корисний для мене в розумінні основ MIDI (які, безумовно, необхідні, якщо ви хочете запрограмувати взаємодії MIDI), є книга під назвою MIDI для технофоба . Це легка для читання книга і дуже корисна.


Чисті дані та макс

З мого досвіду розробки інтерактивної мультимедіа, у мене виникли дві дуже схожі програми, які полегшують підключення та відображення сигналів / входів з будь-якого пристрою.

Це Max для середовища Mac та Pure Data для ПК. Обидва мають безліч онлайн-документації та навчальних посібників YouTube. Відео Підручник Max / MSP 1 - використовуючи клавіатуру комп'ютера як midikeyboard (стиль грайтона), демонструє програму, вбудовану в Max, яка відображає клавіатуру комп'ютера на входи MIDI-клавіатури (що в принципі прямо протилежне тому, що ви намагаєтеся зробити). Ви можете отримати бажані результати, використовуючи той самий візерунок, але перевернувши сигнали / відображення.


AutoHotKey

AutoHotKey - безкоштовна утиліта з відкритим кодом для Windows, яка дозволяє перевпорядкувати клавіші та кнопки на ваших пристроях до макросів. Він в основному підтримує клавіатури QWERTY, джойстики та макроси миші.

Однак мені вдалося знайти реалізацію, яка б підтримувала конкретні карти, які ви шукаєте. Ці дві нитки пояснюють процес:

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

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

В основному, схоже, що AutoHotKey разом із користувацьким патчем цього користувача забезпечить саме те, що потрібно для створення відображення з клавіатури MIDI на вхідний сигнал клавіатури QWERTY. Все, що вам потрібно буде зробити, це встановити, налаштувати та визначити ваші відображення.


Ще щось?

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


27

Ви можете зламати власну USB-клавіатуру досить швидко, використовуючи мікроконтролер Teenys.

Насправді у них є приклад коду того, як зробити USB-клавіатуру .

Ви можете підійти до цього двома способами:

  1. Отримайте старий фортепіано та підключіть перемикачі безпосередньо до підлітків

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


Це найбільш перспективна відповідь, оскільки після завершення роботи пристроїв він працюватиме на будь-якому комп’ютері та будь-якій ОС. Візьміть це за роботу або просто радійте, що можете оновити комп’ютер, не турбуючись про клавіатуру. Я б використав два пристрої Teensy і з'єднав їх разом зі своїми штифтами вводу / виводу. Оскільки Teensy вже підтримує USB MIDI pjrc.com/teensy/td_midi.html, ваш код просто повинен подбати про переміщення сигналів між клавіатурою teensy та midi teensy.
Майкл Діллон

24

Насправді я працював над цим деякий час тому, намагаючись захопити вхідні дані барабану Rock Band у свій комп’ютер (зробивши трохи домашнього барабанного емулятора Java). Як би там не було, я поставив питання про це, проблема затримки часу (там є код опитування разом із тим, що я намагався зробити.). І якщо я можу знайти свою програму, я можу надати вам код, вона використовує сторонній API ( JInput ).

Удачі в будь-якому випадку.


23

Спробуйте перекладач MIDI Bome .

Він працює на крос-платформі, може легко перетворити будь-який MIDI- вхід на клавішу, швидко налаштувати та налаштувати, плюс це безкоштовно для особистого використання.

Існує підручник, Швидкий рада: Переклад MIDI - MIDI для натискань клавіш , як легко налаштувати його:

В основному є безмежні можливості того, що ви можете зробити, включаючи акордування та клавіші модифікаторів. Я використовую його для моєї звукової установки, щоб контролювати свій DAW за допомогою мого піаніно, і ніколи не виникало проблем.


18

У Java ви можете використовувати JMF (Java Media Framework) для перетворення сигналів MIDI. Основні конструкції клавіатури прості у використанні, тобто інтерфейс користувача; і зручно розміщувати часто використовувані символи / символи.

Зразок коду та API в Java Sound Resources: Приклади: Цифрова обробка сигналів (DSP) допомагає зрозуміти, як обробляти сигнал.

Ще кілька посилань:


15

Існує програма під назвою GlovePIE . Ви можете запрограмувати його простою мовою скриптів, і я вважаю, що він підтримує MIDI. Я не впевнений, чи підходить це до категорії «Java», але все-таки це чудова програма. Я використовував його для управління роботами за допомогою контролерів PS3 . Це дуже потужно.


15

Багато клавіатур мають роз'єм послідовного порту ( RS-232 ) для передачі сигналів MIDI на комп'ютер. Я використовую програму під назвою Girder для перетворення зв'язку послідовного порту в обведення клавіатури.

Гірдер має функцію "відображення", яка дозволяє відображати кожну клавішу, одну за одною, на відповідний натискання клавіш.

Це може бути просте рішення, яке ви шукаєте!


12

Просто вивчіть стенографію!

Це зрозуміло з усієї дискусії з вашого боку. Ви не хочете переосмислювати жодні колеса з технічної точки зору. Але як тільки ви зробите зв’язок (що задає це питання) і працюєте, ви все ще маєте перед собою більшу частину роботи: Ви повинні тренувати свій мозок. Вам також доведеться винайти найрозумніший, найефективніший спосіб зробити це - питання дизайну, що повністю вийшов із реалми комп’ютерних технологій. Ви або хтось із нас не витримаєте.

На щастя, проблема була вирішена і відточена, хоча століттями дозрівали ...

Вивчіть стенографію!

Так, це поверне вам трохи гнізда. Але чого варті сотні годин власного часу, зрештою, менш сприятливим результатом? Крім того, у статті Вікіпедії про стенографію сказано: "Це більше схоже на клавіатуру фортепіано".

Якщо, звичайно, ви не хочете, щоб ефект бокового шоу не відбувся. Я маю визнати, я ніколи не думав про таку можливість, було б дуже цікаво бачити, як хтось вириває текст з клавіатури фортепіано!

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

Удачі!


Де {і} на клавіатурі стенографії? Як ти збираєшся вводити імена, які не є словами, як pthread?
бобобобо

Посилання на вікіпедію невірно і має бути en.wikipedia.org/wiki/Stenography
joelhoro

11

Погляньте на аркадні ігри MAME . Вони вбудували апаратні пристрої, які дозволяють вводити будь-яку кількість різних елементів. Наприклад, iPac перетворює сигнали з пристроїв введення в USB, які комп'ютер може використовувати для емуляції клавіш. Ви можете використовувати будь-яку комбінацію пристроїв введення, влаштованих будь-яким способом, який здається комфортним, не вимагаючи шаленої логіки програмування - тому що програмне забезпечення для інтерпретації вводу вже зроблено і добре перевірено.

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


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 змінити буде складніше, ніж настільну програму чи послугу.

Є й інша можливість: акордовані клавіатури однієї руки вже існують. Я бачив відео на них, але вам доведеться визначити, болять вам руки чи ні.


7

Використовувати щось на зразок інтерфейсу .NET DirectSound для підключення до пристрою MIDI слід досить просто. Вам потрібно буде визначити свій цільовий MIDI-пристрій, а потім отримати код для прослуховування вхідних повідомлень (є статті про це через Google).

Оскільки ви використовуєте MIDI в якості клавіатури, в основному є лише два повідомлення MIDI, які вам потрібно виявити, а саме: примітка та відмітка. Повідомлення MIDI - це три байти даних, що вказують команду, нотатку та швидкість. Відмітка - це лише номер ноти (іноді "погані" стеки MIDI надсилають нотатку з нульовою швидкістю, якої ви також повинні очікувати).

Коли у вас з'являться повідомлення, що їх перекладають, вихід клавіатури повинен бути досить простим від .NET.

В інших відповідях щодо технічних можливостей є багато порад; Я просто хотів дати вам уявлення про фактичні повідомлення MIDI. Удачі!


Як зауваження, документ "Визначення класу універсальних серійних шин
Simon Inns

7

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

Якщо ваша звукова карта не підтримує введення / виведення MIDI (входи / виходи / рухливість), це не проблема. Ви можете розглянути питання про дослідження та інвестиції у зовнішній конвертер MIDI. Багато хто оснащений для подальшого перетворення MIDI-виходів на USB 2.0 (пропускаючи наявну звукову карту).

Наприклад: досить важко отримувати результати "примітки, як людину", завдяки опції зміни клавіш Z і X за допомогою клавіатури комп'ютера та олівця. Коли ж замість цього ваші власні пальці можуть просто зіграти на клавіатурі MIDI з власного діапазону реєстру фізичних октав - негайно!

Я усвідомлюю, що бюджетні обмеження можуть мати місце. Але деякі з цих, здавалося б, дешевих клавіатур типу "Casio" типу 5 октави, які продаються на Radio Shack за ціною менше $ 100 доларів США (* або менше) - це все, що вам потрібно (плюс, деякі їхні бортові звукові патчі та модулі секвенсорного звуку та обробки дивно добре і для інших речей теж).

Параметри клавіатури RadioShack MIDI .

Що стосується зовнішніх MIDI-конвертерів для існуючих звукових карт, я здійснив кілька пошукових запитів Google для вас, зокрема, на платформах Mac:

Багато цієї зовнішньої інформації про конверсію MIDI може вам спочатку бути громіздкою, тому я розбив речі, як "зручніші" для ваших міркувань та бюджету:

Немає нічого поганого в тому, щоб полегшити віртуальні клавіатури, як VST , під час використання DAW . Вони мають своє місце.

Але, ти звучиш як досвідчений клавішник. Отже, чому б не розглянути зовнішні параметри перетворення / клавіатури MIDI, які я щойно згадав для себе?

Удачі і сподіваюся, що це дало вам кілька ідей, які можуть і будуть працювати для вас!


6

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

Цей метод буде працювати з будь-якою ОС та будь-яким комп'ютером, який підтримує стандартні клавіатури USB, оскільки MIDI-клавіатура ідентифікує себе як стандартна клавіатура QWERTY.


чи знаєте ви, чи можна було б призначити акорди і певним натисканням клавіш? наприклад, якщо я граю акорд C MAJOR, чи можу я перевести це на "лисиця стрибнула"
l - '' '''--------- '' '' '' '' '' ' '

Вибачте за те, що не відповідали так швидко, у мене відпустка вже 4 дні;) Ні, на жаль, ви можете призначити лише один QWERTY-код на одну клавішу, тому він в значній мірі працює як стандартна клавіатура.
Мартін Оделій

До речі, якщо ви купуєте його, просто пам’ятайте, що купуєте PRO-one, тому що я не думаю, що не-PRO-версія має функцію QWERTY-призначення.
Мартін Оделій

Я не думаю, що можна присвоїти акорди ASCII-кодам, лише одну клавішу за кодом, але я перевіряю це на власній аксіомі сьогодні ввечері, коли повернусь з роботи додому.
Мартін Оделій

Я щойно помітив, що коди qwerty можна призначати лише кнопкам управління (функціональні клавіші, барабанні колодки, цифрові клавіші тощо), а не фактичним клавішам піаніно на клавіатурі. Я сам володію цією клавіатурою і був впевнений, що можна призначити коди ascii будь-якій клавіші, але тепер, коли я спробував це, я помітив, що це було неправильно! Мені дуже шкода цього, чи можна повернути нагороду якимось чином?
Мартін Оделій

6

Ви можете використовувати простий скрипт AutoIt для читання подій MIDI, див. MIDI Input .

Вам також знадобиться MIDI UDF та імітувати натискання клавіш .

Читання подій MIDI повинно бути простим, але різні MIDI-контролери (інструменти) мають різні функції. Спробуйте дізнатися, що може зробити ваш фортепіано MIDI спочатку, а потім подивіться, як найкраще відобразити ці функції на імітованих клавішах клавіатури QWERTY .

Якщо ви хочете, ви могли б що - то на екрані або в лоток , щоб допомогти вам побачити , що ви робите (тобто, для Shift, Ctrlі Altмоделювання).


5

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


5

Якщо ви знаєте кодування на Java, ви можете використовувати такий спосіб:

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

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

Отримавши «примітку» або «примітку вимкнено» для певної клавіатурної клавіші, ви можете зіставити це клавіші, яка вам подобається, призначивши їй константу класу KeyEvent, щось на зразок C # 4 -> KeyEvent.VK_A тощо . Цей код ключа може бути використаний методами java.awt.RobotkeyPress та keyRelease для фактичного надсилання натискання клавіші на ОС і, таким чином, на інші програми.


4

Я згоден з відповіддю Брайана О'Делла - якби це був мій проект, я би робив це апаратно. Він має перевагу в тому, що він не залежить від платформи та обладнання - ваш ящик замінює потребу в інтерфейсі MIDI-USB та API для ПК.

mbed - це платформа для швидкого прототипування, яку дуже легко вивчити, і вона має багато переваг перед Arduino IMHO (онлайн-компілятор, 512 КБ флеш, 96 МГц, мова С ++). Він має інтерфейс USB-клавіатури та інтерфейс USB Midi, попередньо написаний для вас.

Спільнота дуже доброзичлива і готова допомогти, і існує чимало існуючих проектів, які використовують як приховану емуляцію MIDI, так і USB - шукайте Youtube для "mbed MIDI" або подібного.


4

Якщо ви користуєтесь Linux, перейдіть на Footware .

Це має бути саме те, що ви шукаєте - якщо ви налаштуєте MIDI смоли під клавіатурну карту на ваш смак ...

Я ніколи не думав, що це може бути корисним для будь-кого, крім мене; o)


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


1

Це було б не надто важко.

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

Але давай зараз. Ви пам’ятаєте, скільки часу знадобилося вам вивчити клавіатуру в першу чергу, правда? Чи готові ви пережити це ще раз? І чи готові ви забруднити вашу благословенну клавіатуру купою дурних шукаючих ключових символів по всьому?

Вам потрібно буде використовувати щонайменше 26 альфа, 10 числових, 11 пунктуаційних та хоча б 12 функціональних клавіш І їх зміщені стани. Отже, це 60 клавіш плюс зміщені стани. Це спалить 5 октав клавіш. Ви будете робити фортепіанні "хмелі" = весь час. Попрощайтеся, щоб торкнутися набору тексту.

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

І удачі змусити свого начальника купити вам клавіатуру MIDI на роботі.

Якщо ви навчилися по-справжньому грати на фортепіано, ви навчилися грати без стресу. Зробіть це на клавіатурі QWERTY . Немає напруги. Почніть повільно.


Дякую за добрі слова, але я попрацював свою задку над цією річчю і не планую робити це з відкритим кодом - вибачте. Але те, що ви зробите, це використовувати midiInOpen (); забезпечити йому зворотний виклик для обробки введення midi; ігноруйте все, крім відомих подій, нанесіть на замітку примітку до якоїсь клавіші клавіатури і вставте її у вхідний потік клавіатури (я забуваю api для цього, але я НАРОДНО впевнений, що він є, принаймні).
Стівен Хейзл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.