Menggunakan keyboard piano sebagai keyboard komputer [tertutup]

727

Saya memiliki masalah RSI dan telah mencoba 30 keyboard komputer yang berbeda yang semuanya membuat saya kesakitan. Bermain piano tidak membuatku sakit. Saya telah bermain piano selama sekitar 20 tahun tanpa masalah rasa sakit. Saya ingin tahu apakah ada cara untuk menangkap MIDI dari keyboard MIDI dan stroke keyboard output. Saya sama sekali tidak tahu tentang MIDI, tetapi saya ingin panduan tentang bagaimana mengubah sinyal ini menjadi penekanan tombol.

Peter Mortensen
sumber
mengapa harus menangkap midi, jika Anda dapat menggunakan keyboard synthesizer sebagai keyboard?
shevski
@I__: Sistem operasi apa yang Anda butuhkan untuk mendukung? Mungkin akan penting.
TJ Crowder
5
@shevski: Saya tidak mencoba melakukan apa pun, @I__ adalah orang yang mengajukan pertanyaan. Ia tidak ingin mengubah suara , melainkan sinyal acara keyboard digital yang dikirim oleh keyboard elektronik melalui Musical Interface Digital Interface . Ini sangat mirip dengan peristiwa keyboard komputer: "Catatan aktif" sesuai dengan keydown, "catatan" untuk keyup, dll. Anda bahkan dapat menggunakan data kecepatan untuk melakukan tindakan yang berbeda tergantung pada seberapa "keras" akor dimainkan. Saya suka ide itu.
TJ Crowder
34
Jika ini berfungsi, Anda dapat membuat kode menggunakan perangkat midi apa pun. Mungkin perlu beberapa latihan, tetapi menggunakan orkestra sebagai tim pengembangan harus menyenangkan.
Toon Krijthe
1
@I__: Jawaban yang paling terunggul mengarahkan Anda ke dukungan MIDI API Java sound, yang seharusnya membuat Anda menerima data MIDI, dan menjelaskan secara terperinci teori yang terlibat dalam mengubahnya menjadi serangkaian penekanan tombol. Jawaban kedua yang paling banyak dibicarakan berbicara tentang cara yang sangat memungkinkan Anda kemudian dapat menghubungkannya ke komputer menggunakan Arduino, termasuk ... (lanjutan)
TJ Crowder

Jawaban:

16

Perpustakaan yang bagus di .NET dengan dukungan midi penuh (BASS), buka http://www.un4seen.com .

Dan untuk bagian lain, menerjemahkan catatan keyboard midi ke tombol dan banyak lagi, saya akan pergi untuk AutoItX, ActiveX / COM dan antarmuka DLL ke autoIt. Info dan unduh, kunjungi http://www.autoitscript.com/site/autoit/

Tidak perlu menulis driver keyboard.

eln
sumber
430

Saya sudah bertahun-tahun tidak melakukan pemrograman MIDI, tetapi ide dasar Anda sangat bagus (tidak ada kata-kata).

MIDI adalah aliran "peristiwa" (atau "pesan"), dua yang paling mendasar adalah "note on" dan "note off" yang membawa serta nomor note (0 = C lima oktaf di bawah C tengah, melalui 127 = G lima oktaf di atas G di atas C tengah, dalam semi-nada). Peristiwa ini membawa nomor "kecepatan" pada keyboard yang peka terhadap kecepatan ("peka sentuhan"), dengan kekuatan (Anda dapat menebaknya) antara 0 dan 127.

Antara kecepatan, chording, dan pedal, saya pikir Anda bisa membuat antarmuka "mengetik" yang bagus untuk keyboard piano. Chording khususnya bisa menjadi teknik yang sangat kuat - seperti yang saya sebutkan di komentar, itu sebabnya stenograf peringkat-dan-file dapat menggunakan mesin stenotipe untuk bersaing dengan orang-orang yang berbicara selama berjam-jam berturut-turut, ketika bahkan juru ketik papan atas tidak akan t dapat untuk waktu yang lama melalui keyboard gaya-mesin tik normal. Seperti halnya stenografi mesin, Anda membutuhkan "kamus" tentang arti akor dan urutan akor. (Dapatkah Anda memberi tahu saya dulu bekerja di sisi perangkat lunak stenografi mesin?)

Untuk melakukan ini, bagian mendasarnya adalah:

  • Menerima input MIDI. Jangan mencoba melakukan ini sendiri, gunakan perpustakaan. Sunting : Rupanya, Java Sound API mendukung MIDI , termasuk menerima acara dari pengontrol MIDI. Keren. Halaman ini mungkin juga bermanfaat.
  • Mengubah data itu menjadi penekanan tombol yang ingin Anda kirim, misalnya melalui kamus yang saya sebutkan di atas.
  • Mengeluarkan penekanan tombol ke komputer.

Agar kompatibel dengan perangkat lunak secara luas, Anda harus menulis ini sebagai driver perangkat keyboard. Ini adalah plug-in ke sistem operasi yang berfungsi sebagai sumber untuk acara keyboard, berbicara dengan perangkat keras yang mendasarinya (dalam kasus Anda, keyboard piano). Untuk Windows dan Linux, Anda mungkin ingin menggunakan C untuk itu.

Namun, karena Anda hanya menghasilkan penekanan tombol (tidak mencoba mencegatnya, yang saya coba lakukan bertahun-tahun yang lalu), Anda mungkin dapat menggunakan fitur apa pun yang dimiliki sistem operasi untuk mengirim penekanan tombol buatan. Windows memiliki antarmuka untuk melakukan itu (mungkin beberapa, yang saya pikirkan adalah SendInputtetapi saya tahu ada beberapa antarmuka "jurnal" yang melakukan hal serupa), dan saya yakin sistem operasi lain juga melakukannya. Itu mungkin cukup untuk tujuan Anda - di sinilah saya mulai, karena rute driver perangkat akan menjadi canggung dan Anda mungkin harus menggunakan bahasa yang berbeda untuk itu daripada Jawa. (Saya penggemar berat Java, tetapi antarmuka yang digunakan sistem operasi untuk berbicara dengan driver perangkat cenderung lebih mudah dikonsumsi melalui C dan sejenisnya.)


