netlib.narod.ru< Назад | Оглавление | Далее >

Игровой звук

В этом разделе вы улучшите ваш пример, добавив фоновый звук и звуковой эффект столкновения, исследовав таким образом базовые звуковые концепции в XNA.

XNA работает со звуком, используя ту же самую структуру, что и для управления графикой: конвейер содержимого. Для XNA звук — это всего лишь другой тип игрового содержимого.

Но здесь есть одно различие: хотя вы можете непосредственно добавлять графическое содержимое в игровой проект XNA, но звуковое содержимое может быть добавлено только в специальном формате, генерируемом выпущенной Microsoft утилитой создания корсс-платформенного звукового сопровождения, известной как XACT.

Создание звукового содержимого с XACT

Вы применяете XACT для создания звуковых банков и волновых банков, компилируемых в файлы XAP, которые игра затем может использовать через диспетчер содержимого.

В этом разделе вы узнаете основы того, как создавать звуковое содержимое с XACT и использовать его в программе, после чего будете готовы к добавлению звукового сопровождения в ваши игры. В следующих главах вы увидите, как это делается при создании настоящих игр!

Первый шаг — это запуск XACT. В меню Start (Пуск) выберите All Programs (Все программы) | XNA Game Studio Express | Tools | Cross-platform Audio Creation Tool (XACT). Будет показано главное окно XACT и для вас автоматически будет создан новый проект XACT.

В левой стороне окна вы увидите дерево с корнем New Project и множеством дочерних узлов разных типов под ним. Щелкните правой кнопкой мыши по узлу Wave Bank и выберите в выпадающем меню команду New Wave Bank, как показано на рис. 2.10.


Рис. 2.10. Создание нового волнового банка в XACT

Рис. 2.10. Создание нового волнового банка в XACT


В правой стороне окна появится новое пустое окно с новым волновым банком. Щелкните правой кнопкой мыши по этому окну, и появится новое выпадающее меню (рис. 2.11).


Рис. 2.11. Операции, доступные для волнового банка

Рис. 2.11. Операции, доступные для волнового банка


В списке доступных для волнового банка операций выберите Insert Wave File(s). Чтобы придерживаться общедоступных файлов, найдите на вашем жестком диске файлы chord.wav и notify.wav. Эти файлы устанавливаются с Windows по умолчанию как звуки системных событий. Если вы не можете найти эти файлы, спокойно выбирайте любые доступные вам файлы WAV. Два файла будут добавлены в ваш волновой банк.

Вам также необходимо создать звуковой банк. Щелкните правой кнопкой мыши по элементу Sound Bank в левом меню и добавьте новый звуковой банк. В правой части главного окна программы появится новое окно с только что созданным звуковым банком.

Чтобы окна были лучше видны, потратьте секунду на их упорядочивание, — выберите в меню Windows команду Tile Horizontally. Полученное в результате окно показано на рис. 2.12.


Рис. 2.12. Утилита XACT после упорядочивания окон

Рис. 2.12. Утилита XACT после упорядочивания окон


Теперь выберите оба файла в волновом банке (щелкнув по их именам, держа нажатой клавишу Ctrl) и перетащите их в левую часть второй панели, где расположены столбцы Cue Name и Notes. Имена файлов в волновом банке становятся из красных зелеными, и те же имена добавляются как содержимое в список звуков и список реплик в окне Sound Bank.

Завершающий шаг перед записью вашего проекта: вам необходимо зациклить звук, чтобы вы могли изучить как воспроизводить, приостанавливать и прекращать воспроизведение звука, используя его в качестве фоновой музыки игры. Для этого в списке звуков щелкните по звуку notify. В левой панели отобразится иерархическое дерево Track 1 | Play Wave | notify. Щелкните по узлу Play Wave и перейдите к окну свойств, которое будет отображено в нижней правой части главного окна. Найдите флажок с именем Infinite в группе свойств Looping. Установите этот флажок, как показано на рис. 2.13.


Рис. 2.13. Установка свойств Play Wave в утилите XACT

Рис. 2.13. Установка свойств Play Wave в утилите XACT


Теперь сохраните проект как MySounds.xap. Вы готовы использовать звук в вашей программе!

ПРИМЕЧАНИЕ
Чтобы услышать звуки из звукового или волнового банка, находясь внутри XACT, щелкните по кнопке Play на панели инструментов; при этом должна быть запущена утилита XACT Auditioning Utility. Запускайте ее, выбрав Start (Пуск) | All Programs (Все программы) | Microsoft XNA Game Studio | Tools | XACT Auditioning Utility.

Использование звука в играх

XNA делает использование звукового содержимого в играх таким же простым, как использование графики и работа с пользовательским вводом.

