การใช้คีย์บอร์ดเปียโนเป็นแป้นพิมพ์คอมพิวเตอร์ [ปิด]


727

ฉันมีปัญหาRSIและลองใช้แป้นพิมพ์คอมพิวเตอร์ 30 แบบซึ่งทำให้ฉันเจ็บปวด การเล่นเปียโนไม่ได้ทำให้ฉันเจ็บปวด ฉันเล่นเปียโนมาประมาณ 20 ปีโดยไม่มีปัญหาเรื่องความเจ็บปวด ฉันต้องการทราบว่ามีวิธีในการจับภาพ MIDI จากแป้นพิมพ์ MIDI และแป้นพิมพ์ออกตามจังหวะหรือไม่ ฉันไม่รู้อะไรเลยเกี่ยวกับ MIDI แต่ฉันต้องการคำแนะนำเกี่ยวกับวิธีการแปลงสัญญาณนี้เป็นการกดแป้น


ทำไมต้องจับ MIDI ถ้าคุณสามารถใช้คีย์บอร์ดซินธิไซเซอร์เป็นคีย์บอร์ดได้?
shevski

@I__: ระบบปฏิบัติการใดที่คุณต้องการให้การสนับสนุน? มันอาจจะมีความสำคัญ
TJ Crowder

5
@shevski: ฉันไม่ได้พยายามทำอะไรเลย @I__ คือคนที่ถามคำถาม เขา / เธอจะไม่ต้องการที่จะแปลงเสียงแต่สัญญาณเหตุการณ์แป้นพิมพ์ดิจิตอลที่ส่งมาจากแป้นพิมพ์อิเล็กทรอนิกส์ผ่านทางMusical Instrument Digital Interface สิ่งเหล่านี้คล้ายกับเหตุการณ์แป้นพิมพ์คอมพิวเตอร์: "Note on" ตรงกับการกดคีย์ "note off" กับ keyup เป็นต้นคุณสามารถใช้ข้อมูลความเร็วเพื่อดำเนินการต่าง ๆ ได้ขึ้นอยู่กับการเล่นคอร์ด "ดัง" ฉันชอบความคิด
TJ Crowder

34
หากคุณใช้งานได้คุณสามารถโค้ดได้โดยใช้อุปกรณ์ midi ทุกชนิด อาจใช้เวลาฝึกฝนบ้าง แต่การใช้วงออเคสตราเป็นทีมพัฒนาน่าจะสนุก
Toon Krijthe

1
@I__: คำตอบที่ได้รับการโหวตมากที่สุดจะนำคุณไปสู่การรองรับ MIDI ของ Java sound API ซึ่งควรให้คุณได้รับข้อมูล MIDI และอธิบายรายละเอียดเกี่ยวกับทฤษฎีที่เกี่ยวข้องกับการเปลี่ยนเป็นชุดการกดแป้นพิมพ์ สอง upvoted ที่สุดคำตอบที่พูดคุยเกี่ยวกับวิธีการทำงานได้มากแล้วคุณสามารถเชื่อมต่อกับเครื่องคอมพิวเตอร์ที่โดยใช้ Arduino รวมทั้ง ... (ต่อ)
TJ เด

คำตอบ:


16

ห้องสมุดที่ดีในการ .NET ที่เต็มไปด้วยการสนับสนุน midi (เบส) ไปhttp://www.un4seen.com

และสำหรับส่วนอื่น ๆ การแปล midi ของคีย์บอร์ดเป็นคีย์และอื่น ๆ ฉันจะใช้ AutoItX, ActiveX / COM และ DLL เพื่อ autoIt ข้อมูลและดาวน์โหลดไปที่http://www.autoitscript.com/site/autoit/

ไม่จำเป็นต้องเขียนไดรเวอร์แป้นพิมพ์


430

ฉันไม่ได้ทำโปรแกรม MIDI มาหลายปีแล้ว แต่ความคิดพื้นฐานของคุณนั้นยอดเยี่ยมมาก

MIDI เป็นกระแสของ "เหตุการณ์" (หรือ "ข้อความ") ซึ่งเป็นพื้นฐานที่สุดสองประการคือ "note on" และ "note off" ซึ่งมีหมายเลขบันทึก (0 = C ห้าอ็อกเทฟต่ำกว่ากลาง C ถึง 127 = G ห้าเลอะเลือนเหนือ G เหนือกลาง C ในครึ่งเสียง) เหตุการณ์เหล่านี้มีหมายเลข "velocity" บนคีย์บอร์ดที่ไวต่อความเร็ว ("touch sensitive") ด้วยแรง (คุณคาดเดา) ระหว่าง 0 ถึง 127

ระหว่างความเร็ว, chording และคันเหยียบฉันคิดว่าคุณน่าจะมีอินเตอร์เฟส "พิมพ์" ที่ดีสำหรับคีย์บอร์ดเปียโน โดยเฉพาะอย่างยิ่งการใช้ถ้อยคำอาจเป็นเทคนิคที่ทรงพลังมาก - ดังที่ฉันได้กล่าวถึงในความคิดเห็นนั่นเป็นเหตุผลว่าทำไมนักออกแบบเครื่องถ่ายภาพยศและไฟล์จึงสามารถใช้เครื่องสร้างภาพเคลื่อนไหวเพื่อให้ทันกับผู้คนที่พูดคุยกันหลายชั่วโมงติดต่อกัน ไม่สามารถใช้งานได้เป็นระยะเวลานานผ่านแป้นพิมพ์สไตล์เครื่องพิมพ์ดีดทั่วไป เช่นเดียวกับการจดชวเลขของเครื่องจักรคุณต้องมี "พจนานุกรม" ของความหมายของคอร์ดและลำดับของคอร์ด (คุณช่วยบอกได้ไหมว่าฉันเคยทำงานด้านซอฟต์แวร์ของการทำแผนที่เครื่องด้วยตนเอง?)

เมื่อต้องการทำเช่นนี้ชิ้นส่วนพื้นฐานคือ:

  • รับอินพุต MIDI อย่าพยายามทำสิ่งนี้ด้วยตนเองใช้ห้องสมุด แก้ไข : เห็นได้ชัดว่า Java Sound API รองรับ MIDIรวมถึงการรับเหตุการณ์จากตัวควบคุม MIDI เย็น. หน้านี้อาจมีประโยชน์
  • การแปลงข้อมูลนั้นเป็นการกดแป้นที่คุณต้องการส่งเช่นผ่านพจนานุกรมที่ฉันกล่าวถึงข้างต้น
  • ส่งสัญญาณการกดแป้นพิมพ์ไปยังคอมพิวเตอร์

หากต้องการใช้งานร่วมกับซอฟต์แวร์ได้ในวงกว้างคุณต้องเขียนสิ่งนี้เป็นไดรเวอร์อุปกรณ์แป้นพิมพ์ นี่คือปลั๊กอินไปยังระบบปฏิบัติการที่ทำหน้าที่เป็นแหล่งสำหรับเหตุการณ์แป้นพิมพ์พูดคุยกับฮาร์ดแวร์พื้นฐาน (ในกรณีของคุณคือคีย์บอร์ดเปียโน) สำหรับ Windows และ Linux คุณอาจต้องการใช้ C สำหรับสิ่งนั้น

อย่างไรก็ตามเนื่องจากคุณเพิ่งสร้างการกดแป้นพิมพ์ (ไม่พยายามที่จะสกัดกั้นพวกเขาซึ่งฉันพยายามจะทำเมื่อหลายปีก่อน) คุณอาจใช้คุณลักษณะใด ๆ ที่ระบบปฏิบัติการมีเพื่อส่งการกดแป้น Windows มีอินเทอร์เฟซสำหรับการทำเช่นนั้น (อาจเป็นได้หลายอย่างที่ฉันคิดว่าเป็นSendInputแต่ฉันรู้ว่ามีอินเทอร์เฟซ "เจอร์นัล" ที่ทำสิ่งที่คล้ายกัน) และฉันมั่นใจว่าระบบปฏิบัติการอื่น ๆ นั่นอาจเพียงพอสำหรับวัตถุประสงค์ของคุณ - มันเป็นจุดเริ่มต้นของฉันเพราะเส้นทางของไดรเวอร์อุปกรณ์จะไม่แน่นอนและคุณอาจต้องใช้ภาษาอื่นแทน Java (ฉันเป็นแฟนตัวยงของ Java แต่อินเทอร์เฟซที่ระบบปฏิบัติการใช้เพื่อพูดคุยกับไดรเวอร์อุปกรณ์มีแนวโน้มที่จะบริโภคได้ง่ายขึ้นผ่านทาง C และคล้ายกัน)