Perbarui : Lebih lanjut tentang "kamus" akor untuk penekanan tombol:

Pada dasarnya, kamus adalah trie (terima kasih, @Adam) yang kami cari dengan pencocokan awalan terlama. Detail:

Dalam stenografi mesin, stenografer menulis dengan menekan beberapa tombol pada mesin stenotype secara bersamaan, lalu melepaskan semuanya. Mereka menyebut ini "stroke" dari keyboard; itu seperti memainkan akor pada piano. Stroke sering (tetapi tidak selalu) sesuai dengan suku kata bahasa yang diucapkan. Seperti suku kata, terkadang satu pukulan (akor) memiliki makna sendiri, di lain waktu hanya memiliki makna yang dikombinasikan dengan stroke berikut. (Pikirkan "baik" vs "baik" diikuti oleh "selamat tinggal"). Meskipun mereka akan sangat dipengaruhi oleh sekolah tempat mereka belajar, stenografer masing-masing akan memiliki "kamus" mereka sendiri dari apa stroke yang mereka gunakan untuk berarti apa, kamus mereka akan terus mengasah selama masa kerja mereka. Kamus akan memiliki entri di mana bagian stenografis ("steno", singkatnya) panjangnya satu pukulan, atau panjang beberapa kali pukulan. Seringkali, akan ada beberapa entri dengan stroke awal yang sama yang dibedakan oleh panjangnya dan oleh stroke berikutnya. Misalnya (dan saya tidak akan menggunakan steno nyata di sini, hanya placeholder), mungkin ada entri ini:

A = alpha
A / B = alfabet
A / B / C = alfabet
A / C = AC
B = lebah
B / C = karena
C = laut
D = anjing
D / D = Dee Dee

(Surat-surat itu tidak dimaksudkan sebagai catatan musik, hanya penanda abstrak.)

Perhatikan bahwa Amulai banyak entri, dan juga perhatikan bahwa cara Anda menerjemahkan Cstroke tergantung pada apakah Anda sebelumnya melihat A, a B, atau Anda baru mulai.

Perhatikan juga bahwa (walaupun tidak ditunjukkan dalam sampel sangat kecil di atas), mungkin ada beberapa cara untuk "memainkan" kata atau frasa yang sama, daripada hanya satu. Stenografer melakukan itu untuk membuatnya lebih mudah mengalir dari kata sebelumnya ke yang berikutnya tergantung pada posisi tangan. Ada analogi yang jelas dengan musik di sana, dan Anda bisa menggunakannya untuk membuat alur pengetikan Anda lebih mirip dengan bermain musik, untuk mencegah hal ini memengaruhi secara negatif pada bermain piano Anda dan untuk memaksimalkan kemungkinan ini benar-benar membantu RSI.

Saat menerjemahkan steno ke teks standar, sekali lagi kami menggunakan pencarian "pencocokan awalan terpanjang": Algoritma penerjemahan dimulai dengan stroke pertama yang pernah ditulis, dan mencari entri yang dimulai dengan stroke itu. Jika hanya ada satu entri, dan panjangnya satu stroke, maka kita dapat dengan andal mengatakan "itulah entri untuk digunakan", mengeluarkan teks yang sesuai, dan kemudian mulai dengan stroke berikutnya. Tetapi lebih mungkin, bahwa stroke mulai beberapa entri dengan panjang yang berbeda-beda. Jadi kita melihat stroke berikutnya dan melihat apakah ada entri yang dimulai dengan dua pukulan secara berurutan; dan seterusnya sampai kita mendapatkan korek api.

Jadi dengan kamus di atas, misalkan kita melihat urutan ini:

ACBBCABCABD

Begini cara kami menerjemahkannya:

  1. Aadalah awal dari tiga entri dengan panjang yang berbeda-beda; lihat stroke berikutnya:C
  2. A/Chanya cocok dengan satu entri; Output "AC" dan mulai segar dengan stroke berikutnya:B
  3. Bmulai dua entri; lihat stroke berikutnya:B
  4. B/Btidak memulai apa pun; ambil pertandingan terlama sebelumnya ( B) dan hasilkan itu ("lebah")
  5. Memiliki output B= "bee", kami masih memiliki Bstroke di buffer kami. Itu mulai dua entri, jadi lihat stroke berikutnya:C
  6. B/Ccocok dengan satu entri; Output "karena" dan mulai segar dengan stroke berikutnya:A
  7. Amulai tiga entri; lihat stroke berikutnya:B
  8. A/Bmulai dua entri; lihat stroke berikutnya:C
  9. A/B/Chanya cocok dengan satu entri; output "alfabet" dan mulai segar dengan goresan berikutnya:A
  10. Amulai tiga entri; lihat stroke berikutnya:B
  11. A/Bmulai dua entri; lihat stroke berikutnya:D
  12. A/B/Dtidak cocok dengan apa pun, jadi ambil kecocokan terlama sebelumnya ( A/B) dan gunakan untuk menghasilkan "alfabet". Itu membuat kita Dmasih dalam buffer.
  13. Dmemulai dua entri, jadi kami biasanya akan melihat stroke berikutnya - tetapi kami telah memproses semua stroke, jadi pertimbangkanlah secara terpisah. Dalam isolasi, itu diterjemahkan sebagai "anjing" sehingga menghasilkan itu.