На первом этапе вам необходимо добавить звуковое содержимое в решение, чтобы вы могли использовать его через конвейер содержимого. Затем вы определяете относящиеся к звуку объекты, инициализируете их и, наконец, используете содержимое в игровом коде.

Вы добавляете звуковое содержимое в игру точно так же, как ранее в этой главе добавляли графическое содержимое: щелкните правой кнопкой мыши по окну Solution Explorer, и выберите из выпадающего меню команду Add New Item. Помните, когда откроется диалоговое окно Add Existing Item, из выпадающего списка Files of type вам надо выбрать Content Pipeline Files, чтобы вы увидели файл MySounds.xap, сгенерированный в первой части этого раздела.

После добавления файла XAP в решение вам надо создать объекты для управления файлом содержимого. Вам нужны три объекта: AudioEngine, WaveBank и SoundBank.

Следующий пример кода показывает вам как расширить предыдущий пример, добавив код для создания и инициализации звуковых компонентов:

// Звуковые объекты
AudioEngine audioEngine;
WaveBank waveBank;
SoundBank soundBank;

protected override void Initialize()
{
    audioEngine = new AudioEngine("MySounds.xgs");

    // Предполагается, что для волнового и звукового банков
    // оставлены имена по умолчанию. Чтобы изменить эти имена,
    // измените свойства в XACT
    waveBank = new WaveBank(audioEngine, "Wave Bank.xwb");
    soundBank = new SoundBank(audioEngine, "Sound Bank.xsb");

    base.Initialize();
}

Есть два способа воспроизведения звука: простое воспроизведение или циклическое воспроизведение. Как только вы инициализировали звуковые объекты, выполнение воспроизвеления — это вопрос вызова простого метода PlayCue. Вы можете усовершенствовать предыдущий пример, добавив воспроизведение звуковой реплики каждый раз, когда спрайты сталкиваются. Найдите проверку столкновений в методе Update класса Game1, и добавьте туда воспроизведение звука chord, как показано ниже:

if (mySprite1.Collides(mySprite2))
{
    mySprite1.velocity *= -1;
    GamePad.SetVibration(PlayerIndex.One,1.0f, 1.0f);
    soundBank.PlayCue("chord");
}
else
    GamePad.SetVibration(PlayerIndex.One, 0f, 0f);
}

Вы можете также расширить пример, включив в него бесконечное циклическое воспроизведение звука, определенного вами в проекте XACT; однако для этого вам потребуется больше возможностей управления звуком, чем для простого запуска воспроизведения из звукового банка. Вам необходим способ начать воспроизведение, остановить его, приостановить на время и возобновлять, когда вам это нужно. Кроме того, необходим какой-либо способ, чтобы знать текущее состояние звука (воспроизведение, пауза, остановка и т.д.).

Объект Cue предоставляет методы и свойства, необходимые вам для этого. Давайте расширим наш пример, создав в классе Game1 новый объект Cue с именем MyLoopingSound:

Cue myLoopingSound;

В методе Initialize прочитаем звуковую реплику и запустим ее воспроизведение, добавив следующий фрагмент кода:

myLoopingSound = soundBank.GetCue("notify");
myLoopingSound.Play();

В этом фрагменте вы используете метод Play для запуска воспроизведения звука notify, который ранее в этом разделе вы добавили в проект XACT. Поскольку в интерфейсе XACT вы установили свойство Looping для данного звука равным Infinite, звук будет непрерывно воспроизводиться, когда вы запустите программу. Запустите программу сейчас и убедитесь сами.

Объект Cue предлагает набор методов и свойств, предоставляющих вам лучший контроль над воспроизведением. Следующий фрагмент кода показывает как приостанавливать и возобновлять воспроизведение реплики при нажатии клавиши B на игровом пульте Xbox 360. Если к вашему компьютеру не подключен игровой пульт, можете заменить управление на клавишу клавиатуры или кнопку мыши, используя знания, полученные ранее в этой главе.

// Воспроизводим или останавливаем бесконечно зацикленный звук
// при нажатии кнопки B
if (GamePad.GetState(PlayerIndex.One).Buttons.B ==
                                          ButtonState.Pressed)
{
    if (myLoopingSound.IsPaused)
        myLoopingSound.Resume();
    else
        myLoopingSound.Pause();
}

 

ПРИМЕЧАНИЕ
Метод Stop объекта реплики позволяет вам остановить звук немедленно или «как указано автором», что значит, что звуковой движок ждет окончания текущей звуковой фазы или следующего перехода для изящной остановки звука. Помните: если вы остановите звук, то не сможете воспроизводить его снова, пока не вызовете еще раз метод GetCue.

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz