สร้าง MIDI Controller ด้วย Arduino (ตอนแรก)

เมื่อวันก่อนผมมีโอากาสได้พูดในงาน Bar Camp Bangkhen 4 ในหัวข้อที่ว่า สร้าง  MIDI Controller ด้วย  Arduino Leonardo ผมอธิบายตั้งแต่ว่า Arduino นั้นคืออะไร จนกระทั่งสร้าง MIDI Controller แบบง่าย ๆ ที่ส่งโน๊ตตัว C-1 ทุกครั้งที่ผมกดปุ่ม (หรือที่จริงต้องเรียกว่า เหยียบปุ่ม) ครับ

ในวันนั้นผมเตรียมตัวไปไม่ค่อยดีนัก การนำเสนอก็ค่อนข้างเละเทะ คนฟังก็มีนั่งหลับด้วย (เห็นนะเอ้อ) ก็เลยอยากถือโอกาสมาแก้ตัวในบล็อกของตัวเองสักหน่อย

ภาพของ  Arduino Leonardo จากเว็บไซต์ของ Arduino  ครับ

Arduino เป็นบอร์ด HW Prototype ที่ประกอบไปด้วย Microcontroller  ที่อินเตอร์เฟซเข้ากับ PC ได้ (ผ่านทาง USB โดยบน PC จะเห็นเป็น Serial Port ตัวหนึ่ง) และมี I/O ทั้ง Analog และ Digital ทำให้สามารถเชื่อมต่อเข้ากับอุปกรณ์ต่าง ๆ ได้หลายประเภท ที่ผมเคยเห็นก็มีตั้งแต่แค่ต่อกับไฟ LED แบบง่าย ๆ จนถึงทำเป็นหุ่นยนต์ที่วิ่งไปบนพื้นได้เองโดยไม่ชนกำแพงครับ

ผมนำความสามารถด้านการรับอินพุตแบบอนาล็อก และ I/O แบบดิจิตอลเข้ามาใช้ในการทำ MIDI Controller  ครับ ซึ่งหลักการทำงานก็ไม่มีอะไรซับซ้อนเลย ผมต่อ Analog Input เข้าอุปกรณ์ที่ใช้ควบคุม อย่างพวกสวิทช์หรือตัวต้านทานปรับค่าได้ (VR) จากนั้นอ่านค่าที่ได้จาก Input พวกนี้ แล้วสร้าง MIDI Message ขึ้นมาก่อนส่งออกไปทาง Digital I/O หรือผ่านทาง Serial/USB Port เข้า PC เท่านั้นเอง

ตัว Analog Input บน Arduino เนี่ยจะรับค่าสัญญาณไฟฟ้าโดยดูที่ความต่างศักย์ไฟฟ้า แล้วจะถูกแปลงให้เป็นค่าตัวเลขผ่านทาง Analog-to-Digital Converter แบบ 10 บิท ถ้า input มีศักย์ไฟฟ้า 5โวลต์ Arduino จะมองค่า input เป็นค่า 1023 และถ้ามีศักย์ไฟฟ้า 0โวลต์ก็จะมีค่า input เป็น 0 ครับ อะไรทำนองนี้ ดังนั้นถ้าเรามีอุปกรณ์ที่สามารถจ่ายไฟตั้งแต่ 0-5 โวลต์เข้าไปที่ขา Analog Input ของ Arduino ได้ก็จะสามารถป้อนค่าที่แตกต่างกันเข้าไปในตัว Arduino ได้แล้วครับ

สำหรับ MIDI Controller ที่สามารถสร้างขึ้นมาได้จาก Arduino นั้นก็ทำได้หลายประเภทมากครับ ที่จริงคือมันขึ้นอยู่กับว่าเรา Design ยังไง อย่างเราอาจจะพ่วง VR เข้าไประหว่างตัวจ่ายไฟ 5V กับ analog input สักตัวแล้วอ่านค่า ก็จะได้เป็นตัวปรับพารามิเตอร์มาแล้วหนึ่งตัว หรือถ้าเราต่อสวิทช์เข้าไปแทนก็อาจจะใช้เป็นตัวเล่นโน็ตเลยก็ยังได้

