keyboard - 線上鋼琴 - 電腦鋼琴教學




使用鋼琴鍵盤作為電腦鍵盤 (20)

只要學習速記!

從你們所有的討論中可以清楚地看出。 從技術的角度來看,你不想重新發明任何車輪。 但是,一旦你建立了聯繫(這個問題提出了什麼問題)並開始工作,你仍然有大部分工作要做:你必須訓練你的大腦。 你必鬚髮明最聰明,最有效的方式來做到這一點 - 完全脫離計算機技術的設計問題。 你或我們任何一個人都會失敗。

幸運的是,這個問題已經通過幾個世紀的成熟來解決和磨練......

學習速記!

是的,這會讓你回到一些傑克。 但是,你自己的時間有幾百個小時的價值,最後是一個不太有利的結果? 此外, 速記維基百科文章說,'它看起來更像是一個鋼琴鍵盤'。

當然,除非你想有一個側面影響的效果。 我不得不承認,我從來沒有想過這種可能性,看到有人從鋼琴鍵盤上破解文本真的很有意思!

你可以從帶有觸摸板USB鍵盤開始(或者指點桿會更符合人體工程學?),使用Plover翻譯它(我相信它可以配置為讓非字母鍵保留其功能,因為它們對於編程),或者,按照線程Re:Plover鍵盤滾動您自己的USB速記鍵盤,或者購買一個stenotype

祝你好運!

我有RSI問題,並嘗試了30種不同的電腦鍵盤,這些都讓我感到痛苦。 彈鋼琴不會讓我感到痛苦。 我已經彈了大約20年的鋼琴,沒有任何疼痛問題。 我想知道是否有方法從MIDI鍵盤捕捉MIDI並輸出鍵盤筆劃。 我對MIDI一無所知,但我希望得到關於如何將此信號轉換為按鍵的指導。


關於MIDI

你聲明你“對MIDI一無所知”。 一旦你掌握MIDI技術,MIDI技術是相當直接的,但它一開始可能會引起混淆。 對於理解MIDI基礎(當然,如果你想編程MIDI交互,這當然是必要的),對於我來說,這些資源對我來說是非常有用的資源之一,它是一本名為Technophobe的MIDI的書 。 這是一本容易閱讀的書,非常有幫助。


純數據和最大

根據我開發交互式多媒體的經驗,我遇到了兩個非常類似的程序,可以方便地連接和映射來自任何設備的信號/輸入。

這些是針對Mac環境的Max和針對PC環境的Pure Data 。 兩者都有大量的在線文檔和YouTube教程。 視頻Max / MSP教程1 - 使用計算機鍵盤作為midikeyboard(ableton風格)演示了Max內置的程序,它將計算機鍵盤映射到MIDI鍵盤的輸入(基本上與您正在嘗試執行的操作完全相反)。 您可以通過使用相同的模式來獲得預期的結果,但可以反轉信號/映射。


AutoHotkey的

AutoHotKey是一個免費的Windows開源實用程序,允許您將設備上的按鍵和按鈕重新映射到宏。 它本身支持QWERTY鍵盤,遊戲桿和鼠標宏。

但是,我能夠找到支持您正在尋找的特定映射的實現。 這兩個線程解釋了這個過程:

  1. AutoHotkey中的MIDI IN支持用例的討論。 作者正在尋找可以檢測MIDI IN輸入並將其轉換為按鍵的程序

  2. MIDI輸入庫 ,作者問題的解決方案以及實際實現您預期結果的AutoHotKey的發布代碼/補丁。

基本上,它看起來像AutoHotKey以及此用戶的自定義修補程序,將提供您需要創建從MIDI鍵盤到QWERTY鍵盤的輸入信號的映射。 你所要做的就是安裝,配置和定義你的映射。


還要別的嗎?

