Piyano klavyesini bilgisayar klavyesi olarak kullanma [kapalı]


727

Ben RSI sorunları ve tüm bana acı neden 30 farklı bilgisayar klavyeleri çalıştılar. Piyano çalmak bana acı vermiyor. Yaklaşık 20 yıldır hiçbir ağrı sorunu olmadan piyano çalıyorum. Bir MIDI klavyesinden MIDI yakalamanın ve klavye konturlarının çıkışının bir yolu olup olmadığını bilmek istiyorum. MIDI hakkında hiçbir şey bilmiyorum ama bu sinyali bir tuşa nasıl çevireceğimi öğrenmek istiyorum.


Bir sentezleyici klavyeyi klavye olarak kullanabiliyorsanız neden midi yakalamak için?
shevski

@I__: Hangi işletim sistemini desteklemeniz gerekiyor? Muhtemelen önemli olacak.
TJ Crowder

5
@shevski: Hiçbir şey yapmaya çalışmıyorum, @I__ soruyu soran kişi. Sesi dönüştürmek istemiyor , daha ziyade Müzik Aleti Dijital Arayüzü üzerinden elektronik klavyeler tarafından gönderilen dijital klavye olay sinyalleri . Bunlar, bilgisayar klavyesi olaylarına çok benzer: "Not on", tuşlara, "not off" a, keyup'a vb. Fikri seviyorum.
TJ Crowder

34
Bunu işe yaratırsa, herhangi bir midi aygıtı kullanarak kod yazabilirsiniz. Muhtemelen biraz pratik gerektirir, ancak bir orkestrayı geliştirme ekibi olarak kullanmak eğlenceli olmalıdır.
Toon Krijthe

1
@I__: En çok beğenilen cevap , Java ses API'sının MIDI desteğine yönlendiriyor ve bu da MIDI verilerini almaya devam etmenizi sağlıyor ve bunu bir dizi tuş vuruşuna dönüştürmeyle ilgili teoriyi ayrıntılı olarak açıklıyor. En çok oylanan ikinci cevap , daha sonra da dahil olmak üzere bir Arduino kullanarak bir bilgisayara bağlayabileceğiniz çok geçerli bir yoldan bahsediyor ... (devam ediyor)
TJ Crowder

Yanıtlar:



430

Yıllar boyunca hiçbir MIDI programlaması yapmadım, ama temel fikriniz çok sağlam (pun yok).

MIDI, "olay" (veya "mesajlar") akışıdır; bunlardan en temel olanı, onlarla birlikte not numarasını taşıyan "not açık" ve "not kapalı" dır (0 = C, orta C'nin altında beş oktav, 127 = G yarı tonlarda orta C'nin üzerindeki G'nin üzerinde beş oktav). Bu olaylar, klavyelerde hız duyarlı ("dokunmaya duyarlı"), 0 ile 127 arasında bir kuvvetle (tahmin ettiniz) bir "hız" numarası taşır.

Hız, akor ve pedallar arasında, piyano klavyesi için oldukça iyi bir "yazma" arayüzü bulabileceğinizi düşünüyorum. Özellikle akor çok güçlü bir teknik olabilir - yorumlarda bahsettiğim gibi, rütbe ve dosya stenografları üst düzey daktilocular bile saatlerce konuşan insanlara yetişmek için bir stenotip makinesi kullanabilirler. t Normal daktilo tipi klavyelerle herhangi bir süre boyunca yapabilme. Makine stenografisinde olduğu gibi, akorların ve akor dizilerinin anlamlarının bir "sözlüğüne" ihtiyacınız olacaktır. (Makine stenografisinin yazılım tarafında çalıştığımı söyleyebilir misiniz?)

Bunu yapmak için temel parçalar şunlardır:

  • MIDI girişi alınıyor. Bunu kendiniz yapmaya çalışmayın, bir kütüphane kullanın. Düzenleme : Görünüşe göre, Java Sound API MIDI denetleyicilerinden olay alma dahil MIDI destekler . Güzel. Bu sayfa da yararlı olabilir.
  • Bu verileri, örneğin yukarıda bahsettiğim sözlük aracılığıyla göndermek istediğiniz tuş vuruşlarına dönüştürme.
  • Tuş vuruşlarının bilgisayara çıkışı.

Yazılımla en geniş çapta uyumlu olmak için bunu bir klavye aygıt sürücüsü olarak yazmanız gerekir. Bu, altta yatan donanımla (sizin durumunuzda piyano klavyesi) konuşurken, klavye olayları için bir kaynak görevi gören işletim sistemine bir eklentidir. Windows ve Linux için muhtemelen bunun için C kullanmak isteyeceksiniz.

Ancak, sadece tuş vuruşları ürettiğiniz için (onları yıllar önce yapmaya çalıştığım, onları engellemeye çalışmıyorum), işletim sisteminin yapay tuş vuruşları göndermek için sahip olduğu tüm özellikleri kullanabilirsiniz. Windows bunu yapmak için bir arayüze sahiptir (muhtemelen birkaç tane, düşündüğüm SendInputşeydir , ancak benzer bir şey yapan bazı "günlük" arayüzü olduğunu biliyorum) ve eminim diğer işletim sistemleri de yapıyor. Bu sizin amaçlarınız için yeterli olabilir - burada başlıyorum, çünkü aygıt sürücüsü rotası garip olacak ve muhtemelen bunun için Java'dan farklı bir dil kullanmanız gerekecektir. (Ben Java'nın büyük bir hayranıyım, ancak işletim sistemlerinin aygıt sürücüleri ile konuşmak için kullandığı arabirimler C ve benzeri aracılığıyla daha kolay tüketiliyor.)


Güncelleme : Tuş vuruşlarının akorlarının "sözlüğü" hakkında daha fazla bilgi:

