Възпроизвеждане на звуци
резюме
Импортира и възпроизвежда звуков файл, създаден в XACT.
Работна среда
Предпоставки
Поддържани версии на XNA |
|
Поддържани платформи |
|
Необходима версия на Vertex Shader за Windows | 1.1 |
Необходима версия на пикселния шейдър за Windows | 1.1 |
Работна среда
платформа |
Как да работим с пробата
Работи клавиатураXbox | 360 контролермишка | ||
---|---|---|---|
Възпроизвеждане на звуци | Една | Една | - |
вещество
Забележка: Тези съвети са базирани на XNA Game Studio 2.0.
За да възпроизведете звука, трябва да регистрирате файла, създаден в "Създаване на файл за възпроизвеждане на звук с XNA" в проекта.
Щракнете с десния бутон върху папката Съдържание и изберете Добавяне - Съществуващ елемент.
Моделът . Изберете файла "xap", който да заредите. ("Audio.xap" в извадката)
Файлът xap се добавя към папката "Съдържание".
След това преместете файла wave, който сте използвали за създаване на xap файла, директно в папката Content. Едно нещо, което трябва да имате предвид, е, че WAV файлът трябва да бъде поставен в същия относителен път, както при създаването на XAP файла.
В този случай премествам файла уейв директно в папката, но нямам проблем да го добавя към моя проект.
Това е, готови сте да тръгнете. Оттук нататък това ще бъде програма.
поле
<summary>
オーディオエンジン
</summary>
private AudioEngine audioEngine = null;
<summary>
WaveBank
</summary>
private WaveBank waveBank = null;
<summary>
SoundBank
</summary>
private SoundBank soundBank = null;
За да възпроизвеждате звуци, използвайте три неща: "AudioEngine", "WaveBank" и "SoundBank". Най-вероятно ще използвате SoundBanks или AudioEngines, но ще трябва да създадете и трите екземпляра.
Създаване на екземпляр
<summary>
ゲームが始まる前の初期化処理を行うメソッド
グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
</summary>
protected override void Initialize()
{
// オーディオデータの読み込み
this.audioEngine = new AudioEngine(@"Content\Audio.xgs");
this.waveBank = new WaveBank(this.audioEngine, @"Content\Wave Bank.xwb");
this.soundBank = new SoundBank(this.audioEngine, @"Content\Sound Bank.xsb");
// コンポーネントの初期化などを行います
base.Initialize();
}
Инстанциите, свързани със звука, се създават в метода Game.Initialize. Когато създавате всеки клас, задавате аргумента на . xgs」「. xwb」「. .xsb", които се създават автоматично въз основа на файла на проекта xap, когато изграждате проекта.
Имената на файловете с аудио, звукова банка и уейвбанк трябва да съвпадат с имената, които сте задали, когато сте създали проекта в XACT. Също така, тъй като пътят на файла е свързан с изпълнимия файл, е необходимо да включите пътя на папката "Съдържание" в този пример.
AudioEngine
**Конструктор
Създава екземпляр на класа AudioEngine за работа с аудио обекти.
settingsFile | низ | Път на конфигурационния файл за зареждане |
WaveBank
Конструктор
Създава екземпляр на класа WaveBank, който съдържа колекция от файлове уейв.
audioEngine | AudioEngine | WaveBank и AudioEngine |
nonStreamingWaveBankИме на файл | низ | Път към файла WaveBank за зареждане |
SoundBank
Конструктор
Създава екземпляр на класа SoundBank, който съдържа колекция от опашки.
audioEngine | AudioEngine | AudioEngine за свързване със SoundBanks |
Име | низ | Път до файла на SoundBank за зареждане |
Възпроизвеждане на звуци
if (keyState.IsKeyDown(Keys.A) || padState.Buttons.A == ButtonState.Pressed)
{
if (this.pressed == false)
{
// サウンドを再生
this.soundBank.PlayCue("Sample");
this.pressed = true;
}
}
else
{
this.pressed = false;
}
За да възпроизведете звук, използвайте метода SoundBank.PlayCue. Източникът на звук, който ще се възпроизвежда, се определя от името на комплекта "Cue" в XACT.
След като се възпроизведе, звукът ще продължи да тече до края. Освен това един и същ източник на звук може да се възпроизвежда отново и отново, като го възпроизвеждате няколко пъти.
В примера всеки бутон A или клавиш A се натиска, за да се възпроизведе веднъж.
SoundBank.PlayCue
метод
Изиграйте репликата.
Име | низ | Името на опашката за игра |
Всички кодове
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 PlaySound
{
<summary>
ゲームメインクラス
</summary>
public class GameMain : Microsoft.Xna.Framework.Game
{
<summary>
グラフィックデバイス管理クラス
</summary>
private GraphicsDeviceManager graphics = null;
<summary>
スプライトのバッチ化クラス
</summary>
private SpriteBatch spriteBatch = null;
<summary>
オーディオエンジン
</summary>
private AudioEngine audioEngine = null;
<summary>
WaveBank
</summary>
private WaveBank waveBank = null;
<summary>
SoundBank
</summary>
private SoundBank soundBank = null;
<summary>
キープレスフラグ
</summary>
private bool pressed = false;
<summary>
GameMain コンストラクタ
</summary>
public GameMain()
{
// グラフィックデバイス管理クラスの作成
this.graphics = new GraphicsDeviceManager(this);
// ゲームコンテンツのルートディレクトリを設定
this.Content.RootDirectory = "Content";
}
<summary>
ゲームが始まる前の初期化処理を行うメソッド
グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
</summary>
protected override void Initialize()
{
// オーディオデータの読み込み
this.audioEngine = new AudioEngine(@"Content\Audio.xgs");
this.waveBank = new WaveBank(this.audioEngine, @"Content\Wave Bank.xwb");
this.soundBank = new SoundBank(this.audioEngine, @"Content\Sound Bank.xsb");
// コンポーネントの初期化などを行います
base.Initialize();
}
<summary>
ゲームが始まるときに一回だけ呼ばれ
すべてのゲームコンテンツを読み込みます
</summary>
protected override void LoadContent()
{
// テクスチャーを描画するためのスプライトバッチクラスを作成します
this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
// TODO: this.Content を使用してゲームコンテンツを読み込む
// ロジックを書いてください
}
<summary>
ゲームが終了するときに一回だけ呼ばれ
すべてのゲームコンテンツをアンロードします
</summary>
protected override void UnloadContent()
{
// TODO: ContentManager で管理されていないコンテンツを
// ここでアンロードしてください
}
<summary>
描画以外のデータ更新等の処理を行うメソッド
主に入力処理、衝突判定などの物理計算、オーディオの再生など
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Update(GameTime gameTime)
{
// キーボードの情報取得
KeyboardState keyState = Keyboard.GetState();
// ゲームパッドの情報取得
GamePadState padState = GamePad.GetState(PlayerIndex.One);
// Xbox360 コントローラの BACK ボタンを押したときにゲームを終了させます
if (padState.Buttons.Back == ButtonState.Pressed)
{
this.Exit();
}
if (keyState.IsKeyDown(Keys.A) || padState.Buttons.A == ButtonState.Pressed)
{
if (this.pressed == false)
{
// サウンドを再生
this.soundBank.PlayCue("Sample");
this.pressed = true;
}
}
else
{
this.pressed = false;
}
// 登録された GameComponent を更新する
base.Update(gameTime);
}
<summary>
描画処理を行うメソッド
</summary>
<param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
protected override void Draw(GameTime gameTime)
{
// 画面を指定した色でクリアします
this.GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: ここに描画処理を記述します
// 登録された DrawableGameComponent を描画する
base.Draw(gameTime);
}
}
}