อัปเดต : เพิ่มเติมเกี่ยวกับ "พจนานุกรม" ของคอร์ดถึงการกดแป้น:

โดยพื้นฐานแล้วพจนานุกรมคือtrie (ขอบคุณ @Adam) ที่เราค้นหาด้วยการจับคู่คำนำหน้าที่ยาวที่สุด รายละเอียด:

ในการทำชวเลขชวเลขเครื่องชวเลขช่างเขียนเขียนโดยกดปุ่มหลายปุ่มบนเครื่องชวเลขรุ่นพร้อมกันจากนั้นปล่อยทั้งหมด พวกเขาเรียกสิ่งนี้ว่า "จังหวะ" ของคีย์บอร์ด มันเหมือนกับการเล่นคอร์ดบนเปียโน จังหวะบ่อยครั้ง (แต่ไม่เสมอไป) สอดคล้องกับพยางค์ของภาษาพูด เช่นเดียวกับพยางค์บางครั้งหนึ่งจังหวะ (คอร์ด) มีความหมายทั้งหมดด้วยตัวของมันเองบางครั้งหนึ่งจังหวะมีความหมายรวมกับจังหวะต่อไปนี้เท่านั้น (คิดว่า "ดี" กับ "ดี" ตามด้วย "บาย") แม้ว่าพวกเขาจะได้รับอิทธิพลอย่างมากจากโรงเรียนที่พวกเขาศึกษา แต่นักชวเลขแต่ละคนจะมี "พจนานุกรม" ของตัวเองว่าพวกเขาใช้จังหวะอะไรเพื่อหมายถึงอะไร พจนานุกรมจะมีรายการที่สั้นส่วน stenographic ("steno", สั้น ๆ ) เป็นหนึ่งจังหวะยาวหรือหลายจังหวะยาว บ่อยครั้งที่จะมีหลายรายการที่มีจังหวะเริ่มต้นเดียวกันซึ่งแตกต่างกันตามความยาวของพวกเขาและตามจังหวะที่ตามมา ตัวอย่างเช่น (และฉันจะไม่ใช้ steno จริงที่นี่เพียงแค่ตัวยึด) อาจมีรายการเหล่านี้:

A = alpha
A / B = ตัวอักษร
A / B / C = ตัวอักษร
เครื่องปรับอากาศ = เครื่องปรับอากาศ
B = ผึ้ง
B / C = เพราะ
C = ทะเล
D = สุนัข
D / D = Dee Dee

(ตัวอักษรเหล่านั้นไม่ได้หมายถึงโน้ตดนตรีเพียงแค่เครื่องหมายนามธรรม)

โปรดทราบว่าAเริ่มต้นหลายรายการและทราบว่าวิธีการแปลลายCเส้นขึ้นอยู่กับว่าคุณเคยเห็นA, a B, หรือคุณกำลังเริ่มต้นใหม่

โปรดทราบว่า (แม้ว่าจะไม่แสดงในตัวอย่างเล็ก ๆ ด้านบน) อาจมีหลายวิธีในการ "เล่น" คำหรือวลีเดียวกันแทนที่จะเป็นเพียงคำเดียว นักทำ Stenographers ทำเพื่อให้ง่ายต่อการไหลจากคำก่อนหน้าไปยังถัดไปขึ้นอยู่กับตำแหน่งมือ มีการเปรียบเทียบที่ชัดเจนเกี่ยวกับดนตรีที่นั่นและคุณสามารถใช้สิ่งนั้นเพื่อทำให้การพิมพ์ของคุณคล้ายกับการเล่นดนตรีมากขึ้นเพื่อป้องกันทั้งสองอย่างนี้ไม่ให้กระทบกับการเล่นเปียโนของคุณและเพื่อเพิ่มโอกาสในการช่วยเหลือ RSI

เมื่อแปล steno เป็นข้อความมาตรฐานเราจะใช้การค้นหา "การจับคู่คำนำหน้าที่ยาวที่สุด" อีกครั้ง: อัลกอริทึมการแปลเริ่มต้นด้วยจังหวะแรกที่เคยเขียนและค้นหารายการที่ขึ้นต้นด้วยจังหวะนั้น หากมีเพียงรายการเดียวและเป็นหนึ่งจังหวะยาวเราสามารถพูดได้อย่างน่าเชื่อถือว่า "นั่นคือรายการที่จะใช้" ออกข้อความที่สอดคล้องกันแล้วเริ่มต้นใหม่ด้วยจังหวะถัดไป แต่มีโอกาสมากขึ้นที่โรคหลอดเลือดสมองนั้นเริ่มต้นหลายรายการที่มีความยาวแตกต่างกัน ดังนั้นเราจะดูจังหวะต่อไปและดูว่ามีรายการที่เริ่มต้นด้วยสองจังหวะตามลำดับ; และต่อ ๆ ไปจนกว่าเราจะได้แมทช์

ดังนั้นด้วยพจนานุกรมด้านบนสมมติว่าเราเห็นลำดับนี้:

ACBBCABCABD

นี่คือวิธีที่เราต้องการแปล:

  1. Aเป็นจุดเริ่มต้นของสามรายการที่มีความยาวต่างกัน ดูจังหวะต่อไป:C
  2. A/Cตรงกับหนึ่งรายการเท่านั้น เอาท์พุท "เครื่องปรับอากาศ" และเริ่มต้นใหม่ด้วยจังหวะถัดไป:B
  3. Bเริ่มสองรายการ; ดูจังหวะต่อไป:B
  4. B/Bไม่ได้เริ่มอะไรเลย ใช้การแข่งขันก่อนหน้าที่ยาวที่สุด ( B) และเอาท์พุทที่ ("ผึ้ง")
  5. มี output B= "bee" เรายังคงมีBจังหวะในบัฟเฟอร์ของเรา มันเริ่มต้นสองรายการดังนั้นให้ดูที่จังหวะต่อไป:C
  6. B/Cตรงกับหนึ่งรายการ; เอาท์พุท "เพราะ" และเริ่มต้นใหม่ด้วยจังหวะถัดไป:A
  7. Aเริ่มสามรายการ; ดูจังหวะต่อไป:B
  8. A/Bเริ่มสองรายการ; ดูจังหวะต่อไป:C
  9. A/B/Cตรงกับหนึ่งรายการเท่านั้น เอาท์พุท "ตัวอักษร" และเริ่มต้นใหม่ด้วยจังหวะถัดไป:A
  10. Aเริ่มสามรายการ; ดูจังหวะต่อไป:B
  11. A/Bเริ่มสองรายการ; ดูจังหวะต่อไป:D
  12. A/B/Dไม่ตรงกับอะไรเลยดังนั้นลองจับคู่ก่อนหน้านี้ที่ยาวที่สุด ( A/B) และใช้มันเพื่อเอาท์พุท "ตัวอักษร" นั่นทำให้เราDยังคงอยู่ในบัฟเฟอร์
  13. Dเริ่มต้นสองรายการดังนั้นโดยปกติเราจะดูจังหวะต่อไป - แต่เราได้ประมวลผลทุกจังหวะแล้วดังนั้นให้พิจารณาแยกกัน ในการแยกมันแปลว่า "สุนัข" ดังนั้นเอาท์พุทที่