หรือแม้กระทั่งถ้าเราต่อ piezo เข้าไปที่ตัว input แล้วเอาแผ่น piezo ไปแปะไว้บนแป้นยาง ก็สามารถใช้เป็นกลองไฟฟ้าเลยก็ยังได้ (แต่ต้องปรับแรงศักย์ไฟฟ้าดี ๆ เพราะว่า piezo สามารถสร้างศักย์ไฟฟ้าได้ถึง 20โวลต์สบาย ๆ ครับ อันนี้ลองหาวิธีกันเองดูนะ ไม่งั้นบอร์ดพังนะเอ้อ)

ที่จริงผมได้แผ่น touchscreen panel แบบ resistive มาแผ่นนึง ไอ้ที่เขาเอาไว้ทำจอทัชสกรีนน่ะครับ แต่อันนี้ไม่มีตัวจอนะ ถ้าเอามาต่อก็สามารถทำอุปกรณ์เท่ห์ ๆ หน้าตาคล้าย ๆ Kaoss PAD ได้ด้วยล่ะครับ แต่อันนี้เดี๋ยวค่อยลองนะ

พูดง่าย ๆ ว่า controller  ทุกแบบที่มีในตลาดเนี่ย เราสามารถใช้ Arduino ทำได้หมดเลยครับ เจ๋งไหมล่ะ ?

คราวหน้าจะมาพูดถึงการพ่วง input เข้าไปหาตัว arduino และการอ่านค่าจาก input นั้นนะครับ

ประสพการณ์การแจมกับวง iHearBand

เมื่อวันอาทิตย์ที่ผ่านมา พอดีมีโอกาสได้ร่วมเล่นดนตรีกับวง iHearBand ในงาน Bar Camp Bangkhen 4 ณ.มหาวิทยาลัยเกษตรศาสตร์ (ขอขอบคุณทางมหาวิทยาลัยและน้อง ๆ ทีมงานทุกคนครับ) ถือเป็นโอกาสที่ดีเลยจะขอเล่าในมุมมองของผมสักเล็กน้อยละกัน (แต่คงยาว 55)

สำหรับงาน Bar Camp ครั้งนี้ผมตั้งใจจะเสนอหัวข้อเกี่ยวกับเครื่องดนตรี เป็นเรื่องของการประยุกต์ใช้ Arduino ในการสร้าง Midi Controller (สัญญาว่าจะพูดถึงในครั้งต่อไปครับ กำลังเรียบเรียงอยู่) ก็เลยหิ้วเครื่องดนตรีไปสองชิ้น กับอุปกรณ์อีกกระบุงเล็ก ๆ สำหรับเครื่องดนตรีก็มี Korg MicroKontrol Midi Controller ขนาด 36 คีย์พกพาสะดวกนั่นเอง (ผมเคยใช้ NanoKontrol แล้วพบว่ามันเล็กเกินไป แถมพังง่ายมาก) และอัยย์จัง กีตาร์ไฟฟ้าจาก Ibanez รุ่น S470DXQ สีแดงสุดสวย ลูกสาวสุดที่รักของผมนั่นเอง

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

แต่จุดประสงค์หลักที่พาน้องอัยย์ไปงานนี้ด้วยก็คือจะไปขอแจมกับวง +iHearBand และคุณ +Kijjasak Triyanond  พอดีมีโอกาสเคยได้ชมวงนี้เล่นในงานแต่งงานของพี่คนหนึ่งที่ทำงานก็เกิดประทับใจ พอดีเห็นเขาว่าจะเล่นด้วยเลยกะว่าจะขอแจมด้วยสักเพลงสองเพลง พอดีใน session หนึ่งที่บังเอิญผมได้เข้าไปร่วมฟังก็ไปเจอกับคุณ kijjaz แล้วพี่เขาชวนมาแจมด้วยพอดี ก็เลยเข้าทางเรา 555

