ความจำเป็นที่จะต้องเติบโตออกห่างจากรากเหล่านี้
(vitling.xyz)- เป็น โน้ตเพลงสำหรับศิลปะจัดวาง ที่โค้ดกำกับการเลือกคอร์ด การสังเคราะห์เสียง และการตอบสนองของ LED ไปพร้อมกัน โดยประติมากรรมที่ดูคล้ายลำต้นของพืชจะสร้างเสียงและแสงซ้ำ ๆ
- พาร์ต A สร้างคอร์ด Major, Minor, Major 7th, Minor 7th ตั้งแต่ A2 ถึง D5 พร้อม inversion และทุก ๆ 8 วินาทีจะย้ายไปยังคอร์ดอื่นที่ต่างกันเพียงโน้ตเดียว
- พาร์ต B เลือกโน้ตหนึ่งตัวจากคอร์ดปัจจุบัน แล้วเล่นด้วย รูปคลื่นและความยาวแบบสุ่ม เพื่อวางโน้ตเดี่ยวที่คาดเดาได้ยากทับบนการเดินคอร์ดที่เป็นระเบียบ
- ทุกครั้งที่เกิดคอร์ดหรือโน้ตใหม่ LED รูปทรงลำต้นจะตอบสนอง โดยสีของแต่ละโน้ตถูกแมปให้โน้ตที่อยู่ใกล้กันใน circle of fifths ดูมีสีคล้ายกัน
- การติดตั้งแบ่งเป็นโปรแกรมเสียง C++ บน Raspberry Pi 3 B+ และการควบคุม LED ด้วย FastLED บน Arduino Uno โดยอุปกรณ์ทั้งสองส่งข้อมูลโน้ตกันผ่าน พอร์ตอนุกรม
โน้ตเพลงที่ประกอบขึ้นจากกฎการสร้าง
- พาร์ต A แจกแจงคอร์ด Major, Minor, Major 7th, Minor 7th ที่เป็นไปได้ตั้งแต่ A2 ถึง D5 พร้อม inversion ทั้งหมด
- คอร์ดที่เลือกจะถูก เล่นเป็นเวลา 8 วินาที จากนั้นย้ายไปยังหนึ่งในคอร์ดที่ต่างจากคอร์ดปัจจุบันเพียงโน้ตเดียว
- กระบวนการนี้ดำเนินต่อไปโดยทำซ้ำการเล่น 8 วินาทีและการเลือกคอร์ดข้างเคียง
กฎการสร้างเสียง
- พาร์ต B เลือกโน้ตหนึ่งตัวจากคอร์ดที่กำลังเล่นอยู่ในขณะนั้น
- โน้ตที่เลือกจะถูกเล่นด้วย รูปคลื่นแบบสุ่ม เป็นระยะเวลาสุ่ม
- หากความยาวสั้น จะเล่นซ้ำเป็นจำนวนครั้งแบบสุ่ม จากนั้นรอเป็นเวลาสุ่มก่อนทำกระบวนการเดิมซ้ำ
กฎการตอบสนองของแสง
- พาร์ต C ทำให้ลำต้นแต่ละอันสว่างจากรากไปถึงปลายทุกครั้งที่มีการทริกเกอร์คอร์ดใหม่ในพาร์ต A
- สีของแสงสอดคล้องกับโน้ตแต่ละตัวในคอร์ด และโน้ตที่อยู่ติดกันใน circle of fifths จะมีเฉดสีคล้ายกัน
- พาร์ต D ส่องปลายของลำต้นหนึ่งอันด้วยสีสว่างที่สอดคล้องกับโน้ตนั้น ทุกครั้งที่มีการเล่นโน้ตในพาร์ต B
การติดตั้งฮาร์ดแวร์และซอฟต์แวร์
- พาร์ต A และ B รับผิดชอบโดย โปรแกรม C++ แบบกำหนดเอง ที่รันบน Raspberry Pi 3 B+
- จัดการทั้งการเลือกโน้ตและการสังเคราะห์บัฟเฟอร์เสียง
- พาร์ต C และ D ถูกติดตั้งด้วย โปรแกรมแบบกำหนดเอง บนบอร์ด Arduino Uno
- ใช้ FastLED เพื่อเชื่อมต่อกับแถบ LED โปรโตคอล WS2812B
- ข้อมูลโน้ตที่ส่งจาก Raspberry Pi ไปยัง Arduino ไปมาผ่านสัญญาณ พอร์ตอนุกรม
โครงสร้างทางกายภาพและวิธีการทำงาน
- แถบ LED ลอดผ่านภายในท่อใสที่ใช้กับตู้ปลาในครัวเรือน
- ท่อถูกเสริมด้วย ลวดนิกเกิล หนา ทำให้ขึ้นรูปเป็นรูปทรงได้
- กล่องไม้ใต้กระถางมีไมโครคอมพิวเตอร์ สายไฟ และ ช่องเสียบเสียง 3.5 มม. สำหรับเชื่อมต่อระบบเสียง
- ไฟเลี้ยงเข้ามาผ่านการเชื่อมต่อไฟหลักสองจุด
- คอมพิวเตอร์ทำงานแบบ headless และ เริ่มทำงานอัตโนมัติ เมื่อมีไฟเข้า
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
คนนี้ยังเป็นผู้สร้าง endless acid banger เจ๋ง ๆ ที่เอาไว้เล่นสนุกในเบราว์เซอร์ได้เป็นชั่วโมง ๆ ด้วย
https://www.vitling.xyz/toys/acid-banger/
หลังจากลองเล่นอันนี้ ผมถึงขั้นซื้อ 303 clone จริง ๆ มา แล้วเริ่มลองปรับโน่นปรับนี่ดู นอกจากนี้ยังชอบที่เดโมทั้งหมดเปิดมาด้วยหน้าจอ “click to start” แบบไม่มีเสียง และวิดีโอที่เล่นอัตโนมัติก็ถูกปิดเสียงไว้เป็นค่าเริ่มต้นเหมือนในบทความนี้
ในบทความนี้ต้องเอาเมาส์ไปวางบน “silent gif” ถึงจะเห็นตัวควบคุมเสียง และใน acid banger ผมเขียนคอมเมนต์ไปแล้วครึ่งหนึ่ง ก่อนจะรู้ว่าคลิกตรงไหนก็ได้จะปลดการปิดเสียง
น่าสนใจที่ได้เห็น สกอร์ของดนตรีเชิงกำเนิด ถูกเขียนไว้ในรูปแบบข้อกำหนดแบบนั้น
มันละเอียดพอที่ถ้านำคำสั่งนั้นไปทำเวอร์ชันของตัวเองขึ้นมาใหม่ ก็จะได้ “ผลงานดนตรี” ที่โดยแก่นแล้วเหมือนเดิม แต่การตีความย่อมต่างกันแน่นอน เพราะสกอร์กำหนดบางส่วนไว้อย่างชัดเจน แต่เปิดทางให้เลือกในส่วนอื่น ๆ อยู่ เช่น เวลาระบุคอร์ดว่า “ทุก inversion” หมายถึงอะไรกันแน่ รวมถึง voicing แบบเปิดด้วยไหม ความยาวของ waveform แบบสุ่มควรเลือกจากค่าใดบ้าง คำว่า “สั้น” ตอนตัดสินใจเรื่องการซ้ำคือประมาณไหน จะใช้ waveform synthesizer แบบใดและมอดูเลตอย่างไร เป็นต้น
การตัดสินใจแบบนี้คล้ายกับสิ่งที่นักดนตรีเครื่องดนตรีดั้งเดิมทำเมื่ออ่านและตีความสกอร์เพื่อบรรเลง ในที่นี้ coder ดนตรีเชิงกำเนิดสามารถทำตาม “สกอร์” นี้ แล้วสร้างโปรแกรมที่มีการตีความของตัวเองได้
การลองทำด้วย Sonic Pi(https://sonic-pi.net/) เป็นแบบฝึกหัดที่สนุก และรู้สึกว่าสามารถสร้างสิ่งที่ใกล้กับทิศทางที่ผู้ประพันธ์ตั้งใจไว้ได้ มันมีบรรยากาศเดียวกับเสียงบันทึกในวิดีโอ แต่ถ้าพูดแบบนี้พอจะสมเหตุสมผล ก็คือเป็น “การบรรเลง” ผลงานนั้นในแบบของผม แม้ตอนรันจริง ๆ คนที่บรรเลงจะเป็น Sonic Pi ก็ตาม
กระบวนการนี้ยังทำให้คิดใหม่เรื่อง ความสัมพันธ์ระหว่างข้อกำหนดกับการนำไปใช้งานจริง ด้วย การ implement อัลกอริทึมโดยโปรแกรมเมอร์แต่ละคนอาจมองได้ว่าเป็น “การบรรเลง” ต่าง ๆ ของสกอร์ที่เรียกว่าการออกแบบโดยรวม และนักพัฒนาที่สร้างองค์ประกอบของสถาปัตยกรรมระบบขนาดใหญ่ก็อาจดูเหมือนนักดนตรีที่รับผิดชอบพาร์ตของตัวเองในวงดนตรีหรือออร์เคสตรา บางทีมอาจมีวาทยกรควบตำแหน่งสถาปนิกนำทีม บางทีมอาจโต้ riff กันไปมา อิมโพรไวส์ร่วมกัน แล้วบางครั้งก็มีโซโล อีกบางทีมก็เหมือนนักดนตรี session ที่เล่นตามข้อกำหนดของโปรดิวเซอร์อย่างไม่หวือหวาแต่หนักแน่น
เป็นแบบฝึกหัดเขียนโค้ดเชิงสมาธิที่เหมาะกับบ่ายวันอาทิตย์ และช่วยเปลี่ยนมุมมองได้
ตอนเคยพยายามนำงานเก่าไปจัดแสดง ผมได้รับฟีดแบ็กจากภัณฑารักษ์ศิลปะคนหนึ่ง ซึ่งงานชิ้นนั้นก็คือ https://www.vitling.xyz/welcome-to-tech-talk/ ตอนแรกเขาไม่ค่อยเข้าใจว่าเกิดอะไรขึ้น แต่พอผมอธิบายวิธีทำงานและสิ่งที่เกิดขึ้นข้างในแล้ว เขาบอกว่า “ตอนนี้ชอบมากจริง ๆ แต่คุณกำลังซ่อนส่วนที่น่าสนใจทั้งหมดจากผู้ชมอยู่”
“งาน” ที่ผมทำใน ศิลปะเชิงกำเนิด ไม่ใช่เสียงหรือภาพที่ออกมาเป็นผลลัพธ์ แต่ใกล้เคียงกับชุดกฎหรืออัลกอริทึมมากกว่า ดังนั้นผมจึงอยากหาวิธีแสดงให้เห็นเสมอว่าเกิดอะไรขึ้น “ในกล่อง” ซอร์สโค้ดอาจดีได้ แต่ก็เฉพาะกับคนที่อ่านได้เท่านั้น และไอเดียหลักก็มักถูกฝังอยู่ท่ามกลาง boilerplate กับความประหลาดเชิงเทคนิคได้ง่าย เลยไปสู่ความคิดที่จะเขียนในรูปแบบสกอร์ โดยพยายามแสดงสมมติฐานพื้นฐานของสิ่งที่กำลังเกิดขึ้น แต่ใส่รายละเอียดแค่พอไม่ให้หลงทางไปกับมัน
https://massmoca.org/event/walldrawing305/
ดังนั้น voicing ที่เปิดและโปร่งกว่าคงหลุดไปเยอะ
inversion เปลี่ยนรสชาติของคอร์ดได้ค่อนข้างมาก
อยากได้คำแนะนำหนังสือหรือคอร์ส ทฤษฎีดนตรี ที่ช่วยให้เข้าใจอัลกอริทึมนี้ หรือ https://www.vitling.xyz/toys/acid-banger/
มันมีทั้งกฎที่ค่อนข้างเรียบง่ายซึ่งคาดเดาได้ว่าจะทำให้อะไรฟังดูโอเค และกฎที่ซับซ้อนกว่า อีกทั้งเป็นที่รู้กันดีว่าดนตรีบาโรกมีลักษณะเป็นอัลกอริทึม แต่ตอนนี้ยังจับทางไม่ได้เลย
เคยลองค้นหาในแนวนี้มาก่อน แต่จำไม่ค่อยได้ว่าหนังสือที่ดูตอนนั้นมีปัญหาตรงไหนแน่ ๆ อาจเป็นเพราะส่วนใหญ่พื้นฐานเกินไปจนไม่ค่อยช่วยเท่าไร เมื่อนานมาแล้วเคยฝึก solfège ขั้นพื้นฐานมาก และอ่านโน้ตได้ แต่ตอนนั้นยังเด็กเกินกว่าจะตั้งคำถามที่ตอนนี้สงสัย หรือเข้าใจว่าการฝึกนั้นมีไว้เพื่ออะไร
สุดท้ายแล้วถ้าไม่ได้ลองเขียนเพลงเองเยอะ ๆ ก็เข้าใจทฤษฎีดนตรีได้ยาก คล้ายกับการอ่านหนังสือ JavaScript ถ้าไม่เคยเขียนซอฟต์แวร์เลย และไม่มีแผนจะเขียนในอนาคต ก็ไม่มีทางเข้าใจหนังสือนั้นได้จริง ๆ
ถ้าจะอธิบายว่าแอปพลิเคชันนี้ทำงานอย่างไร อาจเป็นการสุ่มเลือกส่วนย่อยของโน้ตในคีย์ไมเนอร์ หรือก็คือระดับขั้นของสเกล สเกลเพนทาโทนิก ซึ่งเป็นส่วนย่อยของโน้ตไม่เกิน 5 ตัวจากสเกล จะจำกัดพื้นที่ของเมโลดีที่เป็นไปได้ ทำให้องค์ประกอบส่วนใหญ่ฟังดูดี ถ้าใช้โน้ตน้อยลงก็จะฟังไพเราะแบบคาดเดาได้มากขึ้น แต่อาจน่าสนใจน้อยลง เช่น โน้ตที่ประกอบเป็นคอร์ดราก ไม่ว่าจะเล่นลำดับใดก็มักฟังดูดีเสมอ โดยทั่วไป acid line จะบอกใบ้คอร์ดไมเนอร์บางคอร์ดผ่าน arpeggio ซึ่งเป็นเมโลดีวนซ้ำที่ประกอบด้วยโน้ตของคอร์ดนั้นเท่านั้น
อีกทั้งส่วนย่อยของสเกลหนึ่งก็มักอยู่ในสเกลอื่นได้เสมอ ถ้าสร้างช่วงที่ใช้ส่วนย่อยของโน้ตร่วมกัน แล้วเปลี่ยนไปยังสเกลใหม่ ก็สามารถ modulate จากสเกลหนึ่งไปยังอีกสเกลหนึ่งได้ ด้วยวิธีนี้ เพลงหนึ่งเพลงสามารถผ่านสเกลที่เป็นไปได้ทั้งหมด และใน acid techno แทบทั้งหมดจะเป็นสเกลไมเนอร์
คุณหยิบสิ่งที่เขียนขึ้นสำหรับคนที่มีความเข้าใจสูงกว่าระดับตัวเองมาก ๆ แล้วหวังว่าจะได้อะไรมากมายไม่ได้ ต้องอ่านทีละหน้าอย่างช้า ๆ ตั้งใจ และถ่อมตัว ใช้เวลาให้เข้าใจคำศัพท์แต่ละคำที่เจออย่างเต็มที่ ระหว่างทางจะต้องอ้อมไปศึกษาประเด็นอื่นเป็นชั่วโมง ๆ และในนั้นก็จะมีคำศัพท์อื่นแตกแขนงออกไปไม่รู้จบ คุณข้ามคำอย่าง interval, locrian/lydian แล้วคาดหวังว่าจะเข้าใจเองแบบซึมผ่านเข้ามาไม่ได้
หนังสือพูดถึงว่า pitch คืออะไร ทำไมสมองถึง “ชอบ” การผสม pitch บางแบบและไม่ชอบบางแบบ เป็นต้น ตัวทฤษฎีต่าง ๆ เกี่ยวกับประสาทวิทยาดนตรีก็น่าสนใจในตัวเอง และตอนต้นเล่มก็มีการแนะนำทฤษฎีพื้นฐานมาก ๆ ด้วย
ถ้าจะให้ทิปกับผู้เขียน: ตัด Arduino ออก แล้วใช้ไลบรารีนี้เพื่อ ควบคุมสตริป WS281x โดยตรง จาก Raspberry Pi ได้ จะลดความซับซ้อนทั้งฮาร์ดแวร์และซอฟต์แวร์ลงได้มาก: https://github.com/jgarff/rpi_ws281x
ผมใช้สิ่งนี้บน Pi 4 เพื่อควบคุมสตริป WS2815 จำนวน 466 พิกเซลที่ติดไว้ตามชายคาบ้านสำหรับตกแต่งช่วงเทศกาล
ในโปรเจกต์นี้มี ทฤษฎีดนตรี ที่น่าสนใจซ่อนอยู่ การเปลี่ยนผ่านทั้งหมดจากคอร์ดหนึ่งไปยังอีกคอร์ดหนึ่งตามอัลกอริทึมที่อธิบายไว้ จะเป็นการเปลี่ยนไปยังคอร์ดเดิม เช่น จาก C เมเจอร์ไปยัง inversion ของมัน หรือการเพิ่ม/ลบโน้ตตัวที่ 7 หรือไม่ก็เป็นหนึ่งในสามการแปลงพื้นฐานของทฤษฎี Neo-Riemannian คือ P, L, R
รายละเอียดดูได้จากหน้า Wikipedia ของ Neo-Riemannian theory ส่วนใจความสำคัญของ P, L, R คือแบบนี้ ถ้าคอร์ดใด ๆ x เป็นเมเจอร์ P(x), L(x), R(x) ทั้งหมดจะกลายเป็นไมเนอร์ ถ้า x เป็นไมเนอร์ P(x), L(x), R(x) ทั้งหมดจะกลายเป็นเมเจอร์ P, L, R ล้วนเป็นการแปลงผกผันของตัวเอง ดังนั้น P(P(x)) = x และ L กับ R ก็เช่นกัน ด้วยลำดับการแปลง P, L, R แบบใดแบบหนึ่ง คุณสามารถเดินทางจากคอร์ดเมเจอร์หรือไมเนอร์ใด ๆ ไปยังคอร์ดเมเจอร์หรือไมเนอร์ใด ๆ ก็ได้ เช่น จาก C เมเจอร์ ถ้าใช้ L แล้วตามด้วย R จะได้ G เมเจอร์ ถ้าใช้ R แล้วตามด้วย P จะได้ A เมเจอร์ และถ้าใช้ L แล้วตามด้วย P จะได้ E เมเจอร์
การเคลื่อนที่ด้วย การแปลง Neo-Riemannian เป็นวิธีไปยังศูนย์กลางคีย์ที่ “ไกล” หรือก็คือที่มีโน้ตร่วมกับคีย์เริ่มต้นไม่มาก ได้อย่างรวดเร็วผ่าน voice leading ที่ราบรื่น แต่ตอนฟังเพลงนี้ ผมประหลาดใจที่ฮาร์โมนีรู้สึกค่อนข้างมั่นคง จุดที่น่าสนใจคือด้วยโครงสร้างของอัลกอริทึม การแปลง P ปรากฏน้อยกว่าการแปลง L หรือ R หรือการคงอยู่ที่คอร์ดเดิมมาก การแปลง P เป็นวัตถุดิบสำคัญในการเคลื่อนไปยังคีย์ที่ห่างไกลอย่างรวดเร็ว แต่จากการคำนวณคร่าว ๆ ของผม หากสมมติว่ากระบวนการ Markov ถึงสถานะคงตัวแล้ว และไม่สนใจข้อจำกัดของ pitch ต่ำสุด/สูงสุด การเปลี่ยนคอร์ดทั้งหมดจะมีเพียง 1/27 เท่านั้นที่เป็นการแปลง P นอกจากนี้ในสถานะคงตัว คอร์ด 7th ยังพบได้บ่อยกว่าคอร์ดสามเสียงธรรมดาในอัตรา 16:11 ด้วย
อยากรู้รายละเอียดทางเทคนิค เพราะอยากเข้าใจขีดจำกัดของ Raspberry Pi มากขึ้น
ทั้งหมดนี้ไม่สามารถจัดการด้วย Raspberry Pi ตัวเดียวและ ขา GPIO จำนวนมากที่ต่ออยู่กับมันได้หรือ? ตอนนี้รู้สึกว่า Raspberry Pi ยังถูกใช้งานไม่เต็มที่ และการทำให้เหลือบอร์ดเดียวก็ดูจะเรียบง่ายกว่า แถมมีข้อดีคือจำเป็นต้องต่อไฟแค่จุดเดียวด้วย
ถ้าสิ่งที่ Pi ทำมีแค่ “การเลือกโน้ตและการสังเคราะห์บัฟเฟอร์เสียงเอง” Arduino Uno ก็น่าจะทำได้ไม่ใช่หรือ?
ชอบตรงที่เขียนเป็น pseudocode ให้ทุกคนเข้าใจได้
ผมก็เคยทำโปรเจกต์แบบนี้ โดยเฉพาะส่วนการสร้างเพลง เลยชอบวิธีนำเสนอแบบนี้มาก ถ้ามีเดโมวิดีโอด้วยคงยิ่งดี เพราะโปรเจกต์โค้ดจำนวนมาก ผู้เขียนอธิบายด้วยกำแพงข้อความยาว ๆ อย่างเดียว จนคนอ่านตายตั้งแต่ยังไม่ทันเริ่ม
เจ๋งมาก ถ้ามี คำแนะนำการสร้างแบบละเอียด สำหรับทำสิ่งนี้ก็คงดี
น่าจะเอาไปใช้เป็นอินโทรของเซ็ต Four Tet ได้เลย :)
สวยงาม ทำให้นึกภาพ ดาวเคราะห์ต่างดาว ที่พืชเป็นแบบนี้
สิ่งเหล่านี้อาจรวมกันเป็นป่า และอาจปรับจังหวะเข้าหากันได้เหมือนเมโทรนอม หรือหิ่งห้อยที่ซิงก์กัน