一般來說,其他一些答案為您提供了關於MIDI和MIDI編程的更多信息,但正如您的文章所述,這似乎並不完全符合您的要求。 如果可能,我想盡可能多地幫助您,但如果您可以更具體地了解您要查找的信息類型,那將會更輕鬆。 例如,你是否對如何將MIDI鍵盤的輸入信號轉換為QWERTY鍵盤的信號更感興趣,或者您是否主要有興趣為您的特定問題尋找開箱即用的解決方案 ? 你在找什麼還沒有解決?


I agree with Brian O'Dell's answer - if this were my project, I'd do it in hardware. It has the advantage of being platform and hardware independent - your box replaces the need for a MIDI-USB interface and a PC API.

mbed is a fast-prototyping platform that is very easy to learn, and has multiple advantages over Arduino IMHO (online compiler, 512 KB flash, 96 MHz, C++ language). It has a USB keyboard interface and a USB Midi interface pre-written for you.

The community is very friendly and willing to help, and there are a lot of existing projects using both MIDI and USB hid emulation - search Youtube for "mbed MIDI" or similar.


If you don't want to do any programming yourself but just want the problem solved you can just buy a USB-MIDI-keyboard where you can re-assign any key to send a QWERTY keyboard output signal instead of a MIDI-output, for example M-Audio Axiom Pro

This method will work with any OS and any computer that supports standard USB-keyboards since the MIDI-keyboard will identify itself as a standard QWERTY keyboard.


If you use Linux have a take at Footware .

It should be exactly what you're looking for - if you adjust the MIDI pitches to a keymapping of your liking...

I never thought this could be useful for anyone but me ;o)


It should be fairly easy using something like the .NET DirectSound interface to hook into an MIDI device. You will need to identify your target MIDI device and then get the code to listen in on the incoming messages (there are articles about doing this via Google).

Since you are using the MIDI in as a keyboard there are basically only two MIDI messages that you need to detect, namely note on and note off. The MIDI message is three data bytes specifying the command, the note and the velocity. The note off is just the note number (sometimes 'bad' MIDI stacks send a note on with zero velocity which you also have to expect).

Once you have the messages translating them the keyboard output should be fairly simple from .NET.

There is plenty of advice in the other answers about the technicalities; I just wanted to give you an idea of the actual MIDI messages. 祝你好運!


To type faster maybe it's an idea to 'play' the consonants on the left hand and the vowels on the right (or vice versa). You don't need a key for every consonant, because you could combine them like:

B    C    D    G    H    J    K    L    M    N    P    Q    R    S     T     W    X    Y    Z

c    c#   d    d#   e    f    f#   g    c+d ...

