13 สิงหาคม 2562

Ren'Py พื้นฐาน | บทที่ 6 เสียงประกอบเกม

5 บทก่อนหน้าเราได้เรียนการสร้างเกมแนว Visual Novel ด้วยโปรแกรม Ren'Py ได้เรียนพื้นฐานมาครบถ้วนแล้ว? ใช่ เกมที่สร้างในบทก่อนหน้าก็ดูดีแล้ว แต่รู้สึกว่าขาดอะไรไปบางอย่างหรือเปล่า? เรายังไม่ได้ใส่เสียงในเกมเลย บทนี้จะมาเรียนกันเรื่องการใส่เสียงกัน

ประเภทเสียง

ไฟล์เสียงต้องอยู่ในโฟลเดอร์โปรเจ็กต์เกม (ชื่อโปรเจ็กต์\game) ไฟล์เสียงที่โปรแกรม Ren'Py รองรับได้แก่
  • Opus (.opus)
  • Ogg Vorbis (.ogg)
  • MP3 (.mp3)
  • WAV(.wav)

เสียงในโปรแกรม Ren'Py แบ่งเป็น 3 ประเภทได้แก่ Music, Sound, และ Voice เสียงทั้ง 3 ประเภทแบ่งตามการวนซ้ำและการเริ่มต้นดังตารางข้างล่าง ไม่จำเป็นต้องเป็นเสียงตามประเภทจริง ๆ ก็ได้ เช่น ถ้าต้องการเปิดเพลงครั้งเดียวจบ ไม่วนซ้ำ สามารถเปิดเพลงนั้นด้วยคำสั่งเปิดเสียงเอฟเฟกต์ได้ โปรแกรม Ren'Py สามารถเปิดหลายเสียงพร้อมกันได้ แต่ต้องไม่ใช่เสียงประเภทเดียวกัน (เปิดได้ประเภทละ 1 เสียง รวมเป็นเปิดได้พร้อมกัน 3 เสียง)

ความแตกต่างของประเภทเสียง
ประเภทเสียงวนซ้ำเริ่มต้นระยะเวลาเปิดเสียง
Music (เสียงเพลง)เริ่มทันทีไม่สิ้นสุด
จนกว่าจะมีคำสั่งหยุดหรือเปลี่ยนเสียง
Sound (เสียงประกอบ)เริ่มทันทีเปิดจนจบครั้งเดียว
Voice (เสียงพูด)เริ่มพร้อมกล่องข้อความต่อไปเปิดจนจบครั้งเดียว
หรือเปิดจนกว่าเปลี่ยนกล่องข้อความ (ถ้ายังไม่จบ)

นอกจากนี้โปรแกรม Ren'Py ยังมีเสียงประเภทพิเศษคือ Audio จุดเด่นของเสียงประเภทนี้คือสามารถเปิดหลายเสียงพร้อมกันได้ แม้ว่ากำลังเปิดเสียง Audio อื่นอยู่ก็ตาม แต่ Audio ค่อนข้างมีข้อจำกัดมากกว่าเสียง 3 ประเภทข้างต้น เช่น ไม่สามารถต่อคิวเสียงได้ ไม่สามารถหยุดเสียงได้ ถ้าไม่จำเป็นจริง ๆ ผู้เขียนไม่แนะนำให้ใช้เสียง Audio


Play: เปิดเสียง

play คือคำสั่งที่เปิดเสียง ถ้ามีเสียงในประเภทเดียวกันกำลังเปิดอยู่ จะหยุดเสียงเดิมและเปิดเสียงใหม่แทน (ยกเว้นเสียง Audio) รูปแบบของคำสั่ง play คือ

นอกจากนี้ยังสามารถเปิดเสียงโดยค่อย ๆ เพิ่มความดังเสียงได้ ท้ายบรรทัด play ให้ใส่ส่วนขยาย fadein ตามด้วยเวลาที่เพิ่มเสียง หน่วยเป็นวินาที เช่น ต่อท้ายด้วย fadein 2.5 หมายถึงค่อย ๆ เพิ่มเสียงเป็นเวลา 2.5 วินาที หลังจากนั้นเปิดเสียงต่อตามปกติ

ตัวอย่างการใช้คำสั่ง play เช่น


สำหรับการใช้คำสั่ง play กับเสียง Voice จะเป็นการเปิดเสียงทันที และจะหยุดเสียงเมื่อแสดงหรือเปลี่ยนกล่องข้อความ ซึ่งอาจเปิดและปิดเร็วมากจนฟังไม่ทัน และไม่เหมาะกับการใช้งานเท่าไร การเปิดเสียง Voice ผู้เขียนแนะนำให้ใช้คำสั่ง voice