หลังจากที่ session สุดท้ายจบ ผมก็เอาบรรดาสัมภาระทั้งหลายไปเก็บที่รถ แล้วพาตัวน้องอัยย์ที่นอนรออยู่ในรถออกมา แต่ด้วยความรีบ (ซึ่งไม่รู้ว่าจะรีบทำไม) ผมลืมหยิบปิ๊คกีตาร์ออกมาจากในรถ และปิ๊คอันสุดท้ายที่อยู่ในกระเป๋าสตางค์ผมเป็น JimDunlop Big Stubby ทรง Jazz III ที่ผมไม่ถนัดสุด ๆ (ซื้อมาลองแล้วไม่ชอบ) ซึ่งผมก็มารู้ตัวเอาทีหลัีงตอนที่กำลังเช็คของที่อยู่ในซอง

กลับมาถึงเขาก็เริ่มเล่นกันแล้วครับ ในวง iHearBand วันนี้มีคีย์บอร์ด (เล่นโดยพี่ kijjaz) ฟลุตและกลองคาฮอง อ้อ มีน้องอีกคนที่เล่น instrument บน iPad ด้วย ปัญหาของผมคือผมไม่มีแอมป์กีตาร์ วิธีที่พอจะทำได้ก็คือต่อเอฟเฟคที่เป็น Amp Sim ที่มีเอาท์พุตเป็น Line Level เข้า Mixer เอฟเฟคที่ผมมีติดตัวมีเพียงแค่ Korg Pandora Mini ซึ่งเสียงมันแหลมเฟี้ยวเลย (มันเป็นเอฟคเฟคที่ออกแบบมาสำหรับซ้อมด้วยหูฟัง แต่ปรับซาวนด์ยากสักหน่อย)  ผมพยายามปรับซาวนด์อยู่พักใหญ่ ๆ สุดท้ายก็ยอมแพ้ 555 จนถึงจุดนี้คือผมกะว่าไม่เอาละดีกว่า ก็เลยว่าจะเล่นสนุก ๆ อยู่ที่นั่งตัวเอง แต่สุดท้ายก็โดนเรียกออกอากาศ 55 ทางวงแก้ปัญหาให้ผมโดยการต่อกีตาร์ผมเข้า DI ก่อนเข้า Mixer ซาวนด์ที่ได้นุ่มมาก จากน้องอัยย์หน้าโหด ๆ กลายเป็นกีตาร์แจ๊สในบัดดล ต้องขอขอบคุณพี่เอนจิเนียร์วันนั้นที่ทำให้ผมรู้ว่าถ้าเอากีตาร์ไฟฟ้าเข้า DI (+การปรับแต่งอีกนิด) จะทำให้ซาวนด์ที่ได้น่าฟังไปอีกแบบนึงครับ จะพยายามลองเอามาปรับใช้กับตัวเองบ้าง

อ้อ จำเจ้าปิ๊คที่ผมบ่นว่าไม่ถนัดได้ไหมครับ ? … ก่อนเล่นผมทำมันหายไปไหนไม่รู้ ในกระเป่าก็เหลือแค่เหรียญบาทที่พอจะใช้ได้ (อาจจะฟังดูแปลกแต่ว่ามีคนใช้เหรียญเล่นกีตาร์บ้างเหมือนกัน เช่น Brian May จากวง Queen) แต่การใช้เหรียญมันก็ดูทารุณกับลูกสาวผมเกินไปหน่อย ผมก็เลยใช้นิ้วเล่นหมดเลยทุกเพลง ซึ่งก็เข้าทางกับซาวนด์นุ่ม ๆ ข้างบนพอดี

จากที่แพลนไว้ว่าจะขอแจมแค่ไม่กี่เพลง กลายเป็นเล่นไปเกือบครึ่งงานได้ คือตั้งแต่ถูกเรียกยันเก็บของกันเลย ตอนนี้ผมก็จำไม่ค่อยได้แล้วล่ะว่าเล่นเพลงอะไรกันบ้าง แต่ว่าสนุกมาก แต่ละคนเก่ง ๆ กันทั้งนั้น ผมแค่เล่นตามคนอื่นก็รากเลือดแล้วครับ (คำว่า “ราก” แปลว่า อาเจียน ครับ)

ต้องขออภัยพี่ ๆ น้อง ๆ ที่เล่นดนตรีกันวันนั้นด้วย คือผมจำชื่อพวกคุณไม่ได้เลย – – ขอโทษจริง ๆ ครับ

กลับเข้าเรื่อง ด้วยความที่ผมไม่เคยเล่นกับเขาเลย งานนี้ผมก็เลยได้แต่เล่นตาม คือผมเล่นแต่ Comp Chord ตามเพลงไป เล่นไปตาม Groove ของกลอง ก็อาศัยสิ่งที่เคยเรียนมาจากครูเปิ้ล เล่นคลอ ๆ เขาไปได้ แต่บางเพลงเราก็เล่นผิด ไปเล่นขัดกับ Groove กลองเหมือนกัน ก็ไม่รู้ว่าจะไปขัดขาเขาหรือเปล่า แต่สุดท้ายก็เล่นจนจบได้น่ะนะ

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

คือผมคิดว่า ถ้าเราไปเล่นในลักษณะนี้ก็อาจจะไม่ต้องไปซีเรียสเรื่องความเป๊ะมาก บรรยากาศมันสบาย ๆ คนฟังเขาก็มาฟังเราแบบสบาย ๆ ไม่ได้มาจับผิดว่าเล่นเหมือนไหม ดังนั้นแค่ประคอง ๆ ไม่ให้ล่มก็พอครับ

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

น้องคนที่เล่นไอแพดนี่ก็เป๊ะมาก ทั้ง ๆ ที่ไอแพดเป็นเครื่องดนตรีที่จริง ๆ เล่นยากนะ แถมโปรแกรมที่เขาใช้เนี่ยผมยังดูไม่ออกว่ามันทำงานยังไงเลย แต่ฟังเขาเล่นแล้วทึ่งมาก

พี่ kijjaz เองเขาก็มีพูดไว้บ้างว่าพี่เขาไม่ได้อัพเดตเพลงสมัยนี้ บางเพลงก็เลยไม่รู้จัก แต่เขาก็ไม่ได้แสดงออกว่าเขาเล่นไม่ได้เลย (ยกเว้นแต่ที่เขาออกตัวเลยว่าเล่นไม่ได้ แล้วให้พี่ที่เป็นมือฟลุตเล่น) ก็เล่นกันได้สบาย ๆ แล้วก็ improvise กันสด ๆ บนเวที

พี่ที่เป่าฟลุตเป็นคนที่ผมอาจจะฟังน้อยที่สุด คือ ผมเล่นแบบไม่ได้กะหาช่องว่างที่จะ Fill-In แค่พยายามเกาะ Groove ไปเรื่อย ๆ ก็แทบตายแล้ว เลยอาจจะฟังพี่เขาน้อยไปหน่อย แต่ที่ฟังพี่เขาก็เล่นได้ดีมากครับ (ฟลุตเป็นเครื่องเป่าที่ยากที่สุดเครื่องนึงเลยด้วยจริง ๆ แล้ว) เพราะมาก ๆ

ผมรู้สึกโชคดีว่าการเล่นครั้งนี้เป็นการแจมกันแบบเล่นเป็นเพลงเน้นฟังสบาย ๆ แน่นอนว่าถ้าเป็นการเล่นแบบดวลกันผมคงตายคาเวทีล่ะครับ

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

  1. ประสพการณ์ เทคนิคการเล่นเพลงตลาดโดยไม่เปิดคอร์ดชาร์ท 
  2. เครื่องดนตรี อันนี้ไม่มีก็คงต้องไปหาเอาดาบหน้าเหมือนกัน
  3. อุปกรณ์ ควรจะมีอะไรที่ทำให้ต่อเครื่องดนตรีเราเข้า mixer ได้ เช่นพวกมัลติเอฟเฟค ไม่งั้นชาวบ้านเขาก็คงไม่ได้ยินเรา
  4. การฟังสำคัญมาก เวลาเล่นต้องฟังทั้งวงเล่น อาจจะฟังคนโน้นมากหน่อย คนนี้น้อยหน่อยก็แล้วแต่ 
  5. ถ้าเราเล่นเป็นพาร์ทริทึ่มก็ต้องฟัง Groove จากทั้งมือกลอง และมือเบส ต้องเล่นให้เข้ากัน ถ้าหลุดออกมาเราจะกลายเป็นตัวประหลาด
  6. ถ้าอยากจะเล่น Fill-In ก็ต้องฟังคนอื่นที่เล่นพวก Melody เพราะ Fill-In หรือการเติมช่องว่างก็ต้องเล่นตอนมีช่้องว่าง ถ้าไปเล่นซ้อนกับคนอื่นก็อาจจะตีกันไม่น่าฟังอีก
  7. ผมพบว่านักดนตรีหลาย ๆ คนมีการให้เกียรติคนอื่นดีมาก ๆ เวลาผมไปไหนกับคนรู้จักที่เขาเล่นดนตรีจะเห็นว่าเวลาเขาทักทายกันจะมีการยกมือไหว้ตลอด ผมว่าบางคนอาจจะดูเกรียน ๆ แต่เขาก็เคารพผู้อื่นนะ

