پخش صداها
خلاصه
یک فایل صوتی ایجاد شده در XACT را وارد و پخش می کند.
محیط عملیاتی
پیش نیازها
نسخه های XNA پشتیبانی شده |
|
پلتفرم های پشتیبانی شده |
|
نسخه Vertex Shader مورد نیاز ویندوز | 1.1 |
ویندوز نسخه Pixel Shader مورد نیاز است | 1.1 |
محیط عملیاتی
بستر |
نحوه کار با نمونه
صفحه کلید کار می کندکنترلر ایکس باکس | 360ماوس | ||
---|---|---|---|
پخش صداها | A | A | - |
ماده
توجه: این نکات بر اساس XNA Game Studio 2.0 است.
برای پخش صدا، باید فایل ایجاد شده در "ایجاد فایل برای پخش صدا با XNA" را در پروژه ثبت کنید.
روی پوشه محتوا کلیک راست کرده و Add - Existing Item را انتخاب کنید.
این . فایل "xap" را برای بارگیری انتخاب کنید. ("Audio.xap" در نمونه)
فایل xap به پوشه محتوا اضافه می شود.
در مرحله بعد، فایل موجی را که برای ایجاد فایل 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 هنگام ساخت پروژه ایجاد می شوند.
نام فایل های صوتی، Soundbank و wavebank باید با نام هایی که هنگام ایجاد پروژه در XACT تنظیم کرده اید یکسان باشد. همچنین، از آنجایی که مسیر فایل نسبت به فایل اجرایی است، لازم است مسیر پوشه "Content" را در این مثال قرار دهید.
AudioEngine
**سازنده
نمونه ای از کلاس AudioEngine را برای مدیریت اشیاء صوتی ایجاد می کند.
تنظیماتفایل | رشته | مسیر فایل پیکربندی برای بارگذاری |
WaveBank
سازنده
نمونه ای از کلاس WaveBank ایجاد می کند که شامل مجموعه ای از فایل های موج است.
موتور صوتی | موتور صوتی | WaveBank و AudioEngine |
nonStreamingWaveBankنام فایل | رشته | مسیر فایل WaveBank برای بارگذاری |
SoundBank
سازنده
نمونه ای از کلاس SoundBank ایجاد می کند که شامل مجموعه ای از صف ها است.
موتور صوتی | موتور صوتی | 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);
}
}
}