Sufficiency Economy
Group Blog
 
All blogs
 
เขียนเกม บนเครื่อง 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.

ชื่อ :
Comment :
  *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

wink99_th
Location :
พิษณุโลก Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.