Temelde, sözlük bir olan tray biz en uzun önek eşleme ile arama ki (teşekkürler, @Adam). Detaylar:

Makine stenografisinde stenograf, stenotip makinesinde aynı anda birden fazla tuşa basıp hepsini serbest bırakarak yazar. Buna klavyenin "vuruşu" derler; piyanoda bir akor çalmak gibi. Vuruşlar sık ​​sık (ancak her zaman değil) bir hece konuşma diline karşılık gelir. Hecelerde olduğu gibi, bazen bir vuruşun (akor) tek başına bir anlamı vardır, diğer zamanlarda sadece aşağıdaki vuruşlarla birleşik bir anlamı vardır. ("İyi" ve "iyi" ve ardından "güle güle" düşünün). Çalıştıkları okuldan büyük ölçüde etkilenecek olsalar da, her stenografın, ne demek için kullandıkları vuruşların kendi "sözlüğüne" sahip olacakları, çalışma hayatları boyunca sürekli olarak bilecekleri bir sözlük. Sözlük, stenografik bölümün (kısaca "steno") bir vuruş uzunluğunda veya birden çok vuruş uzunluğunda olduğu girişlere sahip olacaktır. Sıklıkla, aynı başlangıç ​​strokuna sahip, uzunluklarına ve sonraki stroklara göre farklılaşan birkaç giriş olacaktır. Örneğin (ve burada gerçek steno kullanmam, sadece yer tutucular), bu girişler olabilir:

A = alfa
A / B = alfabe
A / B / C = alfabetik
Klima = klima
B = arı
B / C = çünkü
C = deniz
D = köpek
D / D = Dee Dee

(Bu harfler müzik notası değil, sadece soyut işaretler.)

Not Abirden fazla giriş başlar ve aynı zamanda çevirmek nasıl bir dikkat Cinme Daha önce bir gördüm bağlıdır A, bir Bveya başlıyoruz taze.

Ayrıca (yukarıdaki çok küçük örnekte gösterilmemesine rağmen) aynı kelimeyi veya kelime öbeğini tek bir kelimeden ziyade "oynatmanın" birçok yolu olabileceğini unutmayın. Stenograflar, el konumuna bağlı olarak önceki bir kelimeden diğerine akmayı kolaylaştırmak için bunu yaparlar. Orada müziğe açık bir benzetme var ve bunu hem piyano çalmayı olumsuz yönde etkilemeyi hem de RSI ile gerçekten yardımcı olma olasılığını en üst düzeye çıkarmak için yazma akışınızı müzik çalmaya benzer hale getirmek için kullanabilirsiniz.

Steno'yu standart metne çevirirken yine "en uzun önek eşleşmesi" aramasını kullanıyoruz: Çeviri algoritması şimdiye kadar yazılmış ilk konturla başlar ve bu konturla başlayan girdileri arar. Sadece bir giriş varsa ve bu bir kontur uzunluğundaysa, o zaman güvenilir bir şekilde "kullanılacak giriştir" diyebilir, ilgili metni çıkarabilir ve ardından bir sonraki konturla yeni başlayabiliriz. Ancak daha büyük olasılıkla, bu kontur çeşitli uzunluklarda birden fazla giriş başlatır. Bu yüzden bir sonraki vuruşa bakarız ve bu iki vuruşla başlayan girişler olup olmadığını görürüz; ve bir maç bulana kadar devam eder.

Yukarıdaki sözlükle bu diziyi gördüğümüzü varsayalım:

ACBBCABCABD

Bunu nasıl çevireceğiz:

  1. Adeğişen uzunluklarda üç girişin başlangıcıdır; sonraki vuruşa bak:C
  2. A/Cyalnızca bir girişle eşleşir; "klima" çıkışı ve sonraki vuruş ile taze başlayın:B
  3. Biki giriş başlatır; sonraki vuruşa bak:B
  4. B/Bhiçbir şey başlatmaz; önceki en uzun maçı ( B) alır ve çıktısını alır ("arı")
  5. Çıktı B= "arı" olan tamponumuzda hala bir Bvuruş var . İki giriş başlatır, bu yüzden sonraki vuruşa bakın:C
  6. B/Cbir girişle eşleşir; "çünkü" çıktısını alın ve sonraki konturla yeni başlayın:A
  7. Aüç giriş başlatır; sonraki vuruşa bak:B
  8. A/Biki giriş başlatır; sonraki vuruşa bak:C
  9. A/B/Csadece bir girişle eşleşir; "alfabetik" çıktısını alın ve sonraki konturla yeni başlayın:A
  10. Aüç giriş başlatır; sonraki vuruşa bak:B
  11. A/Biki giriş başlatır; sonraki vuruşa bak:D
  12. A/B/Dhiçbir şeyle eşleşmediğinden, önceki en uzun eşleşmeyi ( A/B) alın ve "alfabe" çıktısı için kullanın. Bu bizi Dhala tamponda bırakır .
  13. Diki giriş başlatır, bu yüzden normalde bir sonraki vuruşa bakarız - ancak tüm vuruşları işledik, bu yüzden tek başına düşünün. İzole olarak, "köpek" olarak çevirir böylece çıktı.

Aşağıdakilerin notları:

  • Okuduğunuz, ancak henüz çevirmediğiniz bir tampon tamponunuz var.
  • Her zaman en çok konturu yapabileceğiniz tek bir girişle eşleştirmek istersiniz. A/B"alfa" ve "arı" değil, "alfabe" olarak çevrilmelidir.
  • (Yukarıda gösterilmiyor) Tercüme edemediğiniz kontur dizileri olabilir, çünkü sözlükteki hiçbir şeyle eşleşmezler. (Steno insanlar "tercüme edilmez" ismini kullanır - örneğin, sözlüğümüzde, vuruşlar E"tercüme edilmez" olacaktır.)
  • (Yukarıda gösterilmemiştir) Bazı steno teorileri, aynı kontur kümesinin daha geniş bir bağlama dayanarak birden fazla şey ifade etmesine izin verir. Steno halkı buna "çatışma" diyor. Muhtemelen projenizde onlara izin vermemek istiyorsunuz ve aslında steno stenograf tarafından manuel olarak tercüme edildiğinde, çatışmalar iyiydi, çünkü sadece cümlenin neresinde doğru seçim olduğunu biliyorlardı, ancak yükselişle birlikte makine çevirisi, çatışmasız steno teorileri ortaya çıkan tercüme edilmiş metinden geçmek ve "düzeltmek" çatışmalarını önlemek için özellikle ortaya çıktı.
  • Gerçek zamanlı olarak çevirmek (yapacağınız), kısmi bir eşleşme alırsanız, bir sonraki akoru beklerken tutunmasını isteyeceksiniz - ancak muhtemelen sadece bir zaman aşımına kadar, hangi noktada arabellekte olanı olabildiğince iyi çevir. (Ya da belki bir zaman aşımı istemiyorsunuz; bu sizin çağrınız.)
  • Muhtemelen "önceki konturu dikkate almayın" yazan bir kontur olması en iyisidir
  • Muhtemelen en iyisi "hiçbir şey çıkarmadan arabelleği tamamen temizle" konturuna sahip olmak

6
@I__: Bazı programlar doğrudan klavye cihazıyla konuşmaya çalışır ve bu nedenle "sendkeys" benzeri arayüzlerle iyi oynamayın. İnşallah bu son birkaç yıl öncesine göre daha az yaygındır ve bu yüzden dediğim gibi, mekanizmalar gibi "sendkeys" ile başlıyorum ve sadece ihtiyaç duyduğunuz ve ne zaman ihtiyaç duyduğunuzda diğeri için endişeleniyorum. (Muhtemelen en iyisi, özel anahtar dizileri de dahil olmak üzere anahtarları [kendi başına, MIDI'den değil) göndererek test eden hızlı bir program yapmak ve ardından yola çok yaklaşmadan önce kontrol etmek istediğiniz yazılımla test etmek .)
TJ Crowder

7
Bunu hiç duymamış olanlar için tarif ettiğiniz sözlük temelde bir Trie'dir ('try' olarak telaffuz edilir)
Adam

14
@I__: Bunu söylemek için şimdi yazmak ilginç . Daha fazla İstediğiniz ne? Sanırım yapmanız gerekenlerin önemli yönlerinin çoğuna değindim. Bunu yapmadım , kimseye işaret etmedim, çünkü yapacak başka işlerim var ve önceden oluşturulmuş bir çözümü bilmiyorum. Ama açısından bina bir çözüm, ben doğru yönde işaret düşünüyorum.
TJ Crowder

2
Doğrusal bir dizideki tüm akorları sıkıştırabileceğinizi ve her midi olayı aldığınızda geçiş yapabileceğinizi ve yine de fark edilir bir yavaşlama yaşamayacağınızı unutmayın. Bir trie kullanmak, biraz erken optimizasyon kokuyor.
FeepingCreature

5
@FeepingCreature: Bunu stenograflar ve mahkeme muhabirleri ile yaparken, sözlükleri yüz binlerce girişe kolayca ulaşabilirdi (milyon markayı kırmış birini hatırlıyorum). Bir optimizasyon stratejisi kullanma konusunda uzaktan erken bir şey yoktu, 12 MHz 386'larla uğraşıyorduk. Ben ___ 'de, Arduino fikriyle (bu gerçekten harika bir fikir) giderse, o da modern dönem için oldukça zayıf bir donanımla uğraşacak, elbette sahip olduğumuzdan çok daha hızlı şeyler. Bence sözlüğü dramatik olarak daha küçük olurdu, ama ...
TJ Crowder

184

USB (veya ps / 2?) Klavyeyi taklit eden donanımda bir şey yapmayı düşünün. Artık belirli bir işletim sistemine veya belirli bir işletim sistemi API'sına bağımlı olmayacaksınız. Bir donanım çözümü zamanın testine dayanacaktır. Herkes Windows 11 çalıştırırken Windows 7'de eski bir API kullanarak takılmayın! Arduino'nun öğrenmesi oldukça kolaydır.

Arduino için bir ton bilgi ve yardım var. Yeni başlayanlar için tasarlanmış bir donanım hackleme platformudur. Google'ın Arduino'yu itmesi artık daha da büyüyecek .

EDIT: Sanal USB Klavye yazılımı ve donanımı


Bunun için bir Arduino kullanma fikrini seviyorum. Bellek yine de bir sorun olabilir. Önceden tasarlanmış en büyük kartların 256k Flash'ı var (8k önyükleyici tarafından kullanılıyor). Gün içinde, DOS altında 1M'ye gerçek zamanlı çeviri / görüntüleme / düzenleme yaptık (örneğin, her zamanki 640k artı EMS veya genişletilmiş bellek), ancak sıkı C kodu ve montaj ve sözlük (kolayca kendi başına> 250k olmak). Burada hiçbir görüntü veya eşzamanlı düzenleme yok, bu yüzden iyi, ama sözlük küçük olmalı ...
TJ Crowder

Oh, bu hiçbir şey. Kullandığımız çok kompakt formda bile, birden fazla megabayt boyutunda olan sözlüklere sahip mahkeme muhabirleriyle rutin olarak uğraştım. Kişisel olarak gördüğüm en büyük şey 4.5MB'dı - ve yine, yüksek oranda sıkıştırılmış bir biçimde saklandı. Bunu bir steno klavyede piyano klavyesinden daha az tuş olduğu gerçeğiyle birleştirin ... Yine de, Arduino'nun bir USB portu var, bu yüzden sözlük bir USB flaş adaptöründe veya hatta (harici olarak çalışan) ) SSD veya HDD.
TJ Crowder

2
@ arduino ( pjrc.com/teensy ) yerine daha genç bir bellek düşünmek isteyebilirsiniz ve doğrudan bir klavyeyi taklit edebilirsiniz. Zaten birçok arduino kütüphanesi ile uyumludur ve uyumsuz olanlar sadece pin ataması gerektirir. - dönüşümlü olarak, atmega ayrıca 16 MB dahili flaş bulunan ve yaklaşık 30 $ (at90usbkey) maliyete sahip bir demo kartı da yapıyor
Marc

8
Bilgisayar için kullanışlı bir piyano arayüzü tasarlamak kolay bir iş değildir. IMHO, OP ilk önce mevcut ortamında prototiplemeli, sonra, ihtiyaçlarını karşılarsa, taşınabilirlik konusunda endişelenmelidir. Tabii ki, portatif alternatif fark edilir derecede zor değildir.
Emilio M Bumachar

111

Bana bunu nasıl kuracağınız konusunda daha az tavsiye ve ne istediğinizi gerçekleştirmek için zaten hangi kaynakların orada olduğunu sormak gibi görünüyor. İşletim sisteminize bağlı olarak, kendi programınızı sıfırdan yazmak zorunda kalmadan bunu başarmanın birçok yolu vardır:

MIDI İnme

Bedava. For Mac OS X 10.3 ve yukarı . Bu özellikle "herhangi bir MIDI klavyeyi tam gelişmiş bir bilgisayar klavyesi değiştirme olarak kullanma yeteneği" ile birlikte gelir .

Bome MIDI Tercüman

Ücretsiz / Kartpostal (biraz tuhaf). For Windows 2000 ve yukarı, ve Mac OS X . Başlangıçta AutoHotkey tipi kullanım için daha uygun görünmektedir, ancak daha ileriye baktığımda, istediğini güzel bir şekilde yapabileceğini düşünüyorum.

Maks ve aka klavye

Bedava. For Mac OS X . Tam olarak "kullanıma hazır" bir çözüm değil, ancak temel cihaz yapılandırmasından memnunsanız, çok kötü olmamalıdır.


49

MIDI DotNet'te .NET'te kaynak kodu örnekleri ile donanıma erişebilirsiniz .

MIDI notları veri akışı oluşturmak için kaynak kodu olarak tam çalışan bir örnek VB 5/6-Tipp 0521: MIDI-Töne erzeugen (Visual Basic 6.0, bir yerde de .NET sürümü)

Klavye vuruşlarını simüle etmenin bir yolu VB 5/6-Tipp 0155: Tastaturereignisse simulieren'de (Visual Basic 6.0, bir yerde .NET sürümü de var)

Tuş vuruşlarını tanıma Tipp-Upload: VB.NET 0266: Globaler KeyHook .

Resim açıklamasını buraya girin

Ardından, bir piyano çalar için iyi bir çalışma matrisi kullanın Timo Boehme www.goldengel.ch

Piyanoda ve iyi bir oyuncu olduğunuzda, klavyede 10 parmak olabilir ve matris kullanılabilirse, düşündüğüm herhangi bir bilgisayar klavyesi kullanıcısından çok daha hızlı olabilirsiniz. :-)