You can leave two close keys out (like c# + d , this doesn't play easily). You can even leave the black keys out.

For vowels it is easy:

AEIOUY

cdefga

However, also think about using multiple keystrokes: like c# = aa , d# = ee , etc.

You can do the same trick with the consonants (having combination of keys for st, sp, etc.)

You can play consonants and vowels at the same time, bind them together alternately or with priority (consonants, then vowels, etc.)

You probably will have to learn to type again, but I'm sure you can do a lot quicker than a normal typing person can.

Use another octave for digits and special characters, use a switch for shift, use an easy to play a combination of keys for space (like two cs with both left and right hand, make sure it doesn't mean (a) character(s)).

Also think about using a pedal which can have values of 0-127. You could use it as shift or space too ... or backspace/enter.

I hope this give some new ideas and good luck with your project.


You can use a simple AutoIt script to both read MIDI events, see MIDI Input .

You'll also need MIDI UDF and simulate key presses .

Reading MIDI events should be easy, but different MIDI controllers (instruments) have different features. Try to find out what your MIDI piano can do first, then see how you can best map those features to simulated QWERTY -keyboard presses.

If you want, you could have something on screen or in the tray to help you see what you are doing (that is, for Shift , Ctrl and Alt simulation).


You'll get better and happier results (regardless what operating system and/or DAW program you like to use) by playing any external MIDI keyboard as a controller through your sound card. Then route that into your GB software (or whatever) and tone generate the many sounds they have supplied you that way in real-time.

If your sound card does not support MIDI I/O's (ins / outs /thrus), that's not a problem. You can consider researching and investing in an external MIDI table top converter. Many are equipped to further convert MIDI outs to USB 2.0 (by- passing an existing sound card altogether).

For example: it's pretty tough getting "human like" grace note results via a Z and X change key option using a computer keyboard and pencil tool. When, instead, your own fingers can just play that with a MIDI keyboard from its own physical octave register ranges—immediately!

I realize budgetary constraints may be involved. But, some of these seemingly cheap "Casio" type 5 octave keyboards sold at Radio Shack for under $100.00 US Dollars (*or less) is all you would need (plus, some of their on-board sound patches and sequencer modules sound and handle amazingly well for other things too).

RadioShack MIDI keyboard options .

As for external MIDI converters for existing sound cards, I've run some Google searches for you as follows with Mac platforms specifically in mind:

A lot of this external MIDI conversion information may be cumbersome to you at first, so I've broken down things more as "user friendly" for your considerations & budget:

There's nothing wrong with facilitating virtual keyboards as VST 's when using DAW . They have their place.

But, you sound like an accomplished keyboardist. So, why not consider the external MIDI conversion / keyboard options I just mentioned for yourself?

Good luck and I hope this gave you some ideas that can and will work for you!


你的疼痛症狀很可能是心身症。

我曾經想過,在玩電腦遊戲一個漫長的夜晚之後,我的手腕上有RSI好幾個月了。 物理治療沒有幫助。 在我讀到一篇醫生寫的一篇文章,解釋RSI,腕管,背痛和IBS通常可能是心身疾病的時候,尤其是在處於壓力下的人身上,疼痛幾乎消失了(這有助於觀察我的手腕放鬆並使血液流向它,因為文章稱自主血管收縮是疼痛的直接原因)。 事實上,當時我的壓力很大。


凱西有最好的答案。 我已經添加了一條評論,並將其提升。 這種軟件屬於設備驅動程序或嵌入式系統。 設備驅動程序要復雜得多,而且不能移植到其他操作系統。 有關參考,請參閱Linux上的Winmodems問題。

通過將代碼放入嵌入式系統中,可以將其移植到任何帶USB端口的MIDI設備以及任何接受USB鍵盤的計算機。


嘗試Bome的MIDI翻譯器

它可以跨平台工作,可以將任何MIDI輸入輕鬆轉換為按鍵,快速設置和配置,並且可以免費供個人使用。

有一個教程, 快速提示:MIDI翻譯 - MIDI到擊鍵 ,如何輕鬆設置它:

基本上,你可以做的事情無限可能,包括chording和修飾鍵。 我將它用於我的現場音頻裝置,以使用我的鋼琴控制我的DAW並從未遇到過問題。



多年來我沒有做過任何MIDI編程,但您的基本想法非常合理(無雙關)。

MIDI是“事件”(或“消息”)的流,其中最重要的兩個是“音符”和“音符關”,它們攜帶音符編號(0 = C中間C以下五個八度音階,通過127 = G五個八度以上G以上的中間C,半音)。 這些事件在速度敏感的鍵盤(“觸摸敏感”)上帶有一個“速度”數字,其中(你猜對它)的力度介於0到127之間。

在速度,和弦和踏板之間,我想你可以為鋼琴鍵盤提供一個很好的“打字”界面。 特別是Chording可能是一種非常強大的技術 - 正如我在評論中提到的那樣,這就是為什麼普通速記員可以使用stenographers跟上連續數小時談話的人,甚至連頂級打字員也不會這樣做。通過普通的打字機式鍵盤可以達到任意長度的時間。 和機器速記一樣,你需要一個和弦和和弦序列的“詞典”。 (你能告訴我曾經在機器速記的軟件方面工作嗎?)

要做到這一點,基本要點是:

  • 接收MIDI輸入。 不要試圖自己做這個,使用一個庫。 編輯 :顯然,Java Sound API 支持MIDI ,包括從MIDI控制器接收事件。 涼。 此頁面可能也有用。
  • 將該數據轉換為您想要發送的鍵擊,例如通過我上面提到的字典。
  • 將擊鍵輸出到計算機。

為了與軟件最廣泛地兼容,您必須將其作為鍵盤設備驅動程序編寫。 這是操作系統的一個插件,可作為鍵盤事件的來源,與底層硬件(在您的情況下,鋼琴鍵盤)進行通話。 對於Windows和Linux,你可能會想為此使用C語言。

但是,由於您只是生成擊鍵(而不是試圖攔截它們,我多年前正在嘗試這些操作),所以您可能可以使用操作系統發送人工擊鍵的任何功能。 Windows有一個接口可以做到這一點(可能有幾個,我想到的是SendInput但我知道有一些類似的“日誌”界面),我相信其他操作系統也是如此。 這對於你的目的來說可能就足夠了 - 這是我開始的地方,因為設備驅動程序的路由將會很尷尬,你可能不得不為Java使用不同的語言。 (我是Java的忠實粉絲,但操作系統用於與設備驅動程序對話的接口往往更容易通過C和類似方式消耗)。

更新 :更多關於和弦到鍵盤的“詞典”:

基本上,字典是我們用最長前綴匹配搜索的trie (感謝,@Adam)。 細節:

在機器速記中,速記員同時按下滑輪機上的多個鍵,然後釋放它們。 他們稱這是鍵盤的“中風”; 這就像在鋼琴上彈奏和弦一樣。 筆劃經常(但不總是)對應於口語的音節。 像音節一樣,有時一個筆劃(和弦)的意義都是獨立的,其他時候它只有和下面的筆劃結合的意思。 (認為“好”與“良好”之後是“再見”)。 雖然他們會受到他們學習的學校的深刻影響,但每位速記員都會有自己的“詞典”,用來表示他們將在工作生涯中不斷磨練的詞典。 該詞典將具有其中速記部分(簡稱“steno”)長度為一個筆劃或多個筆劃長度的條目。 通常,會有幾個具有相同起始行程的記錄,這些記錄通過其長度和隨後的行程來區分。 例如(我不會在這裡使用真正的steno,只是佔位符),可能會有這些條目:

A     = alpha
A/B   = alphabet
A/B/C = alphabetic
A/C   = air conditioning
B     = bee
B/C   = because
C     = sea
D     = dog
D/D   = Dee Dee

(這些字母不是音符,只是抽象的標記。)

請注意, A啟動多個條目,同時請注意,您如何翻譯C筆劃取決於您以前是否看過AB ,或者您是否剛剛開始。

還要注意的是(儘管上面非常小的樣本沒有顯示),可能有多種方式來“播放”相同的單詞或短語,而不僅僅是一個。 速記員會這樣做,以便根據手的位置更輕鬆地從前一個字流到下一個字。 這裡有一個明顯的音樂比喻,你可以使用它來使你的打字流程更類似於播放音樂,以防止這種情況對你的鋼琴演奏產生負面影響,並最大限度地提高實際上幫助RSI的可能性。

在將steno翻譯成標准文本時,我們再次使用“最長前綴匹配”搜索:翻譯算法從寫入的第一筆劃開始,查找以該筆劃開始的項目。 如果只有一個條目,並且它只有一個筆劃長度,那麼我們可以可靠地說出“這是使用條目”,輸出相應的文本,然後在下一筆劃中重新開始。 但更可能的是,該筆劃開始多個不同長度的輸入。 所以我們看下一個筆劃,看看是否有以這兩筆筆劃開頭的條目; 等等,直到我們得到一場比賽。

因此,對於上面的字典,假設我們看到了這個序列:

A C B B C A B C A B D

以下是我們如何翻譯它的方法:

  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 )並使用它輸出“字母”。 這讓我們仍然處於緩衝區。
  13. D開始兩個入口,所以我們通常會看下一個筆劃 - 但是我們已經處理了所有的筆劃,所以要單獨考慮它。 孤立地說,它翻譯為“狗”,以便輸出。

以上要注意的方面:

  • 你有一個你已經閱讀但尚未翻譯的筆劃緩衝區。
  • 你總是希望匹配最多的筆劃和單個條目。 A/B應翻譯為“字母”,而不是“阿爾法”和“蜜蜂”。
  • (上面沒有顯示)你可能有不能翻譯的筆劃序列,因為它們與字典中的任何內容都不匹配。 (Steno人使用名詞“untranslate” - 例如,與我們的字典一樣,筆劃E將是“未翻譯”)。
  • (以上未顯示)有些steno理論允許同一套筆劃根據更廣泛的上下文來表示不止一件事。 斯泰諾人稱之為“衝突”。 你可能想要在你的項目中禁止他們,事實上,當速記人員曾經被速記員手動翻譯時,衝突是沒有問題的,因為他們只知道在句子的哪個部分他們是正確的選擇,但隨著崛起的機器翻譯,steno無衝突理論專門出現,以避免必須經過翻譯後的文本和“修復”衝突。
  • 實時翻譯(您會這樣做)意味著如果您收到部分匹配,您將在等待下一個和弦時保持它 - 但可能只是暫停,在此時您會盡可能地翻譯緩衝區中的內容。 (或者,也許你不想要暫停,這是你的電話。)
  • 可能最好有一個說“無視先前中風”的中風
  • 可能最好有一個描述“完全清除緩衝區而不輸出任何內容”

對我而言,聽起來你似乎沒有多少關於如何自己構建這些內容的建議,並且更多地詢問已經有哪些資源可以完成你想要的內容。 根據您的操作系統,有很多方法可以完成此任務,無需從頭開始編寫自己的程序:

MIDI筆劃

自由。 適用於Mac OS X 10.3及更高版本 。 這一款專門配備了“能夠​​使用任何MIDI鍵盤作為全面更換電腦鍵盤的功能。”

Bome的MIDI翻譯器

免費/明信片(有點奇怪)。 適用於Windows 2000及更高版本,以及Mac OS X。 它最初似乎更適合AutoHotkey類型的用法,但在進一步考慮時,我認為它可以做到你想要的很好。

最大和aka.keyboard

自由。 適用於Mac OS X。 不完全是“即用即用”解決方案,但如果您對基本設備配置感到滿意,則不會太糟糕。


您可以使用MIDI DotNet中的.NET源代碼示例訪問硬件。

一個完整的作為源代碼創建MIDI音符數據流的工作示例在VB 5/6-Tipp 0521中:MIDI-Töneerzeugen (Visual Basic 6.0,某處也是.NET版本)

模擬鍵盤筆劃的一種方法是在VB 5/6-Tipp 0155:Tastaturereignisse simulieren (Visual Basic 6.0,某處是.NET版本)

並認識擊鍵描述Tipp上傳:VB.NET 0266:Globaler KeyHook

然後,為鋼琴演奏者使用一個良好的工作矩陣

在鋼琴上,當你是一個好玩家時,你可以在鍵盤上有10個手指,如果矩陣可用,你可以更快地使用任何電腦鍵盤用戶。 :-)