Aspek-aspek di atas yang perlu diperhatikan:

  • Anda memiliki buffer stroke yang Anda baca tetapi belum diterjemahkan.
  • Anda selalu ingin mencocokkan paling banyak pukulan dengan satu entri yang Anda bisa. A/Bharus diterjemahkan sebagai "alfabet", bukan "alfa" dan "lebah".
  • (Tidak diperlihatkan di atas) Anda mungkin memiliki urutan goresan yang tidak dapat Anda terjemahkan, karena mereka tidak cocok dengan apa pun di kamus. (Orang Steno menggunakan kata benda "untranslate" - mis., Dengan kamus kami, stroke Eakan menjadi "untranslate".)
  • (Tidak diperlihatkan di atas) Beberapa teori steno memungkinkan serangkaian stroke yang sama berarti lebih dari satu hal, berdasarkan konteks yang lebih luas. Orang Steno menyebut ini "konflik". Anda mungkin ingin melarang mereka dalam proyek Anda, dan pada kenyataannya ketika steno digunakan untuk diterjemahkan secara manual oleh stenographer, konflik baik-baik saja karena mereka tahu hanya di mana dalam kalimat itu adalah pilihan yang tepat, tetapi dengan naiknya tentang terjemahan mesin, teori steno bebas konflik muncul secara khusus untuk menghindari keharusan membaca teks terjemahan yang dihasilkan dan konflik "memperbaiki".
  • Menerjemahkan secara real time (yang akan Anda lakukan) berarti bahwa jika Anda menerima kecocokan sebagian, Anda ingin memegangnya sambil menunggu chord berikutnya - tetapi mungkin hanya sampai batas waktu, pada titik mana Anda akan terjemahkan apa yang Anda miliki di buffer sebaik mungkin. (Atau mungkin Anda tidak ingin waktu habis; itu panggilan Anda.)
  • Mungkin yang terbaik untuk mengalami stroke yang mengatakan "abaikan stroke sebelumnya"
  • Mungkin yang terbaik untuk mengalami stroke yang mengatakan "hapus buffer sepenuhnya tanpa mengeluarkan apa pun"
TJ Crowder
sumber
6
@I__: Beberapa program mencoba untuk berbicara langsung ke perangkat keyboard dan jadi jangan bermain dengan baik dengan antarmuka seperti "sendkeys". Mudah-mudahan ini bahkan kurang umum sekarang daripada beberapa tahun yang lalu ketika saya terakhir berurusan dengan ini, dan seperti yang saya katakan, saya akan mulai dengan "sendkeys" seperti mekanisme dan hanya khawatir tentang yang lain jika dan ketika Anda perlu. (Mungkin yang terbaik untuk melakukan program cepat menguji kunci pengiriman [dengan sendirinya, bukan dengan menerimanya dari MIDI] - termasuk urutan kunci khusus - dan kemudian mengujinya dengan perangkat lunak yang ingin Anda kontrol sebelum Anda terlalu jauh di jalan setapak .)
TJ Crowder
7
Bagi mereka yang belum pernah mendengar ini, kamus yang Anda gambarkan pada dasarnya adalah Trie (diucapkan 'coba')
Adam
14
@I__: Menarik untuk menulis sekarang untuk mengatakan itu. Apa lagi yang kamu inginkan? Saya pikir saya telah membahas banyak aspek penting dari apa yang perlu Anda lakukan. Saya belum melakukannya , atau menunjuk ke siapa pun yang memiliki, karena saya memiliki hal-hal lain yang harus dilakukan dan tidak tahu solusi yang sudah dibangun. Tetapi dalam hal membangun solusi, saya pikir saya telah mengarahkan Anda ke arah yang benar.
TJ Crowder
2
Perhatikan bahwa Anda dapat memacetkan semua akor dalam array linier dan melakukan traversal setiap kali Anda menerima acara midi, dan masih tidak mengalami perlambatan yang nyata. Menggunakan trie sedikit berbau optimasi prematur.
FeepingCreature
5
@FeepingCreature: Ketika saya melakukan ini dengan stenograf dan reporter pengadilan, kamus mereka dapat dengan mudah lari ke ratusan ribu entri (saya ingat orang yang memecahkan jutaan tanda). Tidak ada yang terlalu dini tentang menggunakan strategi optimalisasi, kami berurusan dengan 12 MHz 386s. Dalam kasus I___, jika dia setuju dengan ide Arduino (yang merupakan ide yang sangat keren), dia juga akan berurusan dengan perangkat keras yang kurang bertenaga untuk era modern, meskipun tentu saja hal-hal yang sangat cepat lebih cepat daripada yang kita miliki. Saya pikir kamusnya akan cenderung lebih kecil secara dramatis, tapi ...
TJ Crowder
184

Pertimbangkan untuk melakukan sesuatu pada perangkat keras yang mengemulasi keyboard usb (atau ps / 2?). Anda tidak lagi tergantung pada OS tertentu, atau API OS tertentu. Solusi perangkat keras akan bertahan dalam ujian waktu. Jangan terjebak menggunakan API lama di Windows 7 saat semua orang lain menjalankan Windows 11! Arduino cukup mudah dipelajari.

Ada banyak info dan bantuan di luar sana untuk Arduino. Ini adalah platform peretasan perangkat keras yang dibangun untuk pemula. Itu hanya akan semakin besar sekarang bahwa Google mendorong Arduino.

EDIT: perangkat lunak dan perangkat keras Keyboard USB Virtual