แง่มุมด้านบนที่ควรทราบ:

  • คุณมีบัฟเฟอร์ของจังหวะที่คุณอ่าน แต่ยังไม่ได้แปล
  • คุณต้องการจับคู่สโตรกที่สุดกับรายการเดียวที่คุณสามารถทำได้เสมอ A/Bควรแปลเป็น "ตัวอักษร" ไม่ใช่ "alpha" และ "bee"
  • (ไม่แสดงด้านบน) คุณอาจมีลำดับการสโตรกที่คุณไม่สามารถแปลได้เพราะพวกเขาไม่ตรงกับสิ่งใดในพจนานุกรม (คน Steno ใช้คำนาม "untranslate" - เช่นด้วยพจนานุกรมของเราจังหวะEจะเป็น "untranslate")
  • (ไม่แสดงด้านบน) ทฤษฎีสเตโนบางทฤษฎีอนุญาตให้สโตรกชุดเดียวกันมีความหมายมากกว่าหนึ่งอย่างขึ้นอยู่กับบริบทที่กว้างขึ้น คน Steno เรียก "ความขัดแย้ง" เหล่านี้ คุณอาจต้องการที่จะไม่อนุญาตให้พวกเขาในโครงการของคุณและในความเป็นจริงเมื่อ steno เคยถูกแปลด้วยตนเองโดยนักชวเลขนักเขียนความขัดแย้งได้ดีเพราะพวกเขารู้เพียงแค่ว่าประโยคไหนเป็นตัวเลือกที่ถูกต้อง การแปลด้วยคอมพิวเตอร์ทฤษฎีที่ปราศจากความขัดแย้งของสเตโนเกิดขึ้นโดยเฉพาะเพื่อหลีกเลี่ยงการแปลข้อความที่เกิดขึ้นและ "แก้ไข" ความขัดแย้ง
  • การแปลแบบเรียลไทม์ (ซึ่งคุณกำลังทำอยู่) หมายความว่าหากคุณได้รับการจับคู่บางส่วนคุณจะต้องหยุดไว้ขณะรอคอร์ดถัดไป - แต่อาจจะหมดเวลาสูงสุดเท่านั้น แปลสิ่งที่คุณมีในบัฟเฟอร์ให้ดีที่สุด (หรือบางทีคุณอาจไม่ต้องการหมดเวลาเพราะเป็นสายของคุณ)
  • อาจดีที่สุดที่จะมีจังหวะที่ระบุว่า "ไม่สนใจจังหวะก่อนหน้า"
  • อาจดีที่สุดที่จะมีจังหวะที่ระบุว่า "ล้างบัฟเฟอร์อย่างสมบูรณ์โดยไม่ต้องแสดงผลอะไร"

6
@I__: บางโปรแกรมพยายามที่จะพูดคุยโดยตรงกับอุปกรณ์แป้นพิมพ์ดังนั้นอย่าเล่นอย่างดีกับอินเทอร์เฟซที่คล้ายกับ "sendkeys" หวังว่านี่จะเป็นเรื่องธรรมดาน้อยกว่าเมื่อหลายปีก่อนเมื่อฉันจัดการเรื่องนี้ครั้งสุดท้ายและอย่างที่ฉันพูดฉันจะเริ่มต้นด้วย "sendkeys" เช่นกลไกและกังวลเกี่ยวกับสิ่งอื่นถ้าคุณต้องการ (อาจเป็นการดีที่สุดที่จะทำการทดสอบโปรแกรมอย่างรวดเร็วในการส่งคีย์ [ด้วยตัวเองไม่ใช่โดยรับจาก MIDI] - รวมถึงลำดับของคีย์พิเศษ - จากนั้นทำการทดสอบด้วยซอฟต์แวร์ที่คุณต้องการควบคุมก่อนที่คุณจะลงไปไกลเกินไป .)
TJ Crowder

7
สำหรับผู้ที่ไม่เคยได้ยินเรื่องนี้พจนานุกรมที่คุณอธิบายนั้นเป็นTrie (ออกเสียงว่า 'ลอง')
อดัม

14
@I__: สนใจที่จะเขียนในขณะนี้เพื่อพูดอย่างนั้น คุณต้องการอะไรอีก ฉันคิดว่าฉันได้กล่าวถึงประเด็นสำคัญหลายประการของสิ่งที่คุณต้องทำ ฉันยังไม่ได้ทำหรือไม่ได้ชี้ไปยังใครที่มีเพราะฉันมีสิ่งอื่นที่ต้องทำและไม่รู้ว่าจะมีวิธีแก้ปัญหาที่สร้างไว้ล่วงหน้า แต่ในแง่ของการสร้างทางออกฉันคิดว่าฉันได้ชี้ให้คุณในทิศทางที่ถูกต้อง
TJ Crowder

2
โปรดทราบว่าคุณสามารถติดคอร์ดทั้งหมดในอาร์เรย์เชิงเส้นและทำการสำรวจเส้นทางทุกครั้งที่คุณได้รับเหตุการณ์ midi และยังไม่พบการชะลอตัวที่น่าสังเกตใด ๆ การใช้ Trie มีกลิ่นเล็กน้อยจากการปรับให้เหมาะสมก่อนกำหนด
FeepingCreature

5
@FeepingCreature: เมื่อฉันทำเช่นนี้กับนักจดชวเลขและนักข่าวศาลพจนานุกรมของพวกเขาสามารถวิ่งไปที่รายการนับแสนรายการได้อย่างง่ายดาย (ฉันจำคนที่ทำลายเครื่องหมายล้าน) ไม่มีอะไรเกิดขึ้นก่อนกำหนดจากระยะไกลเกี่ยวกับการใช้กลยุทธ์การปรับให้เหมาะสมเราจัดการกับ 12 MHz 386s ในกรณีของ I ___ ถ้าเขาไปกับความคิดของ Arduino (ซึ่งเป็นความคิดที่เจ๋งมาก) เขาก็จะต้องจัดการกับฮาร์ดแวร์ที่มีกำลังต่ำพอสมควรสำหรับยุคปัจจุบันแม้ว่าแน่นอนว่าสิ่งต่างๆ ฉันคิดว่าพจนานุกรมของเขามีแนวโน้มที่จะเล็กลงอย่างมาก แต่ ...
TJ Crowder

184

ลองทำบางอย่างในฮาร์ดแวร์ที่เลียนแบบแป้นพิมพ์ usb (หรือ ps / 2?) คุณจะไม่ต้องพึ่งพาระบบปฏิบัติการที่เฉพาะเจาะจงหรือ OS API ที่เฉพาะเจาะจงอีกต่อไป โซลูชันฮาร์ดแวร์จะยืนการทดสอบของเวลา อย่าหยุดใช้ API เก่าใน Windows 7 เมื่อทุกคนใช้ Windows 11! Arduinoเป็นเรื่องง่ายที่จะเรียนรู้

มีข้อมูลมากมายและช่วยออกมาสำหรับ Arduino มันเป็นแพลตฟอร์มการแฮ็กฮาร์ดแวร์ที่สร้างขึ้นสำหรับมือใหม่ มันจะยิ่งใหญ่ขึ้นในขณะนี้ที่Google กำลังผลัก Arduino

แก้ไข: ซอฟต์แวร์ และฮาร์ดแวร์คีย์บอร์ด USB เสมือน


ฉันชอบความคิดในการใช้ Arduino สำหรับสิ่งนี้ หน่วยความจำอาจเป็นปัญหาแม้ว่า ดูเหมือนว่าบอร์ดที่ออกแบบไว้ล่วงหน้าที่ใหญ่ที่สุดจะมี 256k ของ Flash (ซึ่ง bootloader ใช้งาน 8k) ย้อนกลับไปในวันนี้เราอัดแน่นการแปลแบบเรียลไทม์ / การแสดง / การแก้ไขของชวเลขเครื่องเป็น 1M ภายใต้ DOS (เช่นปกติ 640k บวกทั้ง EMS หรือหน่วยความจำขยาย) แต่เราเขียนรหัส C และชุดประกอบที่แน่นหนา เป็น> 250k ด้วยตนเอง) อยู่ในดิสก์ ที่นี่ไม่มีการแสดงผลหรือการแก้ไขพร้อมกันดังนั้นมันดี แต่พจนานุกรมจะต้องมีขนาดเล็ก ...
TJ Crowder

โอ้ไม่มีอะไรเลย ฉันจัดการกับนักข่าวที่ศาลซึ่งมีพจนานุกรมเป็นประจำแม้กระทั่งในรูปแบบที่กะทัดรัดมากที่เราใช้มีขนาดหลายเมกะไบต์ ที่ใหญ่ที่สุดที่ฉันเห็นคือ 4.5MB - และอีกครั้งที่ถูกเก็บไว้ในรูปแบบที่มีการบีบอัดสูง เมื่อรวมกับความจริงที่ว่ามีแป้นน้อยกว่าบนคีย์บอร์ด steno กว่าคีย์บอร์ดเปียโน ... ถึงกระนั้น Arduino ยังมีพอร์ต USB ดังนั้นพจนานุกรมอาจอยู่ในอะแดปเตอร์แฟลช USB หรือแม้กระทั่ง (ขับเคลื่อนจากภายนอก) ) SSD หรือ HDD
TJ Crowder