Bu durumda, sorunuzu doğru anlarsam, büyük bir şey olmamalıdır.


41

Üniversitede piyano performansı okudum ve sonra etkileşim tasarımı, programlama ve Vim'i kullanmaya başladım, bu yüzden böyle şeyleri prototiplemek için çok zaman harcadım.

Linux'ta Alex Andre'nin x11 tuşuyla birlikte multimedya sanatçıları için " Pure Data " grafik programlama dilini kullanarak bunu hızlı bir şekilde çalıştırabilirsiniz .

Mac'te MidiStroke kullanabilirsiniz . Windows'ta bir yöntemin MidiOx ve AutoHotKey araçlarını içerdiğine inanıyorum . Başka bir zamanda Max / MSP için Java eklentisini kullanan bir sürümüm vardı . Patrice Colet'in de çalışan Pure Data için harici bir pencere yaptığını düşünüyorum , ancak artık bulamıyorum. Ayrıca, MaxMSP için bunu Windows'ta yapabilen bir harici var . Son olarak, özgür olmayan ama müthiş Osilatör istediğinizi yapabilir - özellikler sayfasına bakın.

Çalıştırdığımda, asla takılmadım, çünkü düzenle çalışmayı durduramadım. Gerçi monitörümün elektrikli klavyemde olması çok güzeldi! İyi şanslar.


37

MIDI Hakkında

"MIDI hakkında hiçbir şey bilmediğinizi" söylediniz. MIDI teknolojisi, kavradığınızda oldukça basittir, ancak başlangıçta kafa karıştırıcı olabilir. MIDI'nin temellerini anlamada bana çok yardımcı olan kaynaklardan biri (MIDI etkileşimlerini programlamak istiyorsanız kesinlikle gereklidir), Teknophobe için MIDI adlı bir kitaptır . Okuması kolay bir kitap ve çok faydalı.


Saf Veri ve Maks

Etkileşimli multimedya geliştirme deneyimimde, herhangi bir cihazdan sinyalleri / girişleri bağlamayı ve eşleştirmeyi kolaylaştıran iki benzer program var.

Bunlar bir Mac ortamı için Max ve bir PC ortamı için Pure Data'dır . Her ikisinde de çok sayıda çevrimiçi dokümantasyon ve YouTube öğreticisi var. Max / MSP Öğretici 1 videosu - bilgisayar klavyenizi orta klavye olarak kullanmak (mümkün olan stil) , bilgisayar klavyesini bir MIDI klavyesinin girişleriyle eşleştiren (temel olarak yapmaya çalıştığınız şeyin tam tersidir ) Max'te yerleşik bir programı gösterir. Aynı kalıbı kullanarak ancak sinyalleri / eşlemeleri ters çevirerek amaçladığınız sonuçları alabilirsiniz.