Brian O'Dell
sumber
Saya suka ide menggunakan Arduino untuk ini. Memori bisa menjadi masalah. Sepertinya papan pra-desain terbesar memiliki 256k Flash (yang 8k digunakan oleh bootloader). Kembali pada hari itu, kami menjejalkan terjemahan waktu nyata / tampilan / pengeditan singkatan mesin menjadi 1M di bawah DOS (misalnya, 640k biasa ditambah baik EMS atau memori tambahan), tapi kami menulis kode C ketat dan perakitan dan kamus (yang bisa dengan mudah menjadi> 250k sendiri) ada di disk. Di sini tidak ada tampilan atau pengeditan simultan, jadi itu bagus, tetapi kamus harus kecil ...
TJ Crowder
Oh, tidak apa-apa. Saya secara rutin berurusan dengan wartawan pengadilan yang memiliki kamus, bahkan disimpan dalam bentuk yang sangat ringkas yang kami gunakan, berukuran beberapa megabita. Yang terbesar yang saya lihat secara pribadi adalah 4,5MB - dan sekali lagi, itu disimpan dalam bentuk yang sangat terkompresi. Kombinasikan itu dengan fakta bahwa ada lebih sedikit tombol pada keyboard steno daripada keyboard piano ... Meski begitu, Arduino memiliki port USB, sehingga kamus bisa menggunakan adaptor flash USB, atau bahkan (bertenaga eksternal) ) SSD atau HDD.
TJ Crowder
2
@Anda mungkin ingin mempertimbangkan amat kecil alih-alih arduino ( pjrc.com/teensy ) secara signifikan lebih banyak memori dan dapat langsung meniru keyboard. Ini kompatibel dengan banyak pustaka arduino yang sudah ada dan yang tidak kompatibel hanya membutuhkan penugasan ulang pin. - Secara bergantian, atmega juga membuat papan demo yang memiliki 16 MB built in flash dan biaya sekitar $ 30 (at90usbkey)
Marc
8
Merancang antarmuka piano yang bermanfaat untuk komputer bukanlah tugas yang mudah. IMHO, OP pertama-tama harus membuat prototipe di lingkungannya saat ini, kemudian, jika memenuhi kebutuhannya, khawatir tentang portabilitas. Kecuali, tentu saja, alternatif portabel tidak terasa lebih sulit.
Emilio M Bumachar
111

Bagi saya sepertinya Anda kurang mencari saran tentang cara membangun ini sendiri dan lebih banyak bertanya sumber daya apa yang sudah ada di luar sana untuk mencapai apa yang Anda inginkan. Bergantung pada OS Anda, ada banyak cara untuk mencapai ini tanpa harus menulis program Anda sendiri dari awal:

Stroke MIDI

Gratis. Untuk Mac OS X 10.3 dan lebih tinggi . Yang satu ini secara khusus hadir dengan "kemampuan untuk menggunakan papan ketik MIDI sebagai pengganti papan ketik komputer yang penuh sesak nafas."

Penerjemah MIDI Bome

Gratis / Kartu Pos (agak aneh). Untuk Windows 2000 dan atas, dan Mac OS X . Awalnya tampaknya lebih diarahkan pada penggunaan tipe AutoHotkey , tetapi pada pencarian lebih lanjut saya pikir itu bisa melakukan apa yang Anda inginkan dengan baik.

Max dan alias.keyboard

Gratis. Untuk Mac OS X . Tidak persis solusi "siap di luar kotak", tetapi jika Anda merasa nyaman dengan konfigurasi perangkat dasar, itu seharusnya tidak terlalu buruk.

kathryn
sumber
49

Anda dapat mengakses perangkat keras dengan sampel kode sumber dalam .NET di MIDI DotNet .

Sampel kerja lengkap sebagai kode sumber untuk membuat aliran data catatan MIDI ada di VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, di suatu tempat juga versi .NET)

Cara untuk mensimulasikan ketukan keyboard ada di VB 5/6-Tipp 0155: Tastaturereignisse simulieren (Visual Basic 6.0, di suatu tempat ada versi .NET juga)

Dan mengenali penekanan tombol dijelaskan dalam Tipp-Upload: VB.NET 0266: Globaler KeyHook .

Masukkan deskripsi gambar di sini

Kemudian, cukup gunakan matriks kerja yang bagus untuk pemain piano Timo Boehme www.goldengel.ch

Pada piano dan ketika Anda seorang pemain yang baik, Anda dapat memiliki 10 jari pada keyboard dan jika matriks dapat digunakan, Anda bisa jauh lebih cepat daripada pengguna keyboard komputer mana pun menurut saya. :-)

Dalam hal itu, jika saya mengerti pertanyaan Anda dengan benar, itu seharusnya tidak menjadi masalah besar.

Nasenbaer
sumber
41

Saya mempelajari kinerja piano di perguruan tinggi dan kemudian masuk ke desain interaksi, pemrograman, dan menggunakan Vim , jadi saya sebenarnya telah menghabiskan banyak waktu membuat prototipe hal-hal seperti ini.

Anda bisa mendapatkan ini bekerja cukup cepat di Linux dengan menggunakan bahasa pemrograman grafis untuk seniman multimedia, " Pure Data ," bersama dengan x11key external oleh Alex Andre .

Di Mac, Anda dapat menggunakan MidiStroke . Saya percaya metode pada Windows melibatkan MidiOx dan AutoHotKey alat. Di lain waktu saya memiliki versi menggunakan plugin Java untuk Max / MSP . Saya percaya Patrice Colet membuat windows eksternal untuk Pure Data yang berfungsi dengan baik, tetapi saya sepertinya tidak dapat menemukannya lagi. Juga, ada eksternal untuk MaxMSP yang dapat melakukan ini pada Windows. Akhirnya, Osculator yang tidak bebas tetapi mengagumkan dapat melakukan apa yang Anda inginkan - lihat halaman fitur.

Ketika saya membuatnya berfungsi, saya tidak pernah terjebak dengan itu, karena saya tidak bisa berhenti tooling dengan tata letak. Itu keren hanya memiliki monitor saya di keyboard listrik saya, meskipun! Semoga berhasil.

Peter Nore
sumber
37

Tentang MIDI

Anda menyatakan bahwa Anda "sama sekali tidak tahu tentang MIDI". Teknologi MIDI cukup mudah setelah Anda pegang, tetapi bisa membingungkan pada awalnya. Salah satu sumber daya yang telah sangat membantu saya dalam memahami dasar-dasar untuk MIDI (yang tentunya diperlukan jika Anda ingin memprogram interaksi MIDI), adalah buku berjudul MIDI for the Technophobe . Ini buku yang mudah dibaca dan sangat membantu.


Data Murni & Maks

Dalam pengalaman saya mengembangkan multimedia interaktif, ada dua program yang sangat mirip yang saya temui yang memfasilitasi menghubungkan dan memetakan sinyal / input dari perangkat apa pun.

