ลองใช้ Speaker เล่น Melody กันเถอะ

                มีบางคนคิดว่า Speaker ไม่สามารถทำหลายเสียงได้เพราะส่วนใหญ่ก็จะได้ยินแค่เสียงเดียว ปี๊บ ปี๊บ ปี๊บ.. ประมาณนี้ แต่จริง ๆ แล้วมันสามารถทำได้หลายเสียง เพียงแค่เราเปลี่ยนคลื่นความถี่มัน ก็จะทำให้เจ้าตัว Speaker นั้นสามารถเปร่งเสียงออกมาได้อย่างหลากหลาย 




                เรามาดูกันดีกว่าครับว่าเราจะสามารถเปลี่ยนเสียง 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 สามารถเปลี่ยนเสียงได้จากการปรับเปลี่ยนคลื่นความถี่ให้กับมันที่หรือก็คือจังหวะว่าต้องการให้มันเล่นแบบไหนทำนองไหน โค๊ดนี่เป็นแค่โค๊ดคร่าว ๆ ที่ตั้งใจคืออยากให้ผู้อ่านรู้ว่ามันสามารถเปลี่ยนเสียงได้จากการเปลี่ยนคลื่นความถี่เท่านั้น ที่เหลือก็แล้วแต่ผู้อ่านจะจินตนาการเลยย

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม : รู้จักกับ Memory

คณิตศาสตร์กับโปรแกรมมิ่งมันเป็นยังไงนะ ตอนที่ 1 เกริ่นพีทาโกรัส

Pointer กับตัวแปร Array นะจ๊ะ.. [Back to basic แต่ไม่ basic]