ผมเองก็ต้องทำการบ้านหนักขึ้น เพื่อที่เวลาไปแจมกับคนอื่นจะได้ไม่น้อยหน้า แล้วก็หวังว่าจะมีโอกาสได้แจมกับวง iHearBand อีกนะครับ

ปล. คาฮองแจ่มมาก มีไฟเป็น VU Meter ด้วย เจ๋งเทพ

ต้องฝึกฝนเท่าไหร่กว่าจะได้เป็น “ผู้เชี่ยวชาญ” กับเขา

เรามักจะระบุทักษะว่า เราเชี่ยวชาญด้านนั้น ด้านนี้ อยู่ในโปรไฟล์ หรืออยู่ใน CV ใน Resume หรืออะไรก็แล้วแต่กัน ใช่ไหมครับ

แต่ว่า ที่ว่าเชี่ยวชาญเนี่ย เขาฝึกกันนานแค่ไหน กว่าจะกล้าพูดได้ว่าตัวเองเชี่ยวชาญ ?

ในหนังสือที่ชื่อว่า  The Outliers: The Story of Success ได้มีพูดถึงกฎที่ชื่อว่า กฎ 10,000 ชั่วโมง กล่าวคือ คนที่มีทักษะความชำนาญในด้านใด ๆ จะต้องผ่านการฝึกฝนมาแล้วมากกว่า 10,000 ชั่วโมงขึ้นไป ซึ่งระยะเวลาการฝึกฝนนี้ถ้าเราคิดเป็นว่าฝึกวันละชั่วโมง จะต้องใช้เวลามากกว่า 27 ปีกว่าจะทำชั่วโมงบินได้สูงขนาดนี้เชียวล่ะครับ

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

โดยส่วนตัวผมคิดว่าการฝึกฝนทักษะในด้านใดด้านหนึ่ง ควรจะฝึกอย่างน้อยวันละ 4 ชั่วโมงขึ้นไปครับ จะใช้เวลาประมาณ 7 ปีกว่าจะไปถึงจุดที่เรียกว่าเชี่ยวชาญ (ตามกฎด้านบน)

แต่ที่สำคัญกว่าระยะเวลาในการฝึก ก็คือ วิธีการฝึก และ ความถี่ในการฝึกครับ สำหรับความถี่นั้นดีที่สุดคือฝึกทุกวัน แต่ละวันอาจจะไม่ยาวนัก (4 ชม.เป็นต้น) หรืออาจจะเป็นฝึกหลาย ๆ ครั้งต่อวันก็ได้ ที่ไม่ควรทำคือฝึกยาว ๆ วันเดียวแล้วเว้นเอาไว้ทั้งอาทิตย์ อันนี้ไม่เกิดประโยชน์อะไรครับ

ส่วนเรื่องวิธีฝึก ถ้าเกิดว่าเราเอาแต่วิ่งวนฝึกแต่ในระดับผู้เริ่มต้น คุณจะกลายเป็น “มือใหม่ผู้เชี่ยวชาญ” ไป คือกลายเป็นคนที่แม่นแต่เรื่องผิวเผิน แต่ไม่ได้มีความรู้ในระดับลึกซึ้ง ทำให้พัฒนาตัวเองไปต่อได้ยาก แถมจะกลายเป็นคนที่ยึดติดกับสิ่งที่มือใหม่เขาเป็นกันอีก อันนี้ต้องระวังนะครับ

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