在那種情況下,如果我理解你的問題,它不應該是一件大事。


有一個叫做GlovePIE的程序。 您可以使用簡單的腳本語言對其進行編程,我相信它支持MIDI。 我不確定這是否符合“Java”類別,但它仍然是一個偉大的計劃。 我用它來控制使用PS3控制器的機器人。 它非常強大。


沒有真正的程序相關,但我可以提供一些關於如何管理RSI建議。

有定時器可以在整天引入頻繁的微休息的同時為您的工作加快速度。 如果你已經研究了RSI,我相信你已經聽說過微分。 它們對於管理和防止再次發生至關重要。 一個免費的程序是Workrave

給QWERTY啟動並嘗試Dvorak 。 這是一個程序員Dvorak鍵盤佈局 。 Dvorak在主頁行中使用最多的字符,而QWERTY則沒有。 所以使用德沃夏克將減少由於不必為字母“伸手”而造成的壓力。

如果你還沒有使用它,把那個“自然的”鍵盤從衣櫃裡拿出來。 打字很輕鬆。 註冊擊鍵的最低限度會做。

嘗試將咖啡限制在每天一到兩杯。 過量的咖啡因會讓你感覺不到疲倦,並很容易忘記你有RSI。

過量的酒精會破壞你的身體需要的睡眠,以便自己治愈。 良好的夜間休息對馴服RSI至關重要。

