สวัสดีน้องๆ ทุกคน
พี่ได้สร้างฮาร์ดแวร์ซีเควนเซอร์ตัวนึงขึ้นมา เพื่อทำในสิ่งที่ซีเควนเซอร์ตัวอื่นๆ ที่พี่มี (อย่าง 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.