Ini adalah Max untuk lingkungan Mac dan Pure Data untuk lingkungan PC. Keduanya memiliki banyak dokumentasi online dan tutorial YouTube. Video Max / MSP Tutorial 1 - menggunakan keyboard komputer Anda sebagai midikeyboard (gaya ableton) menunjukkan program yang dibangun di Max yang memetakan keyboard komputer ke input keyboard MIDI (yang pada dasarnya kebalikan dari apa yang Anda coba lakukan). Anda bisa mendapatkan hasil yang diinginkan dengan menggunakan pola yang sama, tetapi membalikkan sinyal / pemetaan.


Autohotkey

AutoHotKey adalah utilitas open source gratis untuk Windows yang memungkinkan Anda untuk memetakan kembali kunci dan tombol pada perangkat Anda untuk makro. Ini secara asli mendukung keyboard QWERTY, joystick dan makro mouse.

Namun, saya dapat menemukan implementasi yang mendukung pemetaan spesifik yang Anda cari. Dua utas ini menjelaskan prosesnya:

  1. Dukungan MIDI IN di AutoHotkey , diskusi tentang use case. Penulis sedang mencari program yang dapat mendeteksi input MIDI IN dan menerjemahkannya ke penekanan tombol .

  2. Pustaka masukan MIDI , solusi untuk masalah penulis dan kode / tambalan yang diposting ke AutoHotKey yang sebenarnya mengimplementasikan hasil yang Anda inginkan.

Pada dasarnya, sepertinya AutoHotKey, bersama dengan tambalan khusus pengguna ini, akan memberikan apa yang Anda perlukan untuk membuat pemetaan dari keyboard MIDI ke sinyal input keyboard QWERTY. Yang harus Anda lakukan adalah menginstal, mengkonfigurasi, dan mendefinisikan pemetaan Anda.


Ada yang lain?

Beberapa jawaban lain telah memberi Anda informasi yang jauh lebih luas tentang pemrograman MIDI dan MIDI, secara umum, tetapi sebagaimana dinyatakan oleh pos Anda, hal itu tampaknya tidak sesuai dengan yang Anda cari. Saya ingin membantu Anda lebih banyak jika mungkin, tetapi akan lebih mudah jika Anda bisa lebih spesifik tentang jenis informasi yang Anda cari. Misalnya, apakah Anda lebih tertarik dengan cara mengubah sinyal input keyboard MIDI ke sinyal keyboard QWERTY , atau apakah minat utama Anda menemukan solusi di luar kotak untuk masalah spesifik Anda? Apa yang Anda cari yang belum ditangani?

smartcaveman
sumber
27

Anda dapat meretas keyboard USB Anda sendiri dengan cepat menggunakan pengontrol mikro Teenys.

Bahkan, mereka memiliki kode contoh untuk cara membuat keyboard USB .

Anda dapat mendekati dua cara ini:

  1. Dapatkan piano tua dan pasang kawat langsung ke yang muda

  2. Tambahkan logika tambahan untuk menghubungkan ke port MIDI dan decoding yang diperlukan.

cmcginty
sumber
Ini adalah jawaban yang paling menjanjikan karena setelah Anda menyelesaikan perangkat, itu akan berfungsi pada komputer dan OS apa pun. Gunakan untuk bekerja atau hanya senang bahwa Anda dapat memutakhirkan komputer Anda tanpa khawatir tentang keyboard. Saya akan menggunakan dua perangkat Teensy, dan menghubungkannya bersama-sama dengan pin I / O mereka. Karena Teensy sudah mendukung USB MIDI pjrc.com/teensy/td_midi.html kode Anda hanya perlu menjaga sinyal yang bergerak antara keyboard belly dan midi belly.
Michael Dillon
24

Sebenarnya, saya mengerjakan ini beberapa waktu yang lalu, mencoba untuk menangkap input drum Rock Band ke komputer saya (membuat emulator drum kecil buatan Java) Lagi pula, saya mengajukan pertanyaan di sini tentang itu, masalah waktu tunda (ada kode polling di sana , bersama dengan apa yang saya coba lakukan.). Dan jika saya dapat menemukan program saya, saya dapat memberi Anda kode, itu menggunakan API pihak ketiga ( JInput ).

Semoga beruntung.

Brendan
sumber
23

Coba penerjemah MIDI Bome .

Ia bekerja lintas platform, dapat mengonversi input MIDI apa pun menjadi keystoke dengan mudah, cepat untuk setup dan konfigurasi, plus gratis untuk penggunaan pribadi.

Ada tutorial, Tip Cepat: Terjemahan MIDI - MIDI keystrokes , tentang cara mudah mengaturnya:

Pada dasarnya, ada kemungkinan tak terbatas dari apa yang dapat Anda lakukan, termasuk kunci chording dan modifier. Saya menggunakannya untuk rig audio langsung saya untuk mengontrol DAW saya menggunakan piano saya dan tidak pernah memiliki masalah.

stepheninohio
sumber
15

Ada program yang disebut GlovePIE . Anda dapat memprogramnya dalam bahasa skrip sederhana, dan saya percaya ini mendukung MIDI. Saya tidak yakin apakah ini cocok dengan kategori "Java", tetapi tetap saja, ini adalah program yang hebat. Saya telah menggunakannya untuk mengontrol robot menggunakan pengontrol PS3 . Ini sangat kuat.

Peter Mortensen
sumber
15

Banyak keyboard memiliki konektor port serial ( RS-232 ) untuk mengirim sinyal MIDI ke komputer. Saya menggunakan program yang disebut Girder untuk mengubah komunikasi port serial menjadi stroke keyboard.

Girder memiliki fitur "pemetaan" yang memungkinkan Anda memetakan setiap tombol, satu per satu, ke tombol yang sesuai.

Ini mungkin solusi sederhana yang Anda cari!

Scott Rippey
sumber
12

Belajar stenografi!