2
@ คุณอาจต้องการพิจารณาความเป็นวัยรุ่นมากกว่าarduino ( pjrc.com/teensy ) หน่วยความจำเพิ่มขึ้นอย่างมากและสามารถจำลองแป้นพิมพ์ได้โดยตรง มันเข้ากันได้กับไลบรารี arduino จำนวนมากอยู่แล้วและสิ่งที่เข้ากันไม่ได้นั้นต้องการการกำหนดพินใหม่ - อีกทางเลือกหนึ่ง, atmega ยังสร้างบอร์ดตัวอย่างที่มีแฟลชในตัว 16 MB และมีราคาประมาณ $ 30 (at90usbkey)
Marc

8
การออกแบบอินเตอร์เฟสเปียโนที่มีประโยชน์สำหรับคอมพิวเตอร์ไม่ใช่เรื่องง่าย IMHO ผู้ปฏิบัติการควรเริ่มต้นแบบในสภาพแวดล้อมปัจจุบันของเขา / เธอแล้วถ้ามันตอบสนองความต้องการของเขา / เธอกังวลเกี่ยวกับการพกพา แน่นอนว่าตัวเลือกพกพานั้นไม่ยากอย่างเห็นได้ชัด
Emilio M Bumachar

111

ฟังดูเหมือนว่าฉันกำลังมองหาคำแนะนำเกี่ยวกับวิธีการสร้างสิ่งนี้ด้วยตัวคุณเองน้อยลงและถามว่ามีแหล่งข้อมูลอะไรบ้างที่จะทำให้สำเร็จในสิ่งที่คุณต้องการ ขึ้นอยู่กับระบบปฏิบัติการของคุณมีหลายวิธีในการทำสิ่งนี้ให้สำเร็จโดยไม่ต้องเขียนโปรแกรมของคุณเองตั้งแต่ต้น:

MIDI Stroke

ฟรี. สำหรับMac OS X 10.3 ขึ้นไป อันนี้มาพร้อมกับ "ความสามารถในการใช้แป้นพิมพ์MIDIใด ๆแทนการเปลี่ยนแป้นพิมพ์คอมพิวเตอร์แบบเต็ม"

นักแปล MIDI ของ Bome

ฟรี / โปสการ์ด (มันแปลกไปหน่อย) สำหรับWindows 2000 และขึ้นและ Mac OS X ในตอนแรกดูเหมือนว่าจะเหมาะกับการใช้งานAutoHotkeyมากขึ้นแต่ในการค้นหาเพิ่มเติมฉันคิดว่ามันสามารถทำสิ่งที่คุณต้องการได้เป็นอย่างดี

Max และ aka.keyboard

ฟรี. สำหรับMac OS X ไม่ใช่โซลูชัน "พร้อมออกจากกล่อง" อย่างแน่นอน แต่ถ้าคุณพอใจกับการกำหนดค่าอุปกรณ์พื้นฐานมันก็ไม่ควรเลวร้ายเกินไป


49

คุณสามารถเข้าถึงฮาร์ดแวร์กับตัวอย่างรหัสแหล่งที่มาใน .NET ในMIDI DotNet

ตัวอย่างการทำงานที่สมบูรณ์เป็น sourcecode เพื่อสร้างสตรีมข้อมูลบันทึกย่อ 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 รุ่นด้วย)

และตระหนักถึงการกดแป้นพิมพ์เป็น describedin Tipp-อัพโหลด: VB.NET 0266: Globaler KeyHook

ป้อนคำอธิบายภาพที่นี่

จากนั้นใช้เมทริกซ์ที่ใช้งานได้ดีสำหรับเครื่องเล่นเปียโน Timo Boehme www.goldengel.ch

บนเปียโนและเมื่อคุณเป็นผู้เล่นที่ดีคุณสามารถมี 10 นิ้วบนแป้นพิมพ์และหากเมทริกซ์นั้นสามารถใช้งานได้คุณจะเร็วกว่าที่ผู้ใช้แป้นพิมพ์คอมพิวเตอร์คนอื่น ๆ คิด :-)

ในกรณีนี้ถ้าฉันเข้าใจคำถามของคุณถูกต้องมันไม่ควรเป็นเรื่องใหญ่


41

ฉันศึกษาการเล่นเปียโนในวิทยาลัยจากนั้นก็มีส่วนร่วมในการออกแบบการเขียนโปรแกรมและการใช้Vimดังนั้นฉันจึงใช้เวลาหลายครั้งในการสร้างต้นแบบเช่นนี้

คุณสามารถได้รับนี้ทำงานสวยอย่างรวดเร็วในลินุกซ์โดยใช้ภาษาการเขียนโปรแกรมกราฟิกสำหรับศิลปินมัลติมีเดีย " เพียวข้อมูล " พร้อมกับ x11key ภายนอกโดยอเล็กซ์อังเดร

บน Mac คุณสามารถใช้MidiStroke ฉันเชื่อว่าวิธีการใน Windows เกี่ยวข้องกับเครื่องมือMidiOxและAutoHotKey ในเวลาอื่นผมมีรุ่นที่จะใช้ปลั๊กอิน Java สำหรับMax / MSP ฉันเชื่อว่าPatrice Coletสร้างหน้าต่างภายนอกสำหรับ Pure Data ที่ทำงานได้ดี แต่ฉันไม่สามารถหาได้อีกต่อไป นอกจากนี้ยังมีภายนอกสำหรับ MaxMSPที่สามารถทำได้บน Windows ในที่สุดOsculator ที่ไม่มีค่าใช้จ่าย แต่ยอดเยี่ยมสามารถทำสิ่งที่คุณต้องการ - ดูหน้าคุณสมบัติ

เมื่อฉันได้ทำงานฉันไม่เคยติดกับมันเพราะฉันไม่สามารถหยุดการใช้เครื่องมือกับเค้าโครง มันเยี่ยมมากที่มีจอมอนิเตอร์ของฉันบนคีย์บอร์ดไฟฟ้าของฉัน โชคดี.


37

เกี่ยวกับ MIDI

คุณระบุว่าคุณ "ไม่รู้อะไรเลยเกี่ยวกับ MIDI" เทคโนโลยี MIDI ค่อนข้างตรงไปตรงมาเมื่อคุณเข้าใจ แต่อาจทำให้เกิดความสับสนในตอนแรก หนึ่งในแหล่งข้อมูลที่เป็นประโยชน์อย่างมากสำหรับฉันในการทำความเข้าใจรากฐานสำหรับ MIDI (ซึ่งจำเป็นอย่างยิ่งหากคุณต้องการตั้งโปรแกรมการโต้ตอบ MIDI) เป็นหนังสือที่เรียกว่าMIDI สำหรับเทคโน มันเป็นหนังสือที่อ่านง่ายและมีประโยชน์มาก


Pure Data & Max

จากประสบการณ์ของฉันในการพัฒนามัลติมีเดียแบบอินเทอร์แอคทีฟฉันพบว่ามีสองโปรแกรมที่คล้ายกันซึ่งอำนวยความสะดวกในการเชื่อมต่อและทำแผนที่สัญญาณ / อินพุตจากอุปกรณ์ใด ๆ

เหล่านี้คือMaxสำหรับสภาพแวดล้อม Mac และPure Dataสำหรับสภาพแวดล้อมพีซี ทั้งสองมีเอกสารออนไลน์มากมายและแบบฝึกหัด YouTube วิดีโอMax / MSP Tutorial 1 - การใช้แป้นพิมพ์คอมพิวเตอร์ของคุณเป็น midikeyboard (สไตล์แคนตัน)แสดงโปรแกรมที่สร้างขึ้นใน Max ที่แมปแป้นพิมพ์คอมพิวเตอร์กับอินพุตของแป้นพิมพ์ MIDI (ซึ่งเป็นสิ่งที่ตรงกันข้ามกับสิ่งที่คุณพยายามทำ) คุณสามารถรับผลลัพธ์ที่ต้องการได้โดยใช้รูปแบบเดียวกัน แต่กลับสัญญาณ / การแมป


AutoHotKey

AutoHotKeyเป็นยูทิลิตี้โอเพนซอร์สฟรีสำหรับ Windows ที่ให้คุณสามารถแมปปุ่มและปุ่มต่าง ๆ บนอุปกรณ์ของคุณไปยังมาโคร มันรองรับการใช้งานคีย์บอร์ด QWERTY คีย์บอร์ดและมาโครเมาส์

อย่างไรก็ตามฉันสามารถค้นหาการใช้งานที่สนับสนุนการทำแผนที่เฉพาะที่คุณกำลังมองหา สองเธรดเหล่านี้อธิบายกระบวนการ:

  1. MIDI ในการสนับสนุนใน AutoHotkeyการอภิปรายของกรณีการใช้งาน ผู้เขียนได้รับการมองหาโปรแกรมที่สามารถตรวจสอบการป้อนข้อมูล MIDI IN และแปลว่าการกดแป้น

  2. MIDI อินพุตไลบรารี่ทางออกของปัญหาของผู้แต่งและโค้ด / แพตช์ที่โพสต์ไปที่ AutoHotKey ซึ่งใช้ผลลัพธ์ที่คุณตั้งใจจริง ๆ

โดยทั่วไปดูเหมือนว่า AutoHotKey พร้อมกับแพทช์ที่กำหนดเองของผู้ใช้นี้จะให้สิ่งที่คุณต้องการในการสร้างการแมปจากคีย์บอร์ด MIDI ไปยังสัญญาณอินพุตของคีย์บอร์ด QWERTY สิ่งที่คุณต้องทำคือติดตั้งกำหนดค่าและกำหนดการแมปของคุณ


มีอะไรอีกไหม

คำตอบอื่น ๆ บางคำให้ข้อมูลที่ครอบคลุมมากขึ้นเกี่ยวกับการเขียนโปรแกรม MIDI และ MIDI โดยทั่วไป แต่เนื่องจากสถานะการโพสต์ของคุณดูเหมือนจะไม่เป็นอย่างที่คุณต้องการ ฉันต้องการช่วยคุณมากขึ้นถ้าเป็นไปได้ แต่มันจะง่ายขึ้นหากคุณสามารถระบุประเภทของข้อมูลที่คุณต้องการได้มากขึ้น ยกตัวอย่างเช่นที่คุณสนใจในวิธีการแปลงสัญญาณคีย์บอร์ด MIDI ไปยังQWERTYสัญญาณแป้นพิมพ์หรือสนใจหลักของคุณการหาวิธีการแก้ปัญหาของกล่องที่จะแก้ไขปัญหาที่เฉพาะเจาะจงของคุณหรือไม่ คุณกำลังมองหาสิ่งที่ยังไม่ได้รับการแก้ไข?


27

คุณสามารถแฮกคีย์บอร์ด USB ของคุณเองได้อย่างรวดเร็วด้วย Teenys micro controller

ในความเป็นจริงพวกเขามีโค้ดตัวอย่างสำหรับวิธีการทำให้แป้นพิมพ์ USB

คุณสามารถเข้าใกล้สองวิธีนี้:

  1. รับเปียโนเก่าและสวิตช์สายขึ้นโดยตรงไปยังวัยรุ่น

  2. เพิ่มตรรกะเพิ่มเติมเพื่อเชื่อมต่อกับพอร์ต MIDI และการถอดรหัสที่จำเป็น


นี่เป็นคำตอบที่มีแนวโน้มมากที่สุดเพราะเมื่อคุณทำอุปกรณ์ให้เสร็จสมบูรณ์มันจะทำงานบนคอมพิวเตอร์และระบบปฏิบัติการใด ๆ นำไปใช้ในการทำงานหรือเพียงแค่มีความสุขที่คุณสามารถอัพเกรดคอมพิวเตอร์ของคุณโดยไม่ต้องกังวลกับคีย์บอร์ด ฉันจะใช้อุปกรณ์ Teensy สองเครื่องและเชื่อมต่อเข้าด้วยกันด้วยหมุด I / O ของพวกเขา เนื่องจาก Teensy รองรับ USB MIDI pjrc.com/teensy/td_midi.html แล้วรหัสของคุณจำเป็นต้องดูแลสัญญาณการเคลื่อนย้ายระหว่างแป้นพิมพ์เล็ก ๆ กับ MIDI
Michael Dillon

24

อันที่จริงฉันทำงานเมื่อไม่นานมานี้พยายามจับอินพุตกลองของRock Bandลงในคอมพิวเตอร์ของฉัน (ทำตัวเลียนแบบกลองโฮมเมด Java เล็กน้อย) อย่างไรก็ตามฉันถามคำถามที่นี่เกี่ยวกับปัญหาการหน่วงเวลา (มีรหัสการลงคะแนนอยู่ในนั้น พร้อมกับสิ่งที่ฉันพยายามทำ) และถ้าฉันสามารถหาโปรแกรมของฉันฉันสามารถให้รหัสแก่คุณก็จะใช้ API บุคคลที่สาม ( JInput )

ขอให้โชคดีทั้งสองทาง


23

ลองBome ของนักแปล

มันทำงานข้ามแพลตฟอร์มสามารถแปลงอินพุตMIDIใด ๆเป็น keystoke ได้อย่างง่ายดายรวดเร็วในการติดตั้งและกำหนดค่ารวมถึงมันฟรีสำหรับการใช้งานส่วนตัว

มีการกวดวิชาที่เป็นQuick เคล็ดลับ: MIDI แปล - MIDI เพื่อการกดแป้นพิมพ์ของวิธีการตั้งค่าได้ง่ายขึ้น:

โดยทั่วไปมีความเป็นไปได้ที่ไม่สิ้นสุดของสิ่งที่คุณสามารถทำได้รวมถึงคีย์ chording และตัวดัดแปลง ฉันใช้มันสำหรับอุปกรณ์เสียงสดเพื่อควบคุมDAWของฉันโดยใช้เปียโนและไม่เคยมีปัญหา


18

ใน Java คุณสามารถใช้ JMF (Java Media framework) เพื่อแปลงสัญญาณ MIDI พื้นฐานของการออกแบบคีย์บอร์ดนั้นใช้งานง่ายนั่นคือส่วนต่อประสานผู้ใช้ และวาง charcter / symbol ที่ใช้บ่อยให้เป็นประโยชน์

โค้ดตัวอย่างและ API ในJava Sound Resources: ตัวอย่าง: Digital Signal Processing (DSP)ช่วยให้เข้าใจวิธีการประมวลผลสัญญาณ

การอ้างอิงเพิ่มเติมบางส่วน:


15

มีโปรแกรมที่เรียกว่าเป็นGlovePIE คุณสามารถตั้งโปรแกรมด้วยภาษาสคริปต์อย่างง่ายและฉันเชื่อว่ารองรับ MIDI ฉันไม่แน่ใจว่าสิ่งนี้เหมาะสมกับหมวดหมู่ "Java" หรือไม่ แต่ก็เป็นโปรแกรมที่ยอดเยี่ยม ฉันใช้มันเพื่อควบคุมหุ่นยนต์โดยใช้ตัวควบคุมPS3 มันทรงพลังมาก


15

คีย์บอร์ดจำนวนมากมีตัวเชื่อมต่อพอร์ตอนุกรม ( RS-232 ) เพื่อส่งสัญญาณ MIDI ไปยังคอมพิวเตอร์ ฉันใช้โปรแกรมที่เรียกว่าGirderเพื่อแปลงการสื่อสารพอร์ตอนุกรมเป็นจังหวะแป้นพิมพ์

คานเดอร์มีคุณสมบัติ "การแมป" ที่ช่วยให้คุณแมปแต่ละคีย์ทีละรายการ

นี่อาจเป็นคำตอบง่ายๆที่คุณกำลังมองหา!


12

เพียงเรียนรู้การจดชวเลข!

ชัดเจนจากการอภิปรายทั้งหมดในส่วนของคุณ คุณไม่ต้องการคิดค้นล้อใหม่อีกครั้งจากมุมมองทางเทคนิค แต่เมื่อคุณมีการเชื่อมต่อ (สิ่งที่คำถามนี้ถาม) และขึ้นและทำงานคุณยังคงมีงานส่วนใหญ่ข้างหน้าของคุณ: คุณต้องฝึกสมองของคุณ คุณยังมีการคิดค้นฉลาดวิธีที่มีประสิทธิภาพมากที่สุดในการทำว่า - ปัญหาการออกแบบทั้งหมดออกจาก rhealm ของ techies คอมพิวเตอร์ คุณหรือพวกเราคนใดคนหนึ่งจะสั้น

โชคดีที่ปัญหาได้รับการแก้ไขและฝึกฝนแม้ว่าจะผ่านไปหลายศตวรรษ ...

เรียนรู้การจดชวเลข!

ใช่นี่จะเป็นการตั้งแจ็คให้คุณสำรอง แต่อะไรคือเวลาหลายร้อยชั่วโมงในเวลาของคุณที่จะคุ้มค่าโดยท้ายที่สุดผลลัพธ์ที่น่าพึงพอใจน้อยกว่า? นอกจากนี้บทความวิกิพีเดียเกี่ยวกับการจดชวเลขการวิพากษ์วิจารณ์ว่า 'ดูเหมือนแป้นเปียโน'

แน่นอนว่าคุณไม่ต้องการให้เอฟเฟ็กต์ภาพสไลด์ปรากฏขึ้น ฉันต้องยอมรับว่าฉันไม่เคยนึกถึงความเป็นไปได้นี้มันจะสนุกจริง ๆที่เห็นใครบางคนอกข้อความจากคีย์บอร์ดเปียโน!

คุณสามารถเริ่มต้นด้วยแป้นพิมพ์ USB พร้อมทัชแพด (หรือตัวชี้จะเหมาะกับการยศาสตร์มากขึ้น) ใช้Ploverเพื่อแปล (ฉันแน่ใจว่าสามารถกำหนดค่าให้แป้นที่ไม่ใช่ตัวอักษรยังคงใช้งานได้ตามที่สำคัญสำหรับ การเขียนโปรแกรม) หรือทำตามด้ายRe: แป้นพิมพ์ Ploverจะม้วนแป้นพิมพ์ USB จดชวเลขของคุณเองหรือซื้อstenotype

โชคดี!


{และ} บนแป้นพิมพ์ชวเลขอยู่ที่ไหน คุณจะพิมพ์ชื่อที่ไม่ใช่คำpthreadอย่างไร
bobobobo

ลิงก์วิกิพีเดียผิดและควรเป็นen.wikipedia.org/wiki/Stenography
joelhoro

11

ลองดูที่เกมMAMEอาร์เคด พวกเขาได้สร้างอุปกรณ์ฮาร์ดแวร์เพื่ออนุญาตการป้อนข้อมูลจากรายการต่าง ๆ จำนวนเท่าใดก็ได้ IPACตัวอย่างเช่นสัญญาณจากอุปกรณ์แปลงใส่ลงใน USB ที่คอมพิวเตอร์สามารถแล้วใช้กุญแจที่จะเลียนแบบ คุณสามารถใช้อุปกรณ์อินพุตใด ๆ ที่จัดเรียงในลักษณะที่รู้สึกสะดวกสบายโดยไม่ต้องใช้ตรรกะในการเขียนโปรแกรมอย่างบ้าคลั่งเพราะซอฟต์แวร์เพื่อแปลความหมายอินพุตได้ทำไปแล้วและผ่านการทดสอบอย่างดี

ฉันเคยเห็นเครื่องจำลองการบินอิเล็กทรอนิคส์, ซุ้มที่กำหนดเองและระบบการลงคะแนนที่สร้างขึ้นในวิธีนี้ ..... และราคาถูก!


10

เพื่อแก้ปัญหานี้คุณจะต้องมีบางสิ่ง:

  1. วิธีในการเก็บข้อมูล MIDI จากแป้นพิมพ์ของคุณ ขึ้นอยู่กับอินเตอร์เฟส: อินเตอร์เฟส MIDI (คลาสสิค) หรืออินเตอร์เฟสUSB MIDI (ทันสมัย) ส่วนใหญ่ที่เป็นไปได้คือคอมพิวเตอร์ที่มีตัวเลือกมากที่สุด ไมโครคอนโทรลเลอร์โฮสต์ USB นั้นไม่ง่ายอย่างที่ใช้คอมพิวเตอร์

  2. แบบแผนในการแปลงข้อมูล MIDI เป็นการกดแป้น เช่นเดียวกับผู้ใช้คนหนึ่งชี้ให้เห็นคอร์ดเป็นวิธีที่จะไปเพราะจำนวนของคีย์จะไม่ขึ้นอยู่กับจำนวนของคีย์เปียโน

  3. วิธีในการฉีดกุญแจเข้าสู่ระบบปฏิบัติการ สิ่งนี้จะต้องใช้โปรแกรมควบคุมระดับต่ำเพื่อความถูกต้อง ฉันได้เล่นกับแอปพลิเคชันที่ฉีดข้อมูลแป้นพิมพ์และเมาส์ไปยังแอปพลิเคชันใน Windows 7 และมันอาจเป็นขุยและขึ้นอยู่กับว่าแอปพลิเคชันอยู่ในโฟกัสหรือไม่ นี่เป็นส่วนที่ยากที่สุดของส่วนต่อประสาน สิ่งที่อาจใช้ได้คือการสร้างไมโครคอนโทรลเลอร์คีย์บอร์ด USB HIDที่มีอินเตอร์เฟสแบบอนุกรม

อินเตอร์เฟสอนุกรมจะสร้างพอร์ตอนุกรมเสมือน ซอฟต์แวร์ที่อ่านข้อมูล MIDI และสร้างการกดแป้นสามารถส่งข้อความซีเรียลไปยังพอร์ตอนุกรมเสมือน ไมโครคอนโทรลเลอร์จะส่งการกดแป้นพิมพ์เพื่อให้ดูเหมือนกับแป้นพิมพ์มาตรฐาน สิ่งนี้จะทำให้สามารถเชื่อมต่อได้ทั้งพอร์ต MIDI และคีย์บอร์ด USB MIDI

Hmmm ด้วยอินเทอร์เฟซชนิดนี้คุณสามารถจำลองเมาส์และใช้การตั้งค่าคีย์เปียโนสำหรับแกนเมาส์และปุ่ม ความดันสามารถใช้เพื่อกำหนดความเร็วของตัวชี้เมาส์ ดังนั้นคุณสามารถกำจัดเมาส์ได้เช่นกัน ข้อดีอีกประการของวิธีนี้คืออุปกรณ์อินพุตทุกชนิดที่คุณเชื่อมต่อสามารถพูดคุยกับพอร์ตอนุกรมเสมือนเพื่อสร้างเหตุการณ์แป้นพิมพ์และเมาส์ ดังนั้นหากคุณต้องการเพิ่มฮาร์ดแวร์อื่น ๆ เช่นดรัมกลองหรือจอยสติ๊กมันจะเป็นเรื่องของการปรับโปรแกรมที่พูดถึงอินเตอร์เฟสแบบอนุกรม

สิ่งที่เหนือกว่าก็เหมือนกับที่โพสต์ไว้ด้านบนเพื่อใช้ Arduino แต่ยังรวมถึงUSB Host Shieldจาก Sparkfun เพื่อจัดการคีย์บอร์ดเพลงที่ใช้ USB สิ่งนี้ทำให้ Arduino สามารถตั้งโปรแกรมเป็นแป้นพิมพ์หรือแป้นพิมพ์คำสั่งผสมเมาส์ในชิปบูตโหลดเดอร์และอนุญาตให้อุปกรณ์ทำหน้าที่โฮสต์USBสำหรับแป้นพิมพ์เพลงที่ใช้ USB จากนั้นคุณจะครอบคลุมทั้งสองประเภท แม้ว่าฉันยังคิดว่าวิธีการพอร์ตอนุกรมเสมือนมีความยืดหยุ่นมากขึ้นและจะง่ายต่อการโปรแกรมในระยะยาว อุปกรณ์ Arduino จะเปลี่ยนแปลงได้ยากกว่าโปรแกรมเดสก์ท็อปหรือบริการ

