กลับไปหน้ารวมไฟล์
midi-looper-and-sequencer-with-capacitive-touch-and-encoders-7094c2.md

สวัสดีน้องๆ ทุกคน

พี่ได้สร้างฮาร์ดแวร์ซีเควนเซอร์ตัวนึงขึ้นมา เพื่อทำในสิ่งที่ซีเควนเซอร์ตัวอื่นๆ ที่พี่มี (อย่าง Elektron, Polyend ฯลฯ) ทำไม่ได้ มันคือรายละเอียดเล็กๆ น้อยๆ เวลาที่เราเล่นแบบไม่ใช้ DAW (Dawless) นี่แหละที่มันสร้างความแตกต่างได้ — อย่างน้อยก็สำหรับพี่นะ

ฟีเจอร์ที่พี่ชอบสุดๆ ในตัวนี้มีดังนี้:

  • โหมดคอมโพสเซอร์: เจ๋งมากสำหรับเล่นสด ควบคุมซินธ์หลายตัวพร้อมกันด้วยนิ้วบนคีย์บอร์ด (ไม่ใช่แค่แบ่งคีย์บอร์ด) ตัวอย่างเช่น นิ้วก้อยมือซ้ายควบคุมการเปลี่ยนคีย์ของเบสไลน์ นิ้ว 3 นิ้วที่เหลือบนมือซ้ายเล่นคอร์ดสตริง/แพด นิ้วกลางมือซ้ายเล่นลีด 1 มือขวาเล่นลีด 2 และโน้ตอื่นๆ ก็เล่นอะไรอีกอย่างนึง
  • โหมดคอร์ดฟอลโลเวอร์: ใส่เมโลดี้ที่ซับซ้อนเข้าไป แล้วให้มันเปลี่ยน (ทรานสโพส) โน้ตตามตำแหน่งนิ้วของคุณ (ไม่ใช่แค่เลื่อนขึ้นลงทั้งหมด) พร้อมความสามารถในการกดแค่หนึ่งหรือสองนิ้วเพื่อเปลี่ยนเฉพาะโน้ตเหล่านั้น
  • การบันทึกโดยใช้เพดัลที่เริ่มทำงานก็ต่อเมื่อกดโน้ต: อันนี้เจ๋งมากจริงๆ กดค้างไว้ที่เพดัล และ (เฉพาะ) ตอนที่คุณเล่นโน้ตเท่านั้นมันถึงจะเริ่มบันทึก และมันจะหยุดบันทึกเมื่อคุณปล่อยเพดัล — มันจะหาจุดลูปที่ถูกต้องให้อัตโนมัติ และเริ่มลูปทันทีตรงจังหวะพอดี ไม่ใช่ลูปกลางคัน พี่ไม่เข้าใจจริงๆ ว่าทำไมฟีเจอร์นี้ถึงไม่เป็นเรื่องปกติ...
  • LPF และ HPF บนโน้ต: อีกแล้ว ไม่รู้เหมือนกันว่าทำไมถึงไม่ค่อยมี มันสะดวกมากเวลาเล่นสด เพื่อตัดบางส่วนของซีเควนซ์ออก หรือนำเข้ามาและเอาออก นอกจากนี้ยังเป็นวิธีที่ดีในการหาแก่นกลางของเมโลดี้และลบโน้ตที่ไม่ได้ทำอะไรออก
  • พิตช์อินเวอร์ชัน: เป็นเหมือนเคล็ดลับนิดหน่อย คุณตั้ง "ระนาบการสะท้อน" (โน้ต) ไว้ แล้วหมุน knob เพื่อสะท้อน (หรือพูดให้ถูกคือเลื่อน) โน้ตต่างๆ เทียบกับระนาบนั้น เป็นวิธีหาโน้ตใหม่ๆ โดยไม่ต้องไปยุ่งกับจังหวะของเมโลดี้