Stop: หยุดเสียง

stop คือคำสั่งที่หยุดเสียงในประเภทนั้นที่กำลังเปิดอยู่ ไม่สามารถใช้กับเสียง Audio ได้ รูปแบบของคำสั่ง stop คือ

เช่นเดียวกับคำสั่ง play ในคำสั่ง stop สามารถต่อท้ายด้วยส่วนขยาย fadeout ตามด้วยเวลาที่ลดเสียง เพื่อให้ค่อย ๆ ลดความดังเสียงจนหยุดเสียงในที่สุด

ตัวอย่างการใช้คำสั่ง stop เช่น



Queue: ต่อคิวเปิดเสียง

ถ้าใช้คำสั่ง play เปิดเสียงใหม่ขึ้นมา เสียงเดิมจะหยุดลงทันที ถ้าต้องการให้เปิดเสียงเดิมจนจบก่อนแล้วค่อยเปิดเสียงใหม่ เราต้องใช้คำสั่ง queue ยกเว้นเสียง Audio ไม่สามารถใช้คำสั่งนี้ได้ รูปแบบของคำสั่ง queue มี 2 รูปแบบ

กรณีต่อคิว 1 เสียงมีรูปแบบดังนี้


กรณีต่อคิวหลายเสียงจะมีกี่เสียงก็ได้ แต่ต้องเรียงตามลำดับ มีรูปแบบดังนี้


ตัวอย่างการใช้คำสั่ง queue เช่น



Voice: เสียงพูด เสียงพากย์

voice คือคำสั่งที่เปิดเสียง Voice พร้อมกับกล่องข้อความต่อไป และจะหยุดเมื่อเปิดเสียงจนจบ ถ้าเสียงยังไม่จบแต่ผู้เล่นเปลี่ยนกล่องข้อความ เสียง Voice เดิมจะหยุดทันที คำสั่งนี้เหมาะกับเสียงพูดของตัวละครตามข้อความที่แสดง ทำให้ผู้เล่นได้ยินเสียงตัวละครกำลังพูดประโยคที่อยู่ในกล่องข้อความ รูปแบบของคำสั่ง voice คือ

ถ้าต้องการให้เสียง Voice เดิมไม่หยุดเมื่อเปลี่ยนกล่องข้อความ (เสียงนั้นต้องยังไม่จบ) ต้องใส่คำสั่ง voice sustain ก่อนหน้าคำสั่งแสดงกล่องข้อความใหม่ เช่น



Set_Volume: เปลี่ยนความดังเสียง

ไม่มีคำสั่งในภาษา Ren'Py โดยตรงสำหรับการเปลี่ยนความดังเสียง ต้องใช้ฟังก์ชัน (Function) เพื่อเปลี่ยนความดังเสียงดังนี้

การเปลี่ยนความดังเสียงด้วยคำสั่ง set_volume ส่งผลต่อความดังของเสียงประเภทนั้นตลอดไป จนกว่าจะมีการเปลี่ยนความดังเสียงใหม่ ฟังก์ชันนี้ประกอบด้วย 3 พารามิเตอร์ (Parameter) ได้แก่
  • ระดับเสียง ใส่ค่าเป็นตัวเลขตั้งแต่ 0.0 (ไม่มีเสียง) ถึง 1.0 (เสียงดังที่สุด) บังคับใส่พารามิเตอร์นี้
  • delay ใส่ค่าเป็นตัวเลข เพื่อรอเวลาตามที่กำหนดก่อนเปลี่ยนความดังเสียง ถ้าไม่ใส่พารามิเตอร์นี้จะมีค่าเริ่มต้นเป็น 0
  • channel ใส่ค่าเป็นข้อความ เช่น music, หรือ sound เพื่อเปลี่ยนความดังเสียงของประเภทนั้น ถ้าไม่ใส่พารามิเตอร์นี้จะมีค่าเริ่มต้นเป็น music

ตัวอย่างการใช้ฟังก์ชัน set_volume


ฟังก์ชัน set_volume เป็นสคริปต์ภาษา Python (ไม่เกี่ยวกับคำว่า renpy ด้านหน้าฟังก์ชัน) ดังนั้นต้องใส่ฟังก์ชันนี้ในรูปแบบเดียวกับสคริปต์ Python ทั่วไป เช่น นำหน้าด้วยเครื่องหมาย $, หรือใช้บล็อก python: ผู้อ่านสามารถย้อนกลับไปเรียนเรื่องการใช้สคริปต์ Python ในโปรแกรม Ren'Py ได้ที่ Ren'Py พื้นฐาน | บทที่ 4 ตัวแปรและตัวดำเนินการ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น