AutoHotKey

AutoHotKey , Windows için cihazlarınızdaki anahtarları ve düğmeleri makrolara yeniden eşlemenizi sağlayan ücretsiz bir açık kaynak yardımcı programıdır. Doğal olarak QWERTY klavyeleri, oyun çubuklarını ve fare makrolarını destekler.

Ancak, aradığınız belirli eşlemeyi destekleyen bir uygulama bulabildim. Bu iki konu süreci açıklar:

  1. AutoHotkey'de MIDI IN desteği , kullanım durumunun tartışılması. Yazar, MIDI IN girişini algılayabilen ve tuş basımlarına çevirebilen bir program arıyordu.

  2. MIDI giriş kütüphanesi , yazarın problemine çözüm ve AutoHotKey'e gönderilen kod / yama aslında amaçlanan sonucu uygular.

Temel olarak, AutoHotKey, bu kullanıcının özel yamasıyla birlikte, bir MIDI klavyeden QWERTY klavyenin giriş sinyaline bir eşleme oluşturmak için ihtiyacınız olanı tam olarak sağlayacaktır. Tek yapmanız gereken eşlemelerinizi kurmak, yapılandırmak ve tanımlamaktır.


Başka herhangi bir şey?

Diğer bazı cevaplar, genel olarak MIDI ve MIDI programlama hakkında çok daha kapsamlı bilgi verdi, ancak posta durumlarınız, aradığınız şey gibi görünmüyor. Mümkünse size daha fazla yardımcı olmak istiyorum, ancak aradığınız bilgi türü hakkında daha spesifik olmanız daha kolay olacaktır. Örneğin, bir MIDI klavyenin giriş sinyallerinin QWERTY klavyenin sinyallerine nasıl dönüştürüleceğiyle daha mı ilgileniyorsunuz , ya da birincil ilgi alanınız sorununuza çözüm bulmak mı? Henüz ele alınmayan ne arıyorsunuz?


27

Bir Teenys mikro denetleyici kullanarak kendi USB klavyenizi oldukça hızlı bir şekilde hackleyebilirsiniz.

Aslında, bir USB klavyenin nasıl yapılacağına dair örnek kodları var .

Buna iki şekilde yaklaşabilirsiniz:

  1. Eski bir piyano alın ve anahtarları doğrudan teensy'ye bağlayın

  2. MIDI bağlantı noktasına bağlanmak için gerekli mantığı ve gerekli kod çözmeyi ekleyin.


Bu en umut verici cevaptır çünkü cihazları tamamladıktan sonra herhangi bir bilgisayarda ve herhangi bir işletim sisteminde çalışacaktır. Klavyenizden endişe etmeden bilgisayarınızı yükseltebileceğiniz için mutlu olun veya mutlu olun. İki Teensy cihazı kullanırım ve bunları I / O pinleriyle birbirine bağlarım. Teensy zaten USB MIDI pjrc.com/teensy/td_midi.html'yi desteklediğinden , kodunuzun klavye teensy ve midi teensy arasındaki hareketli sinyallerle ilgilenmesi gerekir.
Michael Dillon

24

Aslında, bir süre önce üzerinde çalıştım, Rock Band davul girişlerini bilgisayarıma yakalamaya çalıştım (küçük bir Java ev yapımı davul emülatörü yapmak) Neyse, burada bir soru sordum, Zaman gecikmesi sorunu (orada yoklama kodu var) , yapmaya çalıştığım şeyle birlikte.). Ve programımı bulabilirsem size kodu verebilirim, üçüncü taraf API ( JInput ) kullanır.

Her iki şekilde de iyi şanslar.


23

Bome MIDI çevirmenini deneyin .

Çapraz platformda çalışır, herhangi bir MIDI girişini kolayca bir tuşa dönüştürebilir , kurulumu ve yapılandırması hızlıdır, ayrıca kişisel kullanım için ücretsizdir.

Hızlı İpucu: MIDI Çeviri - Tuş vuruşlarını MIDI , nasıl kolayca ayarlayacağınız hakkında bir öğretici var :

Temel olarak, akor ve değiştirici tuşlar da dahil olmak üzere yapabileceğinizin sonsuz olanakları vardır. Canlı ses donanımım için DAW'umu piyanoyu kullanarak kontrol etmek için kullanıyorum ve hiç sorun yaşamadım.


18

Java'da, MIDI sinyallerini dönüştürmek için JMF'yi (Java Media framework) kullanabilirsiniz. Temel klavye tasarımının kullanımı kolaydır, yani kullanıcı arayüzü; ve sık kullanılan karakteri / sembolü elinizin altında bulundurun.

Java Ses Kaynakları'ndaki örnek kod ve API : Örnekler: Dijital Sinyal İşleme (DSP) , sinyalin nasıl işleneceğini anlamaya yardımcı olur.

Bazı referanslar:


15

GlovePIE adlı bir program var . Basit bir kodlama dilinde programlayabilirsiniz ve bence MIDI destekliyor. Bunun "Java" kategorisine uyup uymadığından emin değilim, ama yine de harika bir program. PS3 denetleyicilerini kullanarak robotları kontrol etmek için kullandım . Çok güçlü.


15

Birçok klavyede , bilgisayara MIDI sinyalleri göndermek için bir seri bağlantı noktası ( RS-232 ) konektörü bulunur. Seri port iletişimini klavye vuruşlarına dönüştürmek için Girder adlı bir program kullanıyorum .

Kiriş, her tuşu tek tek karşılık gelen tuş vuruşu ile eşleştirmenizi sağlayan bir "eşleme" özelliğine sahiptir.