เอาล่ะ — โค้ดทั้งหมดอยู่บน Github ตามลิงก์ข้างล่าง

พี่ออกแบบมาให้ใช้กับ Arduino โดยเฉพาะเพื่อให้ง่าย (พี่ไม่ใช่โปรแกรมเมอร์นะ — น้องจะเห็นได้ชัดเลยถ้าไปดูโค้ด..) และใช้ KiCad กับ EasyEDA เพื่อให้ง่ายต่อการคัดลอกไปทำต่อ

ถ้าน้องรู้วิธีบัดกรี SMD น้องก็ทำเองที่บ้านได้เลย สั่งชิ้นส่วนและแผ่นวงจรจากโรงงานทำ PCB ที่น้องชอบ (เช่น Pcbway ฯลฯ) และจาก Mouser/Digikey ฯลฯ ได้

หวังว่าถ้ามีคนชอบไอเดียนี้ พวกเรา/น้องๆ จะสามารถพัฒนาต่อยอดโค้ดให้ดีขึ้น แก้บั๊ก และเพิ่มฟีเจอร์ได้มากกว่าที่พี่มีเวลาทำ (พี่ไม่มีเวลาจริงๆ นะที่จะมาทำเรื่องนี้เยอะ เพราะพี่มีเรื่องอื่นที่ต้องทำเยอะแยะ)

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

หวังว่าโปรเจกต์นี้อาจจะกลายเป็นผลิตภัณฑ์จริงๆ ได้ ถ้าน้องๆ มีแรงจูงใจพอ และควบคุมค่า BOM กับค่าแรงให้ต่ำลงได้ (พี่อาจจะลงทุนด้วยนะ!)

ลงลึกกันแบบช่างๆ

