.NET Logo
Welcome Guest Search | Active Topics | Members | Log In | Register

การใส่เสียงใน xna Options · View
paedotnet
Posted: Friday, October 03, 2008 10:08:54 PM

Rank: มือเทพ
Groups: Member

Joined: 12/6/2007
Posts: 354
Location: bkk

สร้างโปรเจค xna ขึ้นมา ตรงโปรเจคใน Solution จะมี folder ที่ชื่อ Content ให้คลิกขวาเลือก Add->New folder
ดังรูป

ตั้งชื่อ folder ว่า sound
พอสร้าง folder แล้วต่อไปให้เตรียมไฟล์เสียง .wav  และในการใส่เสียงใน xna เราจะใช้ เครื่องมื่อที่เรียกว่า
 XACT Tool ที่มาพร้อมกับการติดตั้ง xna studio  แล้ว 
การใช้งาน XACT Tool ให้เปิด โปรแกรมนี้ขึ้นมาก่อนดังรูป 

 

หลังจากที่เปิดโปรแกรม XACT แล้วก็ให้ไปที่ File->New Project จากนั้นให้กำหนด New Project Path ไปที่ folder sound ที่สร้างขึ้นมาใน xna แล้วก็ตั้งชื่อเป็น Sound_Resouce
หลังจากนั้นจะต้องสร้าง Wave Banks เพื่อทำหน้าที่เก็บไฟล์เสียง .wav ถ้าในเกมส์มีการใช้เสียงหลายๆเสียงเราสามารถที่จะสร้าง Wave Bank ได้มากกว่า 1 อัน
ในการสร้าง Wave Bank นี้ให้ไปที่ menu แล้วเลือก Wave Banks แล้วเลือก New Wave Bank  หลังจากเลือกแล้วก็จะมีหน้าต่างดังรูป


หลังจากที่สร้าง Wave Bank แล้วต่อไปให้ใส่ ไฟล์เสียง .wav เข้าไป ให้ไปที่ menu ที่ชื่อ Wave Bank แล้วเลือก Insert Wave File ซึ่งพอเลือกเสร็จแล้วก็จะมี
หน้าต่าง Open เกิดขึ้นมา ให้ browse ไปที่ file .wav แล้วกด open หลังจากนั้นไฟล์เสียงก็จะเข้ามาอยู่ใน
หน้าต่าง Wave Bank ดังรูป

สังเกตุว่าไฟล์ต่างๆที่ add เข้ามาจะเป็นตัวอักษรสีแดง ซึ่งหมายความว่ายังไม่สามารถที่จะใช้ไฟล์เสียงเหล่านี้ได้
ถ้าจะใช้งานก็จะต้องสร้าง Sound bank ขึ้นมาก่อนโดยแปลงไฟล์เหล่านี้ให้อยู่ใน sound bank ก่อน
การสร้าง Sound Bank
ไปที่ menu เลือก Sound Banks ->New Sound Bank  หลังจากนั้นจะมีหน้าต่าง Sound Bank เกิดขึ้นมาดังรูป


หลังจากนั้นให้ลากเสียงที่อยู่ใน Wave Bank ไปที่หน้าต่าง Sound Bank ตรง Cue name  ผลลัพธ์จะได้รูป


หลังจากนั้นก็ให้สร้าง Sound Project  โดยให้ไปที่ File->Build หลังจากเลือก Build แล้วจะมีหน้าต่างดังรูป


ก็ไม่ต้องแก้ไขตัวเลือกใดๆให้ใช้ค่า Default  และคลิกที่ปุ่ม Finish หลังจากนั้นก็ save project โดยไปที่ file->save project

พอทำถึงตรงนี้แล้วเราก็ได้สร้าง ไฟล์ เสียงที่ใช้สำหรับ xna เรียบร้อยแล้วต่อไปก็จะเป็นการนำไฟล์เหล่านี้มาใช้ในโปรแกรมกัน
ให้ไปที่ โปรเจค xna ที่สร้างตั้งแต่ตอนแรก ให้ไปที่ Content -> Sound แล้วคลิกขวาเลือก Add -> Existing Item แล้วให้ browse
ไปที่ folder sound ที่เราสร้างไว้แล้วจะมีชื่อ Sound_Resouce อยู่ให้เลือกแล้วคลิกที่ปุ่ม Add หลังจากเลือกแล้วให้ดูที่ folder sound
จะมีไฟล์ .xap เกิดขึ้นมา
ต่อไปก็เขียนโค้ดเพื่อเรียกใช้ไฟล์เสียงที่เราเตรียมไว้

ก่อนอื่นให้สร้าง object ของคลาส AudioEngine,SoundBank,WaveBank ก่อนดังนี้


     static AudioEngine audio_game;
        static WaveBank wave_game;
        static SoundBank sound_game;

จากนั้นในเมธอด LoadContent ก็เขียนโค้ดดังนี้เพื่อ load เสียงต่างๆ

 audio_game = new AudioEngine("Content\\Sounds\\GameSounds.xgs");
          wave_game = new WaveBank(audio_game, "Content\\Sounds\\Wave Bank.xwb");
            sound_game = new SoundBank(audio_game, "Content\\Sounds\\Sound Bank.xsb");

จากนั้นในเมธอด Update ก็สั่งให้เล่นเสียงในเมธอดนี้โดยในตัวอย่างนี้จะกดปุ่ม s บน keyboard แล้วให้เล่นเสียง
ก็ให้เขียนโค้ดดังนี้


   KeyboardState ks = Keyboard.GetState();
            if (ks.IsKeyDown(Keys.S))
            {
                sound_game.PlayCue("drumrool"); //drumrool เป็นชื่อไฟล์เสียงนะครับเราใช้เสียงไหนก็ใส่ชื่อนั้น(ไม่ต้องมี .wav) และเสียงที่จะใช้ได้ต้องการการทำ Sound Bank ก่อนนะครับ
            }
            audio_game.Update();

จากนั้นทดสอบรันดูแล้วกดปุ่ม s จะเห็นว่าตอนที่เรากดปุ่มนี้จะมีเสียงเกิดขึ้นมา

ตัวอย่างโค้ดใน Game1.cs

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace DrumPadnew
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        static AudioEngine audio_game;
        static WaveBank wave_game;
        static SoundBank sound_game;
         public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

       protected override void Initialize()
        {
           base.Initialize();
        }
      protected override void LoadContent()
        {
           spriteBatch = new SpriteBatch(GraphicsDevice);
           audio_game = new AudioEngine("Content\\Sounds\\GameSounds.xgs");
           wave_game = new WaveBank(audio_game, "Content\\Sounds\\Wave Bank.xwb");
           sound_game = new SoundBank(audio_game, "Content\\Sounds\\Sound Bank.xsb");
        
        }
     protected override void UnloadContent()
        {
        }
     protected override void Update(GameTime gameTime)
        {
            KeyboardState ks = Keyboard.GetState();
            if (ks.IsKeyDown(Keys.S))
            {
                sound_game.PlayCue("drumrool");
            }
            audio_game.Update();
        
            base.Update(gameTime);
        }
       protected override void Draw(GameTime gameTime)
        {
            graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
            base.Draw(gameTime);
        }
    }
}


 



[With great power comes great responsibility]
Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

YAFVision Theme Created by Jaben Cargman (Tiny Gecko)
Powered by Yet Another Forum.net version 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.


Sponsored by