กลับไปหน้ารวมไฟล์
midi-to-trigger-for-drums-and-decay-envelopes-1644a1.md

ชื่อโปรเจกต์: MIDI to Trigger สำหรับกลอง และวงจร Decay Envelopes (หล่อเท่เลยงานนี้)

ตัว Demultiplexer ตัวนี้พี่ทำมาเพื่อให้ใช้งานกับพวก Drum Module ได้หลายๆ ตัวพร้อมกันนะน้อง โดยจังหวะ Pulse จะยาวประมาณ 2 ms จัดไปวัยรุ่น

ตัว Demultiplexer ของพี่ใช้ระบบ 2D-matrix (แยก Octaves และ Notes) ของแต่ละคีย์ โดยใช้พวก Logic IC มาช่วยจัดการ แถมแต่ละ Note พี่ก็ใส่ตัวขยาย Pulse ไว้ด้วย เพราะเจ้า [Arduino](https://s.shopee.co.th/7fUgFAWSki) มันมีเวลาส่ง Pulse แค่แป๊บเดียวเอง (พี่เซตไว้ 100 us) ในขณะที่ข้อมูล MIDI กำลังถูกส่งมา (ซึ่งกินเวลา 280 us ต่อ Byte ที่ความเร็ว 31.25 kbps) ส่วนรายละเอียดไปส่องเอาใน Schematic นะน้อง พี่เน้นใช้แค่ Note-ON เท่านั้น ใน Code พี่จะลงพวก Flat wire numbers กับค่า Binary ของแต่ละคีย์ไว้ให้ พี่เรียกมันว่า 'keybyte' โดยใช้ Nibble ล่างสำหรับ 12 Notes (แต่ไม่เอา X000 กับ X111 นะ) และ Nibble บนไว้เลือก Octave แล้วก็ใช้ Bit 7 เป็นตัว Flag

นอกจากนี้พี่เพิ่ม Clock Interface สำหรับพวกอุปกรณ์ที่ต้องใช้จังหวะอย่าง Beat Boxes และมี Output อีก 6 ช่องสำหรับ Decay Envelopes ด้วย สู้งานนะน้อง!

รายละเอียดทางเทคนิคแบบจัดเต็ม

การประมวลผลสัญญาณ MIDI

พี่เลือกใช้ Arduino Nano เป็นตัวรับข้อมูลความเร็วสูงสำหรับ MIDI Interface นะน้อง โดยปกติ MIDI จะวิ่งที่ความเร็ว 31,250 baud ซึ่ง Message หนึ่งจะมี 3 Bytes (Status, Data1, Data2) ตัว Firmware ของพี่จะคอยดักฟังแค่ Note-ON ส่วนพวก Note-OFF หรือ CC พี่สั่งให้ Ignore ทิ้งไปเลย ระบบจะได้ลื่นๆ ไม่หน่วง

  • Timing Constraints: ข้อมูล MIDI 1 Byte จะใช้เวลาส่ง 320µs เพื่อไม่ให้ข้อมูลมันตีกัน พี่เลยต้องคุมให้ Trigger Pulse ขาออกสั้นมากๆ แค่ 100µs เท่านั้น แล้วค่อยไปใช้พวกวงจรภายนอกอย่าง monostable multivibrators หรือวงจรขยาย Pulse ช่วยยืดให้เป็น 2ms เพื่อให้ Module กลองเอาไปใช้งานได้นั่นเอง ห้ามช็อตนะตัวนี้!

การถอดรหัสแบบ 2D-Matrix Demultiplexing

ถ้าอยากจะคุมให้ได้ถึง 96 Notes (8 Octaves) โดยใช้ Arduino แค่ตัวเดียว น้องต้องใช้ระบบ 2D-Matrix logic แบบพี่นี่:

  1. Octave Selection: ส่งค่า Binary ไปที่ Logic IC เพื่อเลือกชั้นของ Octave จากทั้งหมด 8 ชั้น
  2. Note Selection: ใช้ Logic gates ถอดรหัสเลือก Note ภายใน Octave ที่เราเลือกไว้
  3. Decay Envelopes: พี่จัดช่อง Output พิเศษมาให้ 6 ช่อง สำหรับ Trigger วงจร Analog envelope generator โดยเฉพาะ จะได้เสียง "Decay" แบบคลาสสิกเหมือนพวก Drum Synthesizers เจ๋งๆ ไงล่ะ

การ Sync จังหวะ (Synchronization)

งานนี้พี่ใส่ MIDI Clock interface มาให้ด้วย โดยมันจะคอยดัก Byte 0xF8 (Timing Clock) เพื่อสร้างสัญญาณ Trigger ที่นิ่งสุดๆ ส่งให้พวก Sequencer หรือ Beat boxes ภายนอก มั่นใจได้เลยว่าพวก Analog Modular ใน Rack ของน้องจะวิ่งตรงจังหวะกับ Digital Host แน่นอน หล่อเท่เลยงานนี้!

ข้อมูล Frontmatter ดั้งเดิม

title: "MIDI to Trigger for Drums and decay envelopes"
description: "A Demultiplexer for 8 octaves at one MIDI port. additional a clock and decay trigger converter."
author: "trouby"
category: "Audio & Sound"
tags:
  - "Audio"
  - "Music"
views: 145
likes: 0
price: 2450
difficulty: "Intermediate"
components:
  - "1x Arduino Nano"
  - "1x Solder Iron"
tools: []
apps:
  - "1x Arduino IDE 2.0 (beta)"
downloadableFiles:
  - "https://projects.arduinocontent.cc/dca01f8c-3bd9-41c3-a65d-35cf31f322f8.ino"
  - "https://projects.arduinocontent.cc/ab9fbc37-6f7a-4163-8b92-15488095d2db.ino"
documentationLinks: []
passwordHash: "30697eea9967ec5cbe34efedda25c35f4c595301eddb33ae04d326875e1c548e"
encryptedPayload: "U2FsdGVkX19r8kpj9QMtzsQ40tznw8Jo9BWPycQZNMm7fIoOxLLPNmRzQU7ArepQz+/oREvn2Ow5hGQ8qrD0VgCucZoC74cO3sqnCaXUgc8="
seoDescription: "MIDI to Trigger for Drums and decay envelopes. Features a Demultiplexer for 8 octaves, clock, and decay trigger converter for Arduino projects."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/midi-to-trigger-for-drums-and-decay-envelopes-1644a1_cover.jpg"
lang: "th"