"Matrix-Loop" คือการสำรวจขั้นสูงในเรื่อง ทฤษฎีดนตรีฝังตัว (Embedded Music Theory) และ การออกแบบอินเทอร์เฟซมนุษย์-เครื่องจักรความหนาแน่นสูง (High-Density HMI Design) ต่างจากซีเควนเซอร์แบบแพตเทิร์นทั่วไป มันเสนออินเทอร์เฟซที่ใช้งานง่าย แบบไม่ต้องพึ่ง DAW โดยขับเคลื่อนด้วย ItsyBitsy M0 Express

  • เมทริกซ์แบบ capacitive และการสื่อสาร I2C:

    • การเชื่อมต่อ Azoteq QS550: ระบบนี้ใช้คอนโทรลเลอร์มัลติทัช QS550 สองตัว แทนที่จะใช้สวิตช์แบบดั้งเดิม ชั้นวงจรภายในจะสร้างเป็นกริดแบบ capacitive ตามที่เห็นในรูปโปรเจกต์ ตัวประมวลผลหลัก M0 จะดึงข้อมูลจากคอนโทรลเลอร์เหล่านี้ผ่าน I2C เพื่อรับพิกัดการสัมผัสและความแรง ซึ่งจะถูกแมปไปเป็นหมายเลขโน้ต MIDI และความเร็ว (Velocity)
    • การขยายพอร์ต I/O: เพื่อขับ LED จำนวน 99 ดวงในเมทริกซ์แสดงผลและสแกนเอ็นโค้ดเดอร์ 15 ตัว สถาปัตยกรรมนี้ใช้ตัวขยายพอร์ต PCAL6524 24-พิน จำนวนสองตัว วิธีนี้ทำให้พอร์ต GPIO ที่มีจำกัดของ M0 สามารถขยายไปควบคุมพื้นผิวเมคาทรอนิกส์ขนาดใหญ่ได้ โดยไม่ต้องเสียแบนด์วิธของ CPU
  • โปรโตคอล MIDI และลอจิกการประสานเสียงแบบ Canon:

    • ระนาบพิตช์อินเวอร์ชัน: หนึ่งในจุดเด่นของโปรเจกต์นี้คือโหมด "Canon" โดยการกำหนด "โน้ตสะท้อน (Reflection Note)" หรือระนาบไว้ในเฟิร์มแวร์ ผู้ใช้สามารถหมุนเอ็นโค้ดเดอร์เพื่อสะท้อนระดับเสียงของเมโลดี้ที่กำลังเล่นอยู่ทางคณิตศาสตร์ ตัวอย่างเช่น สเกลเมเจอร์ที่ไล่ขึ้นจะถูกแปลงเป็นสเกลไมเนอร์ที่ไล่ลงแบบเรียลไทม์ โดยยังคงโครงสร้างจังหวะไว้แต่เปลี่ยนโพรไฟล์ของเสียงประสาน
  • การกรองโน้ต (LPF/HPF สำหรับ MIDI): ระบบนี้ไม่ได้ใช้ตัวกรองเสียงแบบอนาล็อก แต่ใช้ การกรองตามลำดับเชิงตรรกะ (Logical Sequence Filtering) แทน มันจะปิดเสียง MIDI index เฉพาะบางตัวตามช่วงความถี่หรือค่าความเร็ว (velocity) ที่ตั้งไว้ ช่วยให้ผู้เล่นสามารถ "แกะสลัก" พื้นที่ในมิกซ์ที่แน่นได้อย่างง่ายดายด้วยการหมุนเอ็นโค้ดเดอร์แบบสัมผัส

  • สถาปัตยกรรม M0 และการคงสถานะลูป:

    • การจัดการ NVIC ความเร็วสูง: ตัวประมวลผล ATSAMD21 ใช้ Nested Vectored Interrupt Controllers (NVIC) ในการประมวลผลการหมุนเอ็นโค้ดเดอร์และการกดเพดัลฟุต ฟีเจอร์ "Auto-Loop" ใช้การขัดจังหวะเหล่านี้ในการคำนวณความยาวลูปแบบเรียลไทม์ ล็อกการเปลี่ยนจังหวะให้ตรงกับบีตที่ใกล้ที่สุดด้วยความแม่นยำระดับมิลลิวินาที
    • การคงสถานะในหน่วยความจำถาวร: ลำดับ (Sequences) ถูกเก็บไว้ใน I2C EEPROM ขนาด 512k ทำให้แพตเทิร์นโพลีโฟนิกที่มีได้ถึง 256 อีเวนต์ยังคงอยู่แม้ปิดเครื่อง โดยไม่ต้องพึ่งการ์ด SD ภายนอก

วิศวกรรมและการนำไปใช้

  • การประกอบ SMD และความสมบูรณ์ของสัญญาณ:
    • โปรไฟล์ความร้อน: PCB ความหนาแน่นสูง (ที่บรรจุ LED 99 ตัวและไดรเวอร์ CAT4016) ต้องการการรีโฟลว์ SMD ที่แม่นยำ ตัวต้านทานบายพาส (Bypassing resistors) ถูกวางตำแหน่งอย่างมีกลยุทธ์เพื่อป้องกันปรากฏการณ์ "Ghosting" ในเมทริกซ์ LED ขณะสแกนความเร็วสูง
    • การปรับสภาพ VBUS: ตัวควบคุมแรงดันเชิงเส้น AP7215-33 (LDO) ทำหน้าที่ปรับแรงดันจากแหล่งจ่าย USB-C 5V ให้เป็น 3.3V ที่สะอาด ช่วยแยกโหนดลอจิกจากสัญญาณรบกวนแบบ capacitive ที่เกิดจากแหล่งจ่ายไฟแล็ปท็อปภายนอก
  • ลูปควบคุม Human-Machine Interface (HMI):
    • โหมด Conductor: ใช้ประโยชน์จากคีย์บอร์ดแบบ capacitive ในการเปลี่ยนคีย์ (transpose) ลำดับทั้งหมดข้ามหลาย MIDI channel พร้อมกัน โดยใช้ตำแหน่งนิ้วเป็นค่าออฟเซ็ตสำหรับการเปลี่ยนคีย์แบบไดนามิก
    • เพดัลสำหรับอัด: อินพุตสำหรับเพดัลอนาล็อกเฉพาะทางใช้อัลกอริทึม "Triggered Capture" ซึ่งการอัดจะเริ่มต้นก็ต่อเมื่อตรวจพบโน้ต MIDI ตัวแรกเท่านั้น ทำให้กระบวนการตัดลูป (loop-truncation) เป็นไปโดยอัตโนมัติ

