|
เขียนเกม บนเครื่อง Nintendo DS : ทดลองใส่เสียงให้ ds
ตอนนี้เราจะลองใส่เสียงให้ ds กัน ปกติในเกมส์ เสียงที่ใช้จะมีสองแบบคือ sound effect กับ เพลงบรรเลง ในครั้งนี้จะพูดถึง sound effect ก่อนครับ
sound effect จะเป็นพวกเสียงยิง ระเบิด จะใช้ format .wav (format อื่นก็ได้มัง ;-P) แล้วแปลงให้เป็น .raw ไฟล์ คือไฟล์ที่ไม่มี header ใน tutorial ส่วนใหญ่จะให้ใช้ sox แปลงไฟล์ แต่หลังๆ มันมี noise effect เลยจะขอแนะนำ audacity ให้จิ้มd/l มาใช้เลยครับ เมื่อ ติดตั้งเสร็จให้ ตั้งค่าไฟล์เป็น raw โดยไปที่เมนู edit ->preferences เลือก tab : file format -> ไปที่กรอบ Uncompressed exported format เลือก other จะมี dialog ขึ้นมา ให้ตั้งค่าตามรูป
วิธีแปลงก็ง่ายๆ คือ เปิด file แล้วไปเมนู File -> export as RAW แล้วให้นำไฟล์ .raw ไปใส่ที่ folder arm9data
ต่อไปมาดูส่วนการ coding บ้าง source code d/l มาดูก่อน
รูปแบบ folder จะเปลี่ยนแปลงนิดหน่อยเนื่องจากถ้าเป็นการประมวลผลในส่วนของ เสียงและ touch pen จะใช้ cpu arm7 แต่ถ้าเป็นgraphic จะเป็น cpu arm9 และมีการแก้ไข makefile ลองเปรียบเทียบดูใน source ไฟล์ล่ะกัน อย่างไรก็ตามทาง libnds ได้เขียนfunction เสียงให้เรียกใช้ใน arm9 ได้เลย ให้เปิดไฟล์ main9.c ทำการ include ไฟล์ข้อมูลเสียง ในที่นี้จะมีสองเสียง #include "click_raw.h" #include "chime_raw.h"
ต่อไปเป็นการตั้งค่าเสียงและเรียกใช้งาน มีสองแบบคือ แบบที่1 setGenericSound(11025, /* sample rate */ 127, /* volume */ 64, /* panning */ 1 ); /* sound format*/ การเรียกใช้งาน playGenericSound(chime_raw, chime_raw_size ); ค่า chime_raw และ chime_raw_size จะเป็นตัวแปรเก็บค่าpointerไปยังข้อมูล และตัวแปรเก็บค่าขนาดของข้อมูล แต่เนื่องจากมี bug (มัง) ใน devkitPro ค่าของ chime_raw_size ต้องระบุเป็นตัวเลขเลย โดยดูค่าจากขนาดไฟล์ .raw นั้นๆ ดังนั้นจึงต้องเขียนเป็น playGenericSound(chime_raw, 20000 ); แต่จริงขนาดไฟล์ raw ของเสียง chime = 20480 แต่ผมต้องปรับเป็น 20000 เพราะอะไร ให้ทดลองเองนะครับ
แบบที่ 2 TransferSoundData click = { click_raw, /* Sample address */ //click_raw_size, /* Sample length */ 1615, /* Sample length */ 11025, /* Sample rate */ 127, /* Volume */ 64, /* panning */ 1 /* format */ }; เช่นเดียวกันครับ เสียง click ต้องปรับเป็นตัวเลข แต่คราวนี้ผมใส่ขนาดไฟล์ .raw ที่แท้จริงเลย ไม่ได้ลดขนาด ? การเรียกใช้ playSound(&click);
สรุปการเรียกทั้งสองแบบ ก็มีข้อดีข้อเสียต่างกัน เช่นแบบที่1 set ครั้งเดียว แล้วเรียกใช้งาน แต่ความดัง(volume) ไม่สามารถปรับได้ในกรณีที่มีสองเสียง ส่วนแบบที่2 สามารถset ค่าต่างๆ ของแต่ละเสียงตามใจเราได้เลย ไม่ว่าเป็น volume หรือ sample rate อย่างอื่นไม่ได้ลองครับ ถ้าลองแล้วได้ผลอย่างก็บอกกันด้วยครับ แต่แบบที่สองมีข้อเสียตรงต้องเขียน code อ่านข้อมูลเสียงทุกเสียงตลอด
โอ้ ได้ความรู้แค่นี้น่าจะทำเกมง่ายๆ ได้สักเก็บไหมเนีย Project เกมส์จำเลข 1-4 กติกา เกมจะสุ่มตัวเลขมาทีละหนึ่งตัว(1-4) และแสดงผลพร้อมมีเสียงประกอบประจำตัวเลข แล้วผู้เล่นต้องกดปุ่มตัวเลขให้ถูกต้อง ต่อมาเกมก็จะ เลือกตัวเลขขึ้นมาอีกหนึ่งตัว แต่ตอนแสดงผลจะแสดงตัวเลข ต้วแรกก่อน และตามด้วยตัวที่สอง ดังนั้นผู้เล่นต้องกดปุ่มตัวเลขให้ถูกต้อง ทั้งสองตัว ต่อจากนั้น ก็จะมีเลข 3 ตัว 4 5 6 ... ไปจนจำบ่ได้ 55 และให้คะแนะตัวเลขล่ะ1 คะแนน ที่ต้องมีเสียงประกอบเพื่อช่วยในการจำนั้นเอง การเลือกตัวเลข1-4 ก็ใช้ปุ่มทิศทางทั้ง4 ก็แล้วกันครับ ถ้าใครทำได้ส่งมาให้ดูมังน่าคร๊าบบ
Create Date : 24 สิงหาคม 2551 |
Last Update : 24 สิงหาคม 2551 14:00:53 น. |
|
0 comments
|
Counter : 754 Pageviews. |
|
|
|
| |
|
|