Jelas dari semua diskusi di pihak Anda. Anda tidak ingin menemukan kembali roda apa pun, dari sudut pandang teknis. Tetapi begitu Anda memiliki koneksi (apa pertanyaan ini diajukan) dan bangun dan bekerja, Anda masih memiliki sebagian besar pekerjaan di depan Anda: Anda harus melatih otak Anda. Anda juga harus menemukan cara yang paling cerdas dan paling efisien untuk melakukan itu - masalah desain yang sama sekali tidak sesuai dengan teknologi komputer. Anda atau salah satu dari kami akan gagal.

Untungnya, masalahnya telah dipecahkan dan diasah selama berabad-abad ...

Pelajari stenografi!

Ya, ini akan membuat Anda mengembalikan beberapa jack. Tetapi berapa nilainya ratusan jam dari waktu Anda sendiri, dengan pada akhirnya, hasil yang kurang menguntungkan? Selain itu, artikel Wikipedia stenografi mengatakan, 'lebih mirip keyboard piano'.

Kecuali, tentu saja, Anda ingin efek tontonan berjalan. Saya harus mengakui, saya tidak pernah memikirkan kemungkinan ini, itu akan sangat menghibur melihat seseorang mengeluarkan teks dari keyboard piano!

Anda bisa mulai dengan keyboard USB dengan touchpad (atau stik penunjuk akan lebih ergonomis?), Gunakan Plover untuk menerjemahkannya (saya yakin itu dapat dikonfigurasikan untuk membiarkan tombol non-huruf mempertahankan fungsinya karena sangat penting untuk pemrograman), atau, ikuti utas Re: Keyboard Plover untuk menggulung keyboard stenografi USB Anda sendiri, atau, membeli stenotipe .

Semoga berhasil!

FastAl
sumber
Di mana {dan} di keyboard stenografi? Bagaimana Anda mengetik nama yang bukan kata-kata pthread?
bobobobo
Tautan wikipedia salah dan seharusnya en.wikipedia.org/wiki/Stenography
joelhoro
11

Lihatlah game arcade MAME . Mereka telah membangun perangkat perangkat keras untuk memungkinkan input dari sejumlah item yang berbeda. The IPAC , misalnya, mualaf sinyal dari perangkat input ke dalam USB bahwa komputer dapat kemudian digunakan untuk kunci meniru. Anda dapat menggunakan kombinasi perangkat input yang diatur dengan cara apa pun yang tampak nyaman tanpa logika pemrograman yang gila - karena perangkat lunak untuk menginterpretasikan input sudah dilakukan dan diuji dengan baik.

Saya telah melihat input kokpit simulator penerbangan, kios khusus, dan sistem pemungutan suara yang dibangun dalam metode ini ..... dan harganya tepat!

bpeterson76
sumber
10

Untuk mengatasinya Anda perlu beberapa hal:

  1. Cara untuk mengambil data MIDI dari keyboard Anda. Bergantung pada antarmuka: antarmuka MIDI (klasik) atau antarmuka USB MIDI (modern) antarmuka yang paling mungkin adalah ke komputer karena menyediakan sebagian besar opsi. Mikrokontroler host USB tidak sesederhana hanya menggunakan komputer.

  2. Skema untuk mengubah data MIDI menjadi penekanan tombol. Seperti yang ditunjukkan oleh seorang pengguna, akor adalah cara untuk pergi karena jumlah kunci tidak akan tergantung pada jumlah kunci piano.

  3. Cara untuk menyuntikkan kunci ke sistem operasi. Ini akan membutuhkan driver tingkat rendah untuk menjadi akurat. Saya telah bermain-main dengan aplikasi yang menyuntikkan data keyboard dan mouse ke dalam aplikasi di Windows 7, dan itu bisa tidak jelas dan tergantung pada apakah suatu aplikasi saat ini dalam fokus. Ini adalah bagian tersulit dari antarmuka. Apa yang mungkin berhasil adalah membuat mikrokontroler keyboard USB HID yang juga memiliki antarmuka serial.

Antarmuka serial akan membuat port serial virtual. Perangkat lunak yang membaca data MIDI dan menghasilkan penekanan tombol dapat mengirim pesan serial ke port serial virtual. Mikrokontroler akan mengirim keystroke sehingga akan terlihat seperti input keyboard standar. Ini akan memungkinkan antarmuka port MIDI dan keyboard USB MIDI.

Hmmm, dengan jenis antarmuka ini Anda juga bisa mensimulasikan mouse dan menggunakan beberapa pengaturan tombol piano untuk sumbu dan tombol mouse. Tekanan dapat digunakan untuk menentukan kecepatan penunjuk mouse. Jadi, Anda bisa menghilangkan mouse juga. Manfaat lain dari pendekatan ini adalah semua jenis perangkat input yang Anda sambungkan dapat berbicara dengan port serial virtual untuk menghasilkan acara keyboard dan mouse. Jadi jika Anda ingin menambahkan perangkat keras lain seperti pedal drum atau joystick, itu akan menjadi masalah menyesuaikan program yang berbicara dengan antarmuka serial.

Pandangan lain di atas adalah seperti beberapa diposting di atas untuk menggunakan Arduino, tetapi juga menyertakan USB Host Shield dari Sparkfun untuk menangani keyboard musik berbasis USB. Ini memungkinkan Arduino diprogram sebagai kombo keyboard atau mouse keyboard dalam chip boot loader dan memungkinkan perangkat untuk bertindak sebagai host USB untuk keyboard musik berbasis USB. Maka Anda ditanggung untuk kedua jenis. Meskipun, saya masih berpikir metode port serial virtual lebih fleksibel dan akan lebih mudah diprogram dalam jangka panjang. Perangkat Arduino akan lebih sulit diubah daripada program atau layanan desktop.

Ada kemungkinan lain: Keyboard satu tangan yang sudah dikunci sudah ada. Saya telah melihat video tentang mereka, tetapi Anda harus menentukan apakah itu menyakiti Anda atau tidak.

Demolishun
sumber
7

Seharusnya cukup mudah menggunakan sesuatu seperti antarmuka .NET DirectSound untuk menghubungkan ke perangkat MIDI. Anda perlu mengidentifikasi perangkat MIDI target Anda dan kemudian mendapatkan kode untuk mendengarkan pada pesan yang masuk (ada artikel tentang melakukan ini melalui Google).

Karena Anda menggunakan MIDI sebagai keyboard, pada dasarnya hanya ada dua pesan MIDI yang perlu Anda deteksi, yaitu note on dan note off. Pesan MIDI adalah tiga byte data yang menentukan perintah, catatan, dan kecepatan. Catatan adalah hanya nomor catatan (kadang-kadang tumpukan MIDI 'buruk' mengirim catatan dengan kecepatan nol yang juga harus Anda harapkan).

Setelah Anda memiliki pesan yang menerjemahkannya, output keyboard harus cukup sederhana dari .NET.

Ada banyak saran dalam jawaban lain tentang teknis; Saya hanya ingin memberi Anda gambaran tentang pesan MIDI yang sebenarnya. Semoga berhasil!

Simon Inns
sumber
Sebagai catatan, dokumen 'Definisi Kelas Serial Bus Perangkat Universal untuk Perangkat MIDI' memberikan gambaran yang sangat rapi tentang pesan MIDI: usb.org/developers/devclass_docs/midi10.pdf
Simon Inns
7

Anda akan mendapatkan hasil yang lebih baik dan lebih bahagia (terlepas dari sistem operasi dan / atau program DAW apa yang ingin Anda gunakan) dengan memainkan keyboard MIDI eksternal sebagai pengontrol melalui kartu suara Anda. Lalu rutekan itu ke perangkat lunak GB Anda (atau apa pun) dan nada menghasilkan banyak suara yang telah mereka berikan kepada Anda secara real-time.

Jika kartu suara Anda tidak mendukung MIDI I / O (ins / out / thrus), itu tidak masalah. Anda dapat mempertimbangkan untuk meneliti dan berinvestasi dalam konverter top table MIDI eksternal. Banyak yang dilengkapi untuk lebih lanjut mengkonversi out MIDI ke USB 2.0 (dengan melewatkan kartu suara yang ada sama sekali).

Sebagai contoh: cukup sulit untuk mendapatkan hasil note note "mirip manusia" melalui opsi kunci perubahan Z dan X menggunakan keyboard komputer dan alat pensil. Sebaliknya, ketika jari Anda sendiri bisa memainkannya dengan keyboard MIDI dari rentang register oktaf fisiknya sendiri — segera!

Saya menyadari kendala anggaran mungkin terlibat. Tetapi, beberapa dari keyboard oktaf tipe 5 "Casio" yang tampaknya murah ini dijual di Radio Shack dengan harga di bawah $ 100,00 Dolar AS (* atau kurang) adalah semua yang Anda perlukan (ditambah, beberapa patch suara on-board mereka dan modul sequencer berbunyi dan menangani luar biasa baik untuk hal-hal lain juga).

Opsi keyboard RadioShack MIDI .

Adapun konverter MIDI eksternal untuk kartu suara yang ada, saya telah menjalankan beberapa pencarian Google untuk Anda sebagai berikut dengan platform Mac khusus dalam pikiran:

Banyak informasi konversi MIDI eksternal ini mungkin sulit bagi Anda pada awalnya, jadi saya telah merinci lebih banyak hal sebagai "ramah pengguna" untuk pertimbangan & anggaran Anda:

Tidak ada yang salah dengan memfasilitasi keyboard virtual seperti VST saat menggunakan DAW . Mereka memiliki tempat mereka.

Tapi, Anda terdengar seperti keyboardis yang ulung. Jadi, mengapa tidak mempertimbangkan opsi konversi MIDI / keyboard eksternal yang baru saja saya sebutkan untuk diri Anda sendiri?

Semoga berhasil dan saya harap ini memberi Anda beberapa ide yang dapat dan akan bekerja untuk Anda!

Angshuman Bhattacharjee
sumber
6

Jika Anda tidak ingin melakukan pemrograman sendiri tetapi hanya ingin masalah terpecahkan, Anda cukup membeli keyboard USB-MIDI tempat Anda dapat menetapkan ulang tombol apa saja untuk mengirim sinyal output keyboard QWERTY alih-alih MIDI-output, untuk contoh M-Audio Axiom Pro

Metode ini akan bekerja dengan OS apa pun dan komputer apa pun yang mendukung keyboard USB standar karena MIDI-keyboard akan mengidentifikasi dirinya sebagai keyboard QWERTY standar.

Martin Odhelius
sumber
apakah Anda tahu apakah mungkin untuk menetapkan akor pada penekanan tombol tertentu juga? misalnya jika saya memainkan kunci C mayor saya dapat memiliki yang diterjemahkan ke "rubah melompat"
l --'''''''---------------- '' '' '' '' ' '
Maaf karena tidak menjawab begitu cepat, saya telah berlibur selama 4 hari;) Tidak, sayangnya Anda hanya dapat menetapkan satu kode-QWERTY per kunci, sehingga cukup berfungsi sebagai keyboard standar.
Martin Odhelius
Btw, jika Anda membeli satu, ingatlah untuk membeli PRO-one, karena saya rasa versi non-PRO memiliki fungsi penugasan QWERTY.
Martin Odhelius
Saya tidak berpikir itu mungkin untuk menetapkan akord ke kode ASCII, hanya satu kunci per kode, tapi saya akan memeriksanya sendiri pada Aksioma malam ini ketika saya pulang kerja.
Martin Odhelius
Saya hanya memperhatikan bahwa hanya mungkin untuk menetapkan kode qwerty ke tombol kontrol (tombol fungsi, bantalan drum, tombol angka dll), bukan ke tombol piano yang sebenarnya pada keyboard. Saya memiliki keyboard ini sendiri dan yakin itu mungkin untuk menetapkan kode ascii ke tombol apa pun, tetapi sekarang ketika saya mencobanya saya perhatikan itu salah! Saya sangat menyesal untuk ini, apakah mungkin mengembalikan imbalan dengan cara tertentu?
Martin Odhelius
6