使用主動隔離加強拉伸。 一個很好的例程描述在手腕,手和手指拉伸例程 - 主動隔離拉伸

學習如何用鼠標靈活操作。 確保鼠標設計為雙手使用,並且有易於點擊的按鈕。

使用數位板作為您的主要輸入設備。 Wacom製作了一些體面的廉價平板電腦

祝你好運!


考慮在模擬usb(或ps / 2?)鍵盤的硬件中進行一些操作。 您將不再依賴於特定的操作系統或特定的OS API。 硬件解決方案將經受住時間的考驗。 當別人正在運行Windows 11時,不要在Windows 7中使用舊的API卡住! Arduino很容易學習。

有大量的信息和幫助Arduino。 它是為新手建立的硬件黑客平台。 它現在只會越來越大, 谷歌正在推動Arduino。

編輯:虛擬USB鍵盤softwarehardware


要解決這個問題,你需要一些東西:

  1. 一種從鍵盤上捕捉MIDI數據的方法。 根據接口:MIDI接口(經典)或USB MIDI接口(現代),最有可能的接口是計算機,因為它提供了最多的選項。 USB主機微控制器不像使用計算機那麼簡單。

  2. 將MIDI數據轉換為按鍵的方案。 就像一位用戶指出的那樣,和弦是要走的路,因為琴鍵的數量不依賴於鋼琴鍵的數量。

  3. 一種將密鑰注入操作系統的方法。 這將要求低級驅動程序是準確的。 我曾經使用過在Windows 7中將鍵盤和鼠標數據注入應用程序的應用程序,並且它可能很脆弱,並且取決於應用程序當前是否處於焦點。 這是界面中最難的部分。 可能的工作是創建一個HID USB鍵盤微控制器,該微控制器也具有串行接口。