มีความเป็นไปได้อีกอย่างคือ: มีคีย์บอร์ดมือเดียวที่เชื่อมโยงกันอยู่แล้ว ฉันเคยเห็นวิดีโอเกี่ยวกับพวกเขา แต่คุณจะต้องตรวจสอบว่าคนที่ทำร้ายมือของคุณหรือไม่


7

มันควรจะค่อนข้างง่ายโดยใช้บางอย่างเช่น. NET DirectSound เพื่อเชื่อมต่อกับอุปกรณ์ MIDI คุณจะต้องระบุอุปกรณ์ MIDI เป้าหมายของคุณแล้วรับรหัสเพื่อฟังข้อความที่เข้ามา (มีบทความเกี่ยวกับการทำสิ่งนี้ผ่าน Google)

เนื่องจากคุณใช้ MIDI เป็นแป้นพิมพ์โดยทั่วไปมีเพียงสองข้อความ MIDI ที่คุณต้องตรวจจับคือบันทึกย่อและปิดหมายเหตุ ข้อความ MIDI คือสามไบต์ข้อมูลที่ระบุคำสั่งบันทึกย่อและความเร็ว การปิดโน้ตเป็นเพียงหมายเลขโน้ต (บางครั้งกอง MIDI ที่ 'ไม่ดี' จะส่งโน้ตด้วยความเร็วเป็นศูนย์ซึ่งคุณต้องคาดไว้ด้วย)

เมื่อคุณมีข้อความที่แปลข้อความเหล่านี้เอาท์พุทแป้นพิมพ์ควรจะค่อนข้างง่ายจาก. NET

มีคำแนะนำมากมายในคำตอบอื่น ๆ เกี่ยวกับเทคนิค ฉันแค่อยากให้คุณมีความคิดเกี่ยวกับข้อความ MIDI ที่แท้จริง โชคดี!


หมายเหตุด้านเอกสาร 'Universal Serial Bus Device Class Class สำหรับอุปกรณ์ MIDI' ให้ภาพรวมที่เป็นระเบียบของข้อความ MIDI: usb.org/developers/devclass_docs/midi10.pdf
Simon Inns

7

คุณจะได้ผลลัพธ์ที่ดีขึ้นและมีความสุขมากขึ้น (ไม่ว่าคุณจะใช้ระบบปฏิบัติการใดและ / หรือโปรแกรมDAWใด) โดยการเล่นคีย์บอร์ด MIDI ภายนอกเป็นตัวควบคุมผ่านการ์ดเสียงของคุณ จากนั้นกำหนดเส้นทางไปยังซอฟต์แวร์ GB ของคุณ (หรืออะไรก็ตาม) และโทนเสียงจะสร้างเสียงจำนวนมากที่พวกเขาจัดหาให้คุณแบบเรียลไทม์

หากการ์ดเสียงของคุณไม่รองรับ MIDI I / O (ins / outs / thrus) แสดงว่าไม่มีปัญหา คุณสามารถลองทำการค้นคว้าและลงทุนในตัวแปลง MIDI บนโต๊ะภายนอกได้ หลายคนมีความพร้อมที่จะแปลง MIDI ไปเป็น USB 2.0 เพิ่มเติม (โดยผ่านการ์ดเสียงที่มีอยู่ทั้งหมด)

ตัวอย่างเช่น: มันค่อนข้างยากที่จะได้รับผลการบันทึกแบบพระคุณ "human like" ผ่านทางตัวเลือกการเปลี่ยน Z และ X โดยใช้แป้นพิมพ์คอมพิวเตอร์และเครื่องมือดินสอ เมื่อใดก็ตามที่นิ้วของคุณเองสามารถเล่นคีย์บอร์ด MIDI จากช่วงรีจิสเตอร์อ็อกเทฟของตัวเองได้ทันที!

ฉันตระหนักถึงข้อ จำกัด ด้านงบประมาณที่อาจเกี่ยวข้อง แต่บางส่วนของ "Casio" แป้นพิมพ์ 5 คู่แปดตัวที่ถูกขายที่ Radio Shack ราคาต่ำกว่า $ 100.00 US Dollars (* หรือน้อยกว่า) คือทั้งหมดที่คุณต้องการ (รวมถึงแพทช์เสียงออนบอร์ดและโมดูลซีเควนเซอร์ น่าประหลาดใจสำหรับสิ่งอื่น ๆ เช่นกัน)

ตัวเลือกแป้นพิมพ์ RadioShack MIDI

สำหรับตัวแปลง MIDI ภายนอกสำหรับการ์ดเสียงที่มีอยู่ฉันใช้งานGoogleเพื่อค้นหาคุณดังนี้ด้วยแพลตฟอร์ม Mac โดยเฉพาะ:

ข้อมูลการแปลง MIDI ภายนอกจำนวนมากนี้อาจเป็นเรื่องที่ยุ่งยากสำหรับคุณในตอนแรกดังนั้นฉันจึงแยกย่อยมากขึ้นว่า "เป็นมิตรกับผู้ใช้" สำหรับการพิจารณาและงบประมาณของคุณ:

ไม่มีอะไรผิดปกติกับการอำนวยความสะดวกในแป้นพิมพ์เสมือนเป็นVST 's เมื่อใช้อีกา พวกเขามีสถานที่ของพวกเขา

แต่คุณฟังดูเหมือน keyboardist ที่ประสบความสำเร็จ ดังนั้นทำไมไม่พิจารณาตัวเลือกการแปลง / คีย์บอร์ด MIDI ภายนอกที่ฉันเพิ่งพูดถึงด้วยตัวคุณเอง?

โชคดีและฉันหวังว่านี่จะช่วยให้คุณมีความคิดที่สามารถและจะทำงานให้คุณ!


6

หากคุณไม่ต้องการทำการเขียนโปรแกรมด้วยตัวเอง แต่เพียงต้องการแก้ไขปัญหาคุณสามารถซื้อคีย์บอร์ด USB-MIDI ซึ่งคุณสามารถกำหนดคีย์ใด ๆ เพื่อส่งสัญญาณคีย์บอร์ด QWERTY แทนเอาต์พุต MIDI สำหรับ ตัวอย่างM-Audio Axiom Pro

วิธีนี้จะทำงานกับระบบปฏิบัติการและคอมพิวเตอร์ใด ๆ ที่รองรับคีย์บอร์ด USB มาตรฐานเนื่องจากคีย์บอร์ด MIDI จะระบุตัวเองว่าเป็นคีย์บอร์ด QWERTY มาตรฐาน


คุณรู้หรือไม่ว่าจะเป็นไปได้ที่จะกำหนดคอร์ดให้กับการกดแป้นเฉพาะเช่นกัน? ตัวอย่างเช่นถ้าฉันเล่นคอร์ด MAJOR ฉันสามารถแปลมันเป็น "สุนัขจิ้งจอกกระโดด"
l

ขออภัยที่ไม่ตอบเร็วฉันมีวันหยุด 4 วัน;) ไม่เลยโชคไม่ดีที่คุณสามารถกำหนดรหัส QWERTY ได้หนึ่งรหัสต่อหนึ่งคีย์เท่านั้นดังนั้นมันจึงใช้งานได้เป็นคีย์บอร์ดมาตรฐาน
Martin Odhelius

Btw ถ้าคุณซื้อเพียงแค่จำไว้ว่าให้ซื้อ PRO-one เพราะฉันไม่คิดว่ารุ่นที่ไม่ใช่ PRO จะมีฟังก์ชั่นการกำหนด QWERTY
Martin Odhelius

ฉันไม่คิดว่ามันเป็นไปได้ที่จะกำหนดคอร์ดให้กับรหัส ASCII เพียงหนึ่งคีย์ต่อรหัส แต่ฉันจะตรวจสอบสิ่งนี้ด้วยความจริงของฉันคืนนี้เมื่อฉันกลับบ้านจากที่ทำงาน
Martin Odhelius