Bu, aradığınız basit çözüm olabilir!


12

Sadece stenografi öğrenin!

Sizin açınızdan tüm tartışmalardan anlaşılıyor. Teknik açıdan herhangi bir tekerleği yeniden icat etmek istemezsiniz. Fakat bir kez (bu sorunun sorduğu soru) bağlantınız kurulduktan ve çalıştıktan sonra, hala önünüzdeki işlerin çoğuna sahipsiniz: Beyninizi eğitmelisiniz. Ayrıca bunu yapmanın en akıllıca, en etkili yolunu da icat etmelisiniz - tamamen bilgisayar tekniklerinin realmından çıkan bir tasarım sorunu. Siz veya herhangi birimiz yetersiz kalırsınız.

Neyse ki, yüzyıllar olgunlaşmasına rağmen sorun çözüldü ve honlandı ...

Stenografi öğrenin!

Evet, bu sizi biraz geri çekecek. Ama yüzlerce saatlik zamanınızın değeri nedir, sonuçta daha az olumlu bir sonuç var mı? Ayrıca, stenografi Wikipedia makalesi 'daha çok bir piyano klavyesine benziyor' diyor.

Tabii ki, bir yan gösterisi etkisi olmasını istemiyorsanız. İtiraf etmeliyim, bu olasılığı hiç düşünmemiştim, birisinin bir piyano klavyesinden bir metin çıkardığını görmek gerçekten eğlenceli olurdu !

Dokunmatik yüzeyli bir USB klavye ile başlayabilirsiniz (veya bir işaret çubuğu daha ergonomik olabilir mi?), Çevirmek için Plover'ı kullanın (harf olmayan tuşların, programlama) veya kendi USB stenografi klavyenizi döndürmek için Re: Plover klavyesini takip edin veya satın alın bir stenotip alın .

İyi şanslar!


Stenografi klavyesinde {ve} nerede? Kelime olmayan isimleri nasıl yazacaksınız pthread?
bobobobo

Vikipedi bağlantısı yanlış ve en.wikipedia.org/wiki/Stenography
joelhoro

11

MAME arcade oyunlarına bir göz atın . Herhangi bir sayıda farklı öğeden girişe izin vermek için donanım cihazları oluşturdular. IPAC , örneğin, USB içine girdi cihazlarından dönüştürür sinyaller bilgisayar sonra taklit anahtarlarına kullanabileceği. Çılgın programlama mantığı gerektirmeden rahat görünen herhangi bir giriş cihazı kombinasyonunu kullanabilirsiniz - çünkü girdiyi yorumlayan yazılım zaten yapılmış ve iyi test edilmiştir.

Uçuş simülatörü kokpit girişlerini, özel kioskları ve bu yöntemle oluşturulan oylama sistemlerini gördüm ..... ve fiyat doğru!


10

Bunu çözmek için birkaç şeye ihtiyacınız olacak:

  1. Klavyenizden MIDI verilerini yakalamanın bir yolu. Arabirime bağlı olarak: MIDI arabirimi (klasik) veya USB MIDI arabirimi (modern) en olası arabirim, en çok seçenek sağladığı için bir bilgisayardır. USB ana bilgisayar mikrodenetleyicileri sadece bir bilgisayar kullanmak kadar basit değildir.

  2. MIDI verilerini tuş vuruşlarına dönüştüren bir şema. Bir kullanıcının işaret ettiği gibi, anahtar sayısı piyano anahtarlarının sayısına bağlı olmayacağından akorlar gitmenin yoludur.

  3. İşletim sistemine bir anahtar enjekte etmenin bir yolu. Bu, doğru olması için düşük seviyeli bir sürücüye ihtiyaç duyacaktır. Windows 7'deki uygulamalara klavye ve fare verilerini enjekte eden uygulamalarla oynadım ve lapa lapa olabilir ve bir uygulamanın şu anda odakta olup olmadığına bağlı olabilir. Bu arayüzün en zor kısmı. Ne işe yarayabilir bir seri arayüzü de olan bir HID USB klavye mikrodenetleyici oluşturmaktır .

Seri arabirim sanal bir seri bağlantı noktası oluşturur. MIDI verilerini okuyan ve tuş vuruşlarını üreten yazılım, sanal seri bağlantı noktasına seri mesaj gönderebilir. Mikrodenetleyici bir tuş vuruşu gönderir, böylece standart bir klavye girişi gibi görünür. Bu, hem MIDI bağlantı noktalarının hem de USB MIDI klavyelerin arabirimine izin verir.

Hmmm, bu tür bir arayüzle bir fareyi simüle edebilir ve fare ekseni ve düğmeleri için bazı piyano tuşları kurulumunu kullanabilirsiniz. Basınç, fare imlecinin hızını belirlemek için kullanılabilir. Böylece fareyi de ortadan kaldırabilirsiniz. Bu yaklaşımın diğer bir yararı, bağladığınız herhangi bir giriş cihazının klavye ve fare olayları üretmek için sanal seri bağlantı noktasıyla konuşabilmesidir. Bu nedenle, davul pedalları veya joystick gibi başka bir donanım eklemek isterseniz, seri arayüzle konuşan programı ayarlamak gerekir.

Yukarıdakilere yapılan bir başka şey, Arduino kullanmak için yukarıda yayınlananlara benzer, ancak USB tabanlı müzik klavyelerini işlemek için Sparkfun'dan USB Host Shield'i de içeriyor . Bu, Arduino'nun önyükleme yükleyici çipinde bir klavye veya klavye fare kombinasyonu olarak programlanmasına ve cihazın USB tabanlı müzik klavyesi için bir USB ana bilgisayarı gibi davranmasına izin verir . O zaman her iki tip için de kaplanıyorsunuz. Yine de, sanal seri port yönteminin daha esnek olduğunu ve uzun vadede programlanmasının daha kolay olacağını düşünüyorum. Arduino cihazının değiştirilmesi bir masaüstü programından veya hizmetinden daha zor olacaktır.