串行接口將創建一個虛擬串行端口。 讀取MIDI數據並產生鍵擊的軟件可以將串行消息發送到虛擬串行端口。 微控制器會發送一個按鍵,所以它看起來像一個標準的鍵盤輸入。 這將允許連接MIDI端口和USB MIDI鍵盤。

嗯,用這種類型的界面,你也可以模擬鼠標,並使用一些鋼琴鍵設置鼠標軸和按鈕。 壓力可以用來確定鼠標指針的速度。 所以你可以消除鼠標。 這種方法的另一個好處是您連接的任何類型的輸入設備都可以與虛擬串行端口通信以產生鍵盤和鼠標事件。 所以如果你想添加諸如鼓式踏板或遊戲桿之類的其他硬件,那麼就需要調整與串行接口對話的程序。

另外一個關於上述內容的內容就像上面使用Arduino的一些內容,還包括來自Sparkfun的USB Host Shield來處理基於USB的音樂鍵盤。 這使得Arduino可以被編程為引導加載程序芯片中的鍵盤或鍵盤鼠標組合,並允許設備作為基於USB的音樂鍵盤的USB主機。 然後你將被覆蓋這兩種類型。 儘管如此,我仍然認為虛擬串口方法更靈活,並且從長遠來看更容易編程。 Arduino設備比桌面程序或服務更難改變。

還有另一種可能性:單手鍵盤已經存在。 我看過他們的視頻,但你必須確定這些是否會傷害你的手。