รายละเอียดโปรเจกต์

ทำงานในโหมด: Loop Mode, Song Mode, Conductor Mode สามารถเชื่อมต่อแบบอินไลน์กับซินธิไซเซอร์ที่มีอยู่ได้ เข้ากันได้กับแร็คขนาด 3U

หมายเหตุ: แถวของ LED ที่ติดเพียงบางส่วนแสดงถึงคีย์ดำบนเปียโนโรล และยังแสดงจุดเริ่มต้นและสิ้นสุดของลูปอีกด้วย การสัมผัสทำงานได้ด้วยเมทริกซ์ capacitive ที่สร้างขึ้นในชั้น PCB ด้านใน และใช้ Touch IC ในการอ่านค่า

ฟังก์ชันพื้นฐาน (แถวซ้าย):

  • Start/Stop: เล่นโดยใช้นาฬิกาภายในหรือนาฬิกา MIDI ภายนอก
  • เปลี่ยน BPM โดยใช้เอ็นโค้ดเดอร์
  • กำหนดจุดเริ่มต้นและสิ้นสุดลูปผ่านเอ็นโค้ดเดอร์
  • Record:
    • Overtop: ใช้ปุ่มบนเอ็นโค้ดเดอร์
    • On-Play: กดค้างเพดัลฟุต การอัดจะเริ่มเมื่อมีโน้ตตัวแรกถูกเล่น การอัดจะหยุดเมื่อปล่อยเพดัล ระบบจะตัดลูปให้ตรงกับบีตที่ใกล้ที่สุดโดยอัตโนมัติ ทำให้ลูปสวยงาม
  • ล้างโน้ต (ผ่านปุ่มเอ็นโค้ดเดอร์)
  • เลือกโหมด: Loop Mode, Song Mode, Conductor Mode และ Chord Follower

ฟังก์ชัน Canon และ Note (แถวขวา):

  • Transpose (เปลี่ยนคีย์ตามสเกล, บน/นอกจังหวะ, ผ่านเอ็นโค้ดเดอร์หรือคีย์อินพุต)
  • Phase (ขยับเป็นทวีคูณของลูป, ขยับตามจำนวนสเต็ป)
  • Frequency (บีบอัดลำดับโน้ตในมิติเวลา เป็นเศษส่วนของความยาวลูปปัจจุบัน)
  • Mirror Notes Pitch (สะท้อนโน้ตในแกนความสูงเสียง ตามระนาบที่ผู้ใช้กำหนด)
  • Mirror Notes Loop (สะท้อนโน้ตในแกนเวลา ตามระนาบที่ผู้ใช้กำหนด)
  • Note Cutoff Filter (ปิดเสียงโน้ตเหมือนตัวกรอง LPF หรือ HPF)
  • Note Velocity (ใช้นิ้ววาดหรือเอ็นโค้ดเดอร์เพื่อกำหนดความเร็วของโน้ต)
  • Note Duration (ใช้เอ็นโค้ดเดอร์เพิ่มหรือลดความยาวของโน้ตทั้งหมด)