Başka bir olasılık daha var: Akorlu tek elle kullanılan klavyeler zaten var. Onlarla ilgili videolar gördüm, ancak bunların ellerinize zarar verip vermeyeceğini belirlemelisiniz.


7

Bir MIDI cihazına bağlanmak için .NET DirectSound arayüzü gibi bir şey kullanmak oldukça kolay olmalıdır. Hedef MIDI cihazınızı tanımlamanız ve ardından gelen iletileri dinlemek için kodu almanız gerekir (bunu Google üzerinden yapma hakkında makaleler vardır).

MIDI'yi klavye olarak kullandığınız için, temel olarak algılamanız gereken iki MIDI mesajı vardır, not edin ve not edin. MIDI mesajı komutu, notu ve hızı belirten üç veri baytıdır. Not kapalı sadece not numarasıdır (bazen 'kötü' MIDI yığınları, beklemek zorunda olduğunuz sıfır hızda bir not gönderir).

İletileri çevirdikten sonra klavye çıktısı .NET'ten oldukça basit olmalıdır.

Tekniklerle ilgili diğer cevaplarda bolca tavsiye var; Size sadece gerçek MIDI mesajları hakkında bir fikir vermek istedim. İyi şanslar!


Bir yan not olarak, 'MIDI Cihazları için Evrensel Seri Veri Yolu Cihazı Sınıf Tanımı' belgesi MIDI mesajlarına çok düzenli bir genel bakış sunar: usb.org/developers/devclass_docs/midi10.pdf
Simon Inns

7

Ses kartınız üzerinden herhangi bir harici MIDI klavyesini denetleyici olarak çalarak daha iyi ve daha mutlu sonuçlar elde edersiniz (hangi işletim sistemi ve / veya DAW programını kullanmak istediğinize bakılmaksızın ). Ardından bunu GB yazılımınıza (veya her neyse) yönlendirin ve ton size gerçek zamanlı olarak sağladıkları birçok sesi üretir.

Ses kartınız MIDI I / O'larını (ins / outs / thrus) desteklemiyorsa, bu bir sorun değildir. Harici bir MIDI masa üstü dönüştürücüsünü araştırmayı ve yatırım yapmayı düşünebilirsiniz. Birçoğu MIDI çıkışlarını USB 2.0'a daha fazla dönüştürmek için donatılmıştır (mevcut bir ses kartını tamamen geçerek).

Örneğin: bir bilgisayar klavyesi ve kurşun kalem aracı kullanarak Z ve X değiştirme tuşu seçeneği ile "insan benzeri" zarafet notu sonuçları almak oldukça zordur. Bunun yerine, kendi parmaklarınız bunu sadece kendi fiziksel oktav kayıt aralıklarından bir MIDI klavye ile çalabilir - hemen!

Bütçe kısıtlamalarının söz konusu olabileceğini biliyorum. Ancak, Radio Shack'ta 100,00 ABD Doları'nın altında (* veya daha az) satılan bu görünüşte ucuz "Casio" tip 5 oktav klavyelerinden bazıları ihtiyacınız olan tek şey (artı, bazı yerleşik ses yamaları ve sequencer modülleri ses ve işlem diğer şeyler için inanılmaz iyi).

RadioShack MIDI klavye seçenekleri .

Mevcut ses kartları için harici MIDI dönüştürücülerle ilgili olarak, özellikle Google platformlarını göz önünde bulundurarak sizin için bazı Google aramalarını yapıyorum :

Bu harici MIDI dönüşüm bilgilerinin birçoğu ilk başta sizin için hantal olabilir, bu yüzden düşünceleriniz ve bütçeniz için işleri "kullanıcı dostu" olarak daha fazla parçaladım:

Olarak sanal klavyeleri kolaylaştırılması ile hiçbir yanlış yok VST kullanırken 'ın DAW . Onların yeri var.

Ama başarılı bir klavyeci gibi konuşuyorsun. Öyleyse, neden kendiniz için bahsettiğim harici MIDI dönüşümü / klavye seçeneklerini düşünmüyorsunuz?

İyi şanslar ve umarım bu, sizin için çalışabilecek ve çalışacak bazı fikirler verdi!


6

Herhangi bir programlama yapmak istemiyorsanız, ancak sorunun çözülmesini istiyorsanız, bir MIDI çıkışı yerine QWERTY klavye çıkış sinyali göndermek için herhangi bir tuşu yeniden atayabileceğiniz bir USB-MIDI-klavye satın alabilirsiniz. örnek M-Audio Axiom Pro

Bu yöntem, herhangi bir işletim sistemi ve standart USB klavyeleri destekleyen herhangi bir bilgisayarla çalışacaktır, çünkü MIDI klavye kendini standart QWERTY klavye olarak tanımlayacaktır.


Akorları belirli tuş vuruşlarına da atamanın mümkün olup olmadığını biliyor musunuz? örneğin C MAJOR akoru
çalarsam

Çok hızlı cevap veremediğim için üzgünüm, 4 gündür tatil yaptım;) Hayır, ne yazık ki anahtar başına sadece bir QWERTY kodu atayabilirsiniz, bu yüzden hemen hemen standart bir klavye olarak çalışır.
Martin Odhelius

Btw, bir tane satın alırsanız, PRO-one'ı satın almayı unutmayın, çünkü PRO olmayan versiyonun QWERTY atama işlevselliğine sahip olduğunu düşünmüyorum.
Martin Odhelius

ASCII kodlarına akorlar atamanın mümkün olduğunu düşünmüyorum, kod başına sadece bir anahtar, ama işten eve geldiğimde bu akşam kendi Axiom'umdan kontrol edeceğim.
Martin Odhelius