Anda dapat menggunakan skrip AutoIt sederhana untuk membaca acara MIDI, lihat Input MIDI .

Anda juga membutuhkan MIDI UDF dan mensimulasikan penekanan tombol .

Membaca acara MIDI harus mudah, tetapi pengontrol MIDI yang berbeda (instrumen) memiliki fitur yang berbeda. Cobalah untuk mencari tahu apa yang bisa dilakukan piano MIDI Anda terlebih dahulu, kemudian lihat bagaimana Anda bisa memetakan fitur-fitur itu dengan baik pada QWERTY- tombol papan tombol yang disimulasikan .

Jika mau, Anda dapat memiliki sesuatu di layar atau di baki untuk membantu Anda melihat apa yang Anda lakukan (maksudnya, untuk Shift, Ctrldan Altsimulasi).

Martijn
sumber
5

Anda bisa melihat keyboard chorded . Mereka memiliki keuntungan bahwa Anda tidak perlu menulis driver untuk mereka sebelum Anda dapat menggunakannya, dan beberapa mirip dengan tata letak keyboard piano.

Peter Mortensen
sumber
5

Jika Anda tahu coding di Java, Anda bisa menggunakan cara ini:

Pertama, implementasikan javax.sound.midi.Receiverdengan asend(..) metode yang memetakan peristiwa 'Catatan pada' untuk penekanan tombol seperti yang Anda inginkan.

Anda perlu mendapatkan konten MidiMessage dengan getMessagemetode dan intepret dengan cara Anda. Arti byte pesan dapat ditemukan di MIDI Messages .

Setelah menerima 'note on' atau 'note off' untuk kunci keyboard tertentu, Anda dapat memetakannya ke kunci yang Anda suka dengan menetapkannya sebagai konstanta kelas KeyEvent, sesuatu seperti C # 4 -> KeyEvent.VK_A dan seterusnya . Kode kunci ini kemudian dapat digunakan oleh java.awt.Robotmetode keyPress dan keyRelease untuk benar-benar mengirim penekanan tombol ke OS dan dengan demikian ke aplikasi lain.

dronus
sumber
4

Saya setuju dengan jawaban Brian O'Dell - jika ini proyek saya, saya akan melakukannya di perangkat keras. Ini memiliki keuntungan sebagai platform dan perangkat keras independen - kotak Anda menggantikan kebutuhan untuk antarmuka MIDI-USB dan PC API.

mbed adalah platform prototyping cepat yang sangat mudah dipelajari, dan memiliki beberapa keunggulan dibandingkan Arduino IMHO (kompiler online, flash 512 KB, 96 MHz, bahasa C ++). Ini memiliki antarmuka keyboard USB dan antarmuka USB Midi telah ditulis sebelumnya untuk Anda.

Komunitas ini sangat ramah dan bersedia membantu, dan ada banyak proyek yang menggunakan emulasi menyembunyikan MIDI dan USB - cari Youtube untuk "mbed MIDI" atau sejenisnya.

Alex L
sumber
4

Jika Anda menggunakan Linux, silakan ambil di Footware .

Itu harus persis apa yang Anda cari - jika Anda menyesuaikan pitch MIDI ke tombol yang Anda sukai ...

Saya tidak pernah berpikir ini bisa bermanfaat bagi siapa pun kecuali saya; o)

FlashKorten
sumber
2
Pada pekerjaan saya sebelumnya sebagai admin, saya memiliki pengontrol kaki di bawah meja saya - untuk meminimalkan meninggalkan home-row in vim
FlashKorten
2

Coba gunakan sistem berbasis mikrokontroler, seperti Arduino .

Peter Mortensen
sumber
1

Ini tidak akan terlalu sulit.

Saya berasumsi Anda menggunakan Windows , tidak yakin tentang itu. Saya telah menulis sequencer MIDI , http://pianocheetah.com , dalam bahasa C ++ lama , dan itu memungkinkan Anda menggunakan keyboard piano untuk menjalankan perintah. Tidak ada alasan Anda tidak dapat melakukan hal yang sama untuk menekan tombol ke aliran input keyboard.

Tapi ayolah sekarang. Anda ingat berapa lama Anda mempelajari keyboard sejak awal, bukan? Apakah Anda bersedia melakukan itu lagi? Dan apakah Anda bersedia mencemari keyboard Anda yang diberkati dengan sekelompok simbol kunci yang tampak bodoh di atasnya?

Anda harus menggunakan setidaknya 26 alfa, 10 angka, 11 tanda baca, dan setidaknya 12 tombol fungsi DAN status bergesernya. Jadi itu 60 kunci plus status bergeser. Itu akan membakar 5 oktaf kunci penuh. Anda akan melakukan piano "hop" = semua = waktu. Ucapkan selamat tinggal pada sentuhan mengetik.

Anda dapat menyelamatkan diri dari RSI , tetapi Anda telah menciptakan jenis mimpi buruk lain untuk diri sendiri.

Dan semoga sukses membuat bos Anda membelikan Anda keyboard MIDI di tempat kerja.

Jika Anda benar-benar belajar bermain piano, Anda telah belajar cara bermain bebas stres. Lakukan itu pada keyboard QWERTY . Tidak ada ketegangan. Mulai dengan lambat.

Stephen Hazel
sumber
Terima kasih atas kata-kata baiknya, tapi saya sudah berusaha keras untuk hal ini dan tidak berencana menjadikannya open source - maaf Tapi yang Anda lakukan adalah menggunakan midiInOpen (); berikan itu dengan panggilan balik untuk memproses input midi; abaikan semuanya kecuali untuk kejadian yang tercatat, petakan catatan midi ke beberapa tombol keyboard dan masukkan ke dalam aliran input keyboard (saya lupa api untuk itu, tapi saya cukup yakin ada satu, setidaknya).
Stephen Hazel