ลองใช้ Speaker เล่น Melody กันเถอะ
มีบางคนคิดว่า Speaker ไม่สามารถทำหลายเสียงได้เพราะส่วนใหญ่ก็จะได้ยินแค่เสียงเดียว ปี๊บ ปี๊บ ปี๊บ.. ประมาณนี้ แต่จริง ๆ แล้วมันสามารถทำได้หลายเสียง เพียงแค่เราเปลี่ยนคลื่นความถี่มัน ก็จะทำให้เจ้าตัว Speaker นั้นสามารถเปร่งเสียงออกมาได้อย่างหลากหลาย
เรามาดูกันดีกว่าครับว่าเราจะสามารถเปลี่ยนเสียง Speaker ได้อย่างไร เจ้าของบล็อกจะกำหนดไว้ทั้งหมด 8 เสียง คือ โด เร มี ฟา ซอล รา ที โด(สูง)
หน้าตาโค๊ดก็จะประมาณนี้นะครับ เดี๋ยวจะอธิบายในแต่ละส่วนกันเลยละกัน
เรามาดูกันดีกว่าครับว่าเราจะสามารถเปลี่ยนเสียง Speaker ได้อย่างไร เจ้าของบล็อกจะกำหนดไว้ทั้งหมด 8 เสียง คือ โด เร มี ฟา ซอล รา ที โด(สูง)
หน้าตาโค๊ดก็จะประมาณนี้นะครับ เดี๋ยวจะอธิบายในแต่ละส่วนกันเลยละกัน
- บรรทัดที่ 1 ก็คือกำหนด Pin Output ธรรมดา ๆ ครับ
- บรรทัดที่ 2,5 และ 6 มีความสัมพันธ์กันครับ ลองสังเกตุที่เจ้าของบล็อกเขียนดี ๆ สิ่งที่สัมพันธ์กันก็คือขนาดของ Array ครับ บรรทัดที่ 5 ก็คือการกำหนดโน๊ตขึ้นมา ดูในคอมเม้นบรรทัดที่ 3,4 ประกอบนะครับ จริง ๆ จะตั้งชื่อให้มันง่าย ๆ ก็ได้ แต่ที่เขียน c,d,e,f.. เพราะขี้เกียจแก้โค๊ดเดิมที่เขียนไว้นาน ฮ่า ๆ ๆ
- บรรทัดที่ 7 นั้นก็แค่กำหนดจังหวะขึ้นมาให้ตั้งไว้เป็น 300
- บรรทัดที่ 10 ถึง 13 ก็คือกัน setpin ให้กับ Speaker ว่าให้เป็น Pin output
- บรรทัดที่ 16 ถึง 30 เป็นการเช็คตัวโน๊ตว่ามี ' ' (ช่องว่าง 1 แทบ) รึป่าวคือถ้ามีก็จะให้ delay() หรือจังหวะที่ไม่มีเสียงเพลงนั่นเองสังเกตุจากบรรทัดที่ 5 ที่เจ้าของบล็อกเขียนไปคือใน array นั้นจะมีช่องว่างด้วยเพื่อให้ molody ที่เล่นมีการหยุด ส่วนบรรทัดที่ 6 ก็คือก็คือจังหวะของดนตรีถ้าอยากได้จังหวะที่ระเอียดกว่านี้สามารถเปลี่ยนจาก int เป็น double ก็ได้ครับ ยิ่งค่าเยอะจังหวะก็จะนานขึ้นด้วย และในส่วนที่ไม่มีช่องว่างก็ส่งค่าไปเช็คโน๊ตอีกทีที่ ฟังชั่น playNote() โดยการส่งตัวโน๊ตและจังหวะไปที่ฟังชั่นนั้น
- บรรทัดที่ 45 ถึง 57 ก็จะเป็นส่วนของฟังชั่น playNote() ก็จะมีการรับพารามิเตอร์เข้ามา ก็คือ char และ int ฟั้งชั่นนี้ก็จะเป็นการเปลี่ยบเทียบโน็ตครับ จะมีการสร้างตัวแปร char ที่เป็น array ข้อมูลภายในนั้นก็จะเก็บพวกโน๊ตไว้เหมือนกัน เพื่อเปลียบเทียบโน๊ตว่า โน๊ตที่ส่งเข้ามาตรงกับโน๊ตตัวไหนของฟังชั่น เท่ากันแล้วก็จะส่งค่าที่เป็นความถี่ออกไปที่ฟังชั่นพร้อมกับส่ง duration หรือก็คือค่าจังหวะที่เราส่งมาให้กับฟังชั่น playNote ตั้งแต่ทีแรกแล้วไปยังฟังชั่น playTone()
- บรรทัดที่ 33 ถึง 42 ก็คือส่วนของฟังชั่น playTone() ในฟังชั่นนี้ก็จะทำหน้าที่รับพารามิเตอร์ที่ส่งมาจาก playNote() อีกที โดยพารามิเตอร์ที่รับมาก็จะเป็นค่า tone หรือค่า ความถี่ที่ playNote() ส่งมานั่นเอง ในฟังชั่นนี้ก็จะให้วนลูปตามสูตรนี้เลย duration ก็คือจังหวะที่เราส่งมา ก็คือ beats*tempo ตั้งแต่ครั้งแรกนั่นเอง
แล้วก็ลองให้ผู้อ่านไปลองหาเพลงซักเพลงแกะโน๊ต ใส่จังหวะดี ๆ ก็เพราะได้เหมือนกันนะ อิอิ เห็นอย่างงี้มันไม่ได้สามารถเล่นได้แค่โน๊ตพื้นฐาน 8 ตัวเท่านั้นนะ จะเอาไปเป็นกีต้าก็ได้ถ้ารู้จักคลื่นความถี่ของโน๊ตแต่ละเฟตของกีต้า ลองเอาไปประยุกเล่นกัน
สรุปก็คือ Speaker สามารถเปลี่ยนเสียงได้จากการปรับเปลี่ยนคลื่นความถี่ให้กับมันที่หรือก็คือจังหวะว่าต้องการให้มันเล่นแบบไหนทำนองไหน โค๊ดนี่เป็นแค่โค๊ดคร่าว ๆ ที่ตั้งใจคืออยากให้ผู้อ่านรู้ว่ามันสามารถเปลี่ยนเสียงได้จากการเปลี่ยนคลื่นความถี่เท่านั้น ที่เหลือก็แล้วแต่ผู้อ่านจะจินตนาการเลยย
ความคิดเห็น
แสดงความคิดเห็น