Klavyedeki gerçek piyano tuşlarına değil, yalnızca kontrol düğmelerine (işlev tuşları, davul pedleri, sayısal tuşlar vb.) Qwerty kodları atamanın mümkün olduğunu fark ettim. Bu klavyeye sahibim ve herhangi bir tuşa ascii kodları atamanın mümkün olduğundan emindim, ama şimdi denediğimde bunun yanlış olduğunu fark ettim! Bunun için çok üzgünüm, ödülü bir şekilde geri almak mümkün mü?
Martin Odhelius

6

Hem MIDI olaylarını okumak için basit bir AutoIt komut dosyası kullanabilirsiniz, bkz. MIDI Girişi .

Ayrıca MIDI UDF'ye ihtiyacınız olacak ve tuş basımlarını simüle edeceksiniz .

MIDI olaylarını okumak kolay olmalı, ancak farklı MIDI denetleyicilerinin (enstrümanları) farklı özellikleri vardır. Önce MIDI piyanonuzun neler yapabileceğini bulmaya çalışın, ardından bu özellikleri simüle edilmiş QWERTY tuş takımı presleriyle en iyi nasıl eşleştirebileceğinizi görün.

İsterseniz, ne yaptığınızı (yani Shift, Ctrlve Altsimülasyonu) görmenize yardımcı olmak için ekranda veya tepside bir şey olabilir .



5

Java'da kodlamayı biliyorsanız, şu şekilde kullanabilirsiniz:

İlk olarak, 'Not açık' olaylarını istediğiniz gibi tuş vuruşlarıyla eşleyen javax.sound.midi.Receiverbir send(..)yöntemle uygulayın .

MidiMessage'ın içeriğini getMessageyöntemiyle almanız ve kendi tarzınızda yorumlamanız gerekir . Mesaj baytlarının anlamı MIDI Mesajları'nda bulunabilir .

Belirli bir klavye tuşu için 'not açık' veya 'not kapalı' aldıktan sonra, KeyEvent sınıfının sabitini, C # 4 -> KeyEvent.VK_A gibi bir şeyi atayarak bunu istediğiniz bir tuşla eşleyebilirsiniz. . Bu anahtar kodu daha sonra java.awt.Robottuş vuruşunu işletim sistemine ve dolayısıyla diğer uygulamalara göndermek için keyPress ve keyRelease yöntemleri tarafından kullanılabilir .


4

Brian O'Dell'in cevabına katılıyorum - eğer bu benim projem olsaydı, bunu donanım olarak yapardım. Platformdan ve donanımdan bağımsız olma avantajına sahiptir - kutunuz bir MIDI-USB arabirimi ve bir PC API gereksiniminin yerini alır.

mbed , öğrenmesi çok kolay olan ve Arduino IMHO'ya (çevrimiçi derleyici, 512 KB flash, 96 MHz, C ++ dili) göre birçok avantaja sahip olan hızlı bir prototip oluşturma platformudur. Bir USB klavye arayüzü ve sizin için önceden yazılmış bir USB Midi arayüzü var.

Topluluk çok cana yakın ve yardım etmeye istekli ve hem MIDI hem de USB hid emülasyonu kullanan birçok mevcut proje var - Youtube'da "mbed MIDI" veya benzeri bir şey arayın.


4

Linux kullanıyorsanız Footware'e bir göz atın .

Tam olarak aradığınız şey olmalı - MIDI sahalarını istediğiniz gibi bir tuş eşlemesine ayarlarsanız ...

Bunun benden başka herkes için yararlı olabileceğini hiç düşünmemiştim; o)


2
Yönetici olarak önceki işimde masamın altında ayak denetleyicisi vardı
vim'de


1

Bu çok zor olmazdı.

Windows'da olduğunuzu varsayıyorum , bundan emin değilim . Düz eski C ++ 'da bir MIDI sıralayıcı, http://pianocheetah.com yazdım ve komutları çalıştırmak için piyano klavyesini kullanmanıza izin veriyor. Klavye giriş akışına tuşları itmek için aynı şeyi yapamamanızın bir nedeni yoktur.

Ama hadi ama. Klavyeyi öğrenmenizin ne kadar sürdüğünü hatırlıyorsunuz, değil mi? Bunu tekrar gözden geçirmek istiyor musunuz? Ve kutsanmış klavyenizi, bir sürü aptal görünümlü anahtar sembollerle kirletmeye hazır mısınız?

En az 26 alfa, 10 sayısal, 11 noktalama işareti ve en az 12 fonksiyon tuşu VE bunların kaydırılmış durumlarını kullanmanız gerekir. Yani bu 60 anahtar artı kaydırılmış durumlar. Bu, tam 5 oktavlık bir anahtar yakar. Piyano "şerbetçiotu" = all = zaman yapacaksınız. Yazmaya dokunmaya veda edin.

Kendinizi RSI'dan kurtarabilirsiniz , ancak kendiniz için başka bir tür kabus yarattınız.

Ve patronunuzun size işte bir MIDI klavye satın almasını sağlayın.

Gerçekten piyano çalmayı öğrendiyseniz, stressiz nasıl çalınacağını öğrendiniz. Bunu QWERTY klavyede yapın. Gerginlik yok. Yavaş başlayın.


Nazik sözler için teşekkürler, ama popomu bu şey üzerinde çalıştım ve açık kaynak yapmayı planlamıyorum - üzgünüm. Ama yapmanız gereken midiInOpen () kullanmaktır; midi girdisini işlemek için bir geri arama sağlar; kayda değer olaylar dışında her şeyi göz ardı, bazı klavye tuşu midi notu haritası ve klavye giriş akışı içine yerleştirin (bunun için API unutuyorum, ama en azından bir tane olduğundan eminim).
Stephen Hazel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.