Спонсор: Microsoft
Опубликован: 10.04.2009 | Уровень: специалист | Доступ: свободно
Самостоятельная работа 7:

Озвучивание игр

Аннотация: В этой лабораторной работе мы займемся озвучиванием игр.

Примеры к лабораторной работе

Задачи работы

  • Освоить основные операции по работе с WAV-файлами
  • Освоить инструменты XACT для создания XAP-проектов
  • Научиться проигрывать фоновую музыку в играх
  • Научиться проигрывать звуки, соответствующие различным игровым событиям

Этапы озвучивания игры

Для того, чтобы озвучить игру, нужно проделать следующие шаги:

  1. Подготовить WAV-файлы. Звуковое оформление игры состоит из двух частей. Во-первых – это фоновая музыка, которая может меняться в зависимости от отображаемого игрового экрана или игрового уровня, и звуки, соответствующие игровым событиям.
  2. Создать новый XNA-проект (можно озвучивать и уже созданные игры, в которых звуковое оформление не применялось)
  3. Создать в папке Content отдельную папку для хранения звуковых файлов, например, назвав ее Audio, скопировать в эту папку подготовленные файлы
  4. Создать новый XACT-проект и сохранить его в папке Audio игрового проекта.
  5. Добавить WAV-файлы в проект, сформировать WaveBank и SoundBank
  6. Загрузить XACT-проект в игру
  7. Включить воспроизведение фоновой музыки, которая обычно зацикливается
  8. Включать воспроизведение нужных звуковых фрагментов при возникновении соответствующих событий.

Озвучивание игры

Создадим новый стандартный игровой проект P7_1. С помощью Solution Explorer создадим папку Audio в разделе Content. Найдем его папку в файловой системе компьютера, пройдем в директорию Content \Rightarrow Audio. Скопируем туда три WAV-файла – s1.wav, s2.wav, music.wav. Эти файлы мы взяли в бесплатной библиотеке аудиофайлов http://www.koumis.com . Файлы в библиотеке представлены в формате MP3, мы конвертировали их в формат WAV с помощью аудиоредактора GoldWave.

Выполним команду меню Пуск \Rightarrow Все программы \Rightarrow Microsoft XNA Game Studio 2.0 \Rightarrow Tools \Rightarrow XACT auditioning utility. Этой командой мы запустили Auditioning-сервер, который нужен для проигрывания музыки в XACT. Теперь запустим XACT командой Пуск \Rightarrow Все программы \Rightarrow Microsoft XNA Game Studio 2.0 \Rightarrow Tools \Rightarrow Microsoft Cross Platform Audio Creation Tool (XACT). На рис. 11.1. вы можете видеть стартовое окно XACT.

Командой File \Rightarrow New Project создадим новый XACT-проект, назовем его xP7_1 и сохраним в папке Audio нашего игрового проекта.

Щелкнем правой кнопкой мыши по миниатюре Wave Banks, которая находится в левой части окна программы и в появившемся меню щелкнем пункт New Wave Bank, дадим новому банку Wave-файлов имя Sounds. Wave-банки предназначены для хранения Wave-файлов, которые мы планируем включить в игру. Теперь щелкнем правой кнопкой мыши по пункту Sound Banks, выберем в появившемся меню пункт New Sound Bank, назовем новый звуковой банк SoundBank. Расположим окна двух банков в окне программы. Вот как должен выглядеть экран программы после этих действий (рис. 11.2.).

Окно программы после добавления звуковых банков

увеличить изображение
Рис. 11.2. Окно программы после добавления звуковых банков

В Wave-банк мы должны добавить файлы, которые подготовлены ранее. Для этого нужно щелкнуть правой кнопкой мыши в поле окна Sounds (Wave Bank) и в появившемся меню выбрать пункт Insert Wave Files. В появившемся окне (автоматически будет открыта папка Audio нашего проекта) выберем нужные файлы и нажмем кнопку Открыть. Файлы появятся в окне Wave-банка. Теперь выделим значки файлов в этом окне и перетащим их в окно SoundBank (Sound Bank), в его поле Cue Name. Автоматически будут созданы закладки, которые мы будем использовать в игре для проигрывания соответствующих звуков. Звуки s1.wav и s2.wav будут соответствовать некоторым игровым событиям. Они будут проигрываться при наступлении определенного события в игре. А звук music.wav – фоновая музыка – будет проигрываться все время, пока игра запущена. Для того, чтобы он проигрывался циклически, нам нужно настроить его свойства. Выделим его в поле Sound Name и в панели свойств звука (она расположена в левой нижней части окна программы) установим флажок Infinite в группе параметров Looping. На данный момент это все, что нам нужно сделать в XACT. Сохраним проект и закроем окно редактора и XACT Auditioning Utility. Вернемся к игровому проекту P7_1. В окне Solution Explorer добавим XACT-проект в игру. Для того, чтобы воспользоваться звуками, нам нужно загрузить звуковые ресурсы.

Используем в данном проекте игровой компонент spriteComp из проекта P4_3, модифицировав его таким образом, чтобы при столкновении объекта, созданного на его основе, со стенами, воспроизводился звук s1.wav, и чтобы при щелчке мышью по этому объекту воспроизводился звук s2.wav. Так же добавим в нашу игру возможность приостанавливать и возобновлять проигрывание фоновой музыки по нажатию клавиш A и S соответственно.

В листинге 11.1. приведен код класса Game1.

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 P7_1
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        //Переменная для работы с аудиоустройством
        AudioEngine audioEngine;
        //Переменная для работы с Wave-банком
        WaveBank waveBank;
        //Переменная для работы с Sound-банком
        SoundBank soundBank;
        //Переменная для работы с фоновой музыкой игры
        Cue musicCue;
        Texture2D texture;
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        protected override void Initialize()
        {
            //Загружаем аудиоресурсы для игры
            audioEngine = new AudioEngine("Content\\Audio\\xP7_1.xgs");
            waveBank = new WaveBank(audioEngine, "Content\\Audio\\Sounds.xwb");
            soundBank = new SoundBank(audioEngine, "Content\\Audio\\SoundBank.xsb");
            //Присваиваем переменной ссылку на закладку с именем Music
            musicCue = soundBank.GetCue("Music");
            //Включаем проигрывание фоновой музыки
            musicCue.Play();
            this.IsMouseVisible = true;
            base.Initialize();
        }

        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            Services.AddService(typeof(SpriteBatch), spriteBatch);
            texture = Content.Load<Texture2D>("BallandBats");
            // Создаем игровые объекты
            for (int i=1;i<5;i++)
            {
                Components.Add(new spriteComp(this, ref texture,
                    new Rectangle(16, 203, 17, 17), i, this, soundBank));
            }
        }

        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        
        protected override void Update(GameTime gameTime)
        {
            //Блок управления проигрыванием по нажатию клавиш
            //При нажатии клавиши A приостанавливаем проигрывание
            KeyboardState kbState = Keyboard.GetState();
            if (kbState.IsKeyDown(Keys.A))
            {
              musicCue.Pause();
            }
            //При нажатии клавиши S продолжаем проигрывание музыки
            if (kbState.IsKeyDown(Keys.S))
            {
                musicCue.Resume();
            }

            audioEngine.Update();
            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here
            spriteBatch.Begin();
            base.Draw(gameTime);
            spriteBatch.End();
        }
    }
}
Листинг 11.1. Код класса Game1
Alina Lasskaja
Alina Lasskaja

Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить.....