ฉันเพิ่งสังเกตเห็นว่าเป็นไปได้ที่จะกำหนดรหัส qwerty ให้กับปุ่มควบคุม (ปุ่มฟังก์ชั่น, แผ่นรองกลอง, ปุ่มตัวเลขและอื่น ๆ ) ไม่ใช่สำหรับปุ่มเปียโนจริงบนแป้นพิมพ์ ฉันเป็นเจ้าของคีย์บอร์ดนี้และแน่ใจว่าเป็นไปได้ที่จะกำหนดรหัส ascii ให้กับคีย์ใด ๆ แต่ตอนนี้เมื่อฉันลองใช้ฉันจะสังเกตเห็นว่าผิด! ฉันเสียใจอย่างมากกับสิ่งนี้เป็นไปได้ไหมที่จะคืนค่ารางวัลในบางวิธี?
Martin Odhelius

6

คุณสามารถใช้ง่ายAutoItสคริปต์เพื่ออ่านกิจกรรมทั้ง MIDI, ดูMIDI การป้อนข้อมูล

นอกจากนี้คุณยังจะต้องMIDI UDFและกดปุ่มจำลอง

การอ่านเหตุการณ์ MIDI ควรเป็นเรื่องง่าย แต่ตัวควบคุม MIDI (เครื่องมือ) ต่าง ๆ มีคุณสมบัติที่แตกต่างกัน ลองค้นหาว่าเปียโน MIDI ของคุณทำอะไรก่อนแล้วดูว่าคุณสามารถแมปคุณสมบัติเหล่านั้นให้ดีที่สุดเพื่อจำลองQWERTY - แป้นพิมพ์แบบกดปุ่ม

ถ้าคุณต้องการคุณอาจมีบางสิ่งบางอย่างบนหน้าจอหรือในถาดที่จะช่วยให้คุณเห็นสิ่งที่คุณกำลังทำ (นั่นคือสำหรับShift, CtrlและAltการจำลอง)


5

คุณอาจดูคีย์บอร์ดที่มีเส้นตรง พวกเขามีข้อได้เปรียบที่คุณไม่จำเป็นต้องเขียนไดรเวอร์สำหรับพวกเขาก่อนที่คุณจะสามารถใช้พวกเขาและบางคนก็คล้ายกับรูปแบบของคีย์บอร์ดเปียโน


5

หากคุณรู้รหัสใน Java คุณสามารถใช้วิธีนี้:

ครั้งแรกที่ดำเนินการjavax.sound.midi.Receiverด้วยsend(..)วิธีการที่จะทำแผนที่ 'หมายเหตุเกี่ยวกับ' กิจกรรมเพื่อการกดแป้นพิมพ์เหมือนที่คุณต้องการ

คุณจะต้องได้รับเนื้อหาของ MidiMessage ด้วยgetMessageวิธีการของมันและสอดแทรกเข้าไปในแบบของคุณ ความหมายของข้อความไบต์สามารถพบได้ในข้อความ MIDI

หลังจากได้รับ 'note on' หรือ 'note off' สำหรับแป้นคีย์บอร์ดบางตัวคุณสามารถแมปไปยังคีย์ที่คุณชอบโดยกำหนดค่าคงที่ของคลาส KeyEvent เช่น C # 4 -> KeyEvent.VK_A เป็นต้น . รหัสคีย์นี้สามารถใช้โดยjava.awt.Robotวิธีการของการกดแป้นและ keyRelease เพื่อส่งการกดแป้นพิมพ์จริงไปยังระบบปฏิบัติการและไปยังแอปพลิเคชันอื่น ๆ


4

ฉันเห็นด้วยกับคำตอบของ Brian O'Dell - ถ้านี่เป็นโครงการของฉันฉันจะทำในฮาร์ดแวร์ มันมีข้อดีของการเป็นแพลตฟอร์มและฮาร์ดแวร์อิสระ - กล่องของคุณแทนที่ความต้องการอินเทอร์เฟซ MIDI-USB และพีซี API

mbedเป็นแพลตฟอร์มต้นแบบที่รวดเร็วซึ่งง่ายต่อการเรียนรู้และมีข้อได้เปรียบเหนือ Arduino IMHO หลายประการ (คอมไพเลอร์ออนไลน์, แฟลช 512 KB, 96 MHz, ภาษา C ++) มันมีอินเตอร์เฟสแป้นพิมพ์ USBและอินเตอร์เฟสUSB Midi ที่เขียนไว้ล่วงหน้าสำหรับคุณ

ชุมชนเป็นมิตรและยินดีให้ความช่วยเหลือและมีโครงการที่มีอยู่มากมายโดยใช้การจำลองแบบ MIDI และ USB hid - ค้นหา Youtube สำหรับ "mbed MIDI" หรือคล้ายกัน


4

ถ้าคุณใช้ลินุกซ์มีการใช้เวลาที่Footware

มันควรเป็นสิ่งที่คุณกำลังมองหา - หากคุณปรับระดับเสียง MIDI ให้เป็นแบบแผนที่ที่คุณชอบ ...

ฉันไม่เคยคิดว่ามันจะมีประโยชน์สำหรับทุกคนยกเว้นฉัน; o)


2
ที่งานก่อนหน้าของฉันในฐานะผู้ดูแลฉันมีตัวควบคุมเท้าใต้โต๊ะของฉัน - เพื่อลดการออกจากแถวบ้านเป็นกลุ่ม
FlashKorten


1

สิ่งนี้จะไม่ยากเกินไป

ฉันสมมติว่าคุณอยู่บนWindowsแต่ก็ไม่แน่ใจ ฉันได้เขียนซีเควนเซอร์MIDI , http://pianocheetah.comในภาษา C ++ แบบธรรมดาและให้คุณใช้คีย์บอร์ดเปียโนเพื่อเรียกใช้คำสั่ง ไม่มีเหตุผลใด ๆ ที่คุณไม่สามารถทำสิ่งเดียวกันกับการกดคีย์ลงในอินพุตสตรีมของคีย์บอร์ด

แต่มาตอนนี้ คุณจำได้ว่าใช้เวลานานแค่ไหนในการเรียนรู้คีย์บอร์ดตั้งแต่แรกใช่มั้ย คุณเต็มใจที่จะทำสิ่งนั้นอีกครั้งหรือไม่? และคุณยินดีที่จะทำให้แป้นพิมพ์ที่มีความสุขของคุณเปื้อนด้วยสัญลักษณ์พวงกุญแจที่ดูโง่ ๆ

คุณจะต้องใช้อย่างน้อย 26 ตัวอักษรตัวเลข 10 เครื่องหมายวรรคตอน 11 และปุ่มฟังก์ชั่นอย่างน้อย 12 ปุ่มและสถานะการเลื่อน นั่นคือ 60 ปุ่มบวกกับสถานะที่ขยับ นั่นจะทำให้คีย์เต็ม 5 อ็อกเทฟหมดไป คุณจะเล่นเปียโน "hops" = all = the time บอกลาการกดเพื่อพิมพ์

คุณอาจช่วยตัวเองจากRSIแต่คุณได้สร้างฝันร้ายประเภทต่าง ๆ ให้กับตัวเอง

และขอให้โชคดีที่หัวหน้าของคุณซื้อคีย์บอร์ด MIDI ในที่ทำงาน

หากคุณเรียนรู้ที่จะเล่นเปียโนอย่างแท้จริงคุณได้เรียนรู้วิธีการเล่นโดยไม่เครียด ทำเช่นนั้นบนแป้นพิมพ์QWERTY ไม่มีความตึงเครียด เริ่มช้า


ขอบคุณสำหรับคำพูดที่ใจดี แต่ฉันก็ตั้งใจทำสิ่งนี้และไม่ได้วางแผนที่จะทำให้มันเป็นโอเพ่นซอร์ส - ขอโทษ แต่สิ่งที่คุณควรทำคือใช้ midiInOpen (); ให้มันมีโทรกลับเพื่อประมวลผลอินพุต midi; ละเว้นทุกอย่างยกเว้นเหตุการณ์ที่มีการจดบันทึกแมปโน้ตสั้น ๆ ของแป้นคีย์บอร์ดและใส่ลงในอินพุตสตรีมของแป้นพิมพ์ (ฉันลืม API สำหรับสิ่งนั้น แต่ฉันค่อนข้างมั่นใจว่ามีอย่างน้อยหนึ่ง)
Stephen Hazel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.