ฟีเจอร์เพิ่มเติม:

  • จุอีเวนต์ได้ 256 ครั้ง (ไม่ถูกจำกัดด้วยจำนวนบาร์หรือสเต็ป)
  • โพลีโฟนิก
  • มีสเกลพื้นฐานที่ใช้งานง่ายเมื่อเปลี่ยนคีย์ แค่เลือกโน้ตที่อยากให้เปลี่ยนไปได้เลย โดยไม่ต้องจำชื่อโบราณอย่าง Lydian, Mixolydian, Aeolian...

สรุปสั้นๆ แต่อัดแน่น

Matrix-Loop นี่แหละที่พี่บอกว่า มันคือการอัพเกรดจาก การเล่นโน้ตธรรมดาๆ ไปสู่ การแสดงดนตรีด้วยอัลกอริทึม เลยทีเดียว โดยการลงลึกกับ การสืบสวน I2C Expansion และ การวิเคราะห์ Capacitive Gesture โปรเจกต์นี้สร้างซีเควนเซอร์ระดับโปรขึ้นมา ที่ท้าทายฮาร์ดแวร์ระดับท็อปของตลาดได้ ด้วยการออกแบบสถาปัตยกรรมที่ล้ำลึก และอินเทอร์เฟซระหว่างคนกับเครื่องที่คิดใหม่

อยากรู้รายละเอียดแบบจัดเต็ม ไปดูใน GitHub ได้เลยน้าา พี่ทำเวอร์ชันอื่นๆ ไว้ด้วย เช่น มิดี้ลูปเปอร์แบบเบสิกในตัว

สู้งานนะน้อง!


Harmonic Logic: Mastering MIDI sequencing through capacitive forensics.

Matrix-Loop Sequencer Front View

Matrix-Loop Sequencer PCB View

Matrix-Loop Sequencer Side View

Matrix-Loop Sequencer Rack View

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

apps:
  - "1x Arduino IDE"
author: "caratacuspotts"
category: "Audio & Sound"
components:
  - "1x Rework Station Kit, SMD"
  - "1x USB C USB4105-GF-A"
  - "1x 3D Printer (generic)"
  - "1x Adafruit ItsyBitsy M0 Express"
  - "2x Azoteq multitouch QS550 I2C"
  - "15x Encoder PEC11S"
  - "99x APTR3216SECK"
  - "28x N-PI55TATPRPGPB"
  - "1x 24 pin I/O Expander: 2x PCAL6524HEAZ"
  - "1x EEPROM 512k I2C   M24512-DFDW6TP"
  - "1x Precision Tweezer, Hand-Piece"
  - "2x Led Latch: CAT4016HV6G"
  - "1x LDO AP7215-33YG-13"
description: "Intuitive interface for live jaming, with interesting features like composer mode and low-pass and high-pass note filters, Canon functions and lots of other goodies on top of loop and song modes.  Connects via USB-C and 3.5mm MIDI jack"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://github.com/CaratacusPotts/Matrix-Sequencer/tree/main/MatrixV2"
encryptedPayload: "U2FsdGVkX19mREIdTXDBntlxfOEUY6ajaTe1PG0u8AtkBaav3NK/3ysKy6fNxnzq3jJvt2Qf3CT/QOi+XUhi12spI+R6nNQgiLlAjulFIWo="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/midi-looper-and-sequencer-with-capacitive-touch-and-encoders-7094c2_cover.jpg"
lang: "en"
likes: 1
passwordHash: "d68766366272de1c239daf34f62ee38cec22b4dce1666fd90c88501910e7b767"
price: 2450
seoDescription: "Build a MIDI Looper and Sequencer with capacitive touch and encoders. Features composer mode, filters, and USB-C/3.5mm MIDI jack for live jamming."
tags:
  - "Music"
  - "Audio"
  - "Embedded"
title: "MIDI Looper & Sequencer แบบจัดเต็ม! ควบคุมด้วยสัมผัสและเอ็นโค้ดเดอร์ งานง่ายแต่หล่อ"
tools: []
videoLinks:
  - "https://www.youtube.com/watch?v=TjFpd8f3n0o"
views: 1348