播放聲音
總結
匯入並播放在 XACT 中創建的聲音檔。
經營環境
先決條件
支援的 XNA 版本 |
|
支援的平臺 |
|
Windows 所需的頂點著色器版本 | 1.1 |
Windows 所需的像素著色器版本 | 1.1 |
經營環境
平臺 |
如何使用樣本
工作鍵盤Xbox | 360 控制器滑鼠 | ||
---|---|---|---|
播放聲音 | 一個 | 一個 | - |
物質
注: 這些提示基於 XNA Game Studio 2.0。
為了播放聲音,您需要將在「創建用於播放 XNA 的聲音的檔」中創建的檔註冊到專案中。
右鍵按下 Content 資料夾,然後選擇 Add - Existing Item。
這。 選擇要載入的 「xap」 檔案。 (示例中的 “Audio.xap”)
xap 檔將添加到 Content 資料夾中。
接下來,將用於創建 xap 檔的 wave 檔直接移動到 Content 資料夾。 要記住的一點是,WAV 檔必須放置在與創建 XAP 檔時相同的相對路徑中。
在本例中,我將 wave 檔直接移動到資料夾中,但將其添加到我的項目中沒有任何問題。
就是這樣,你準備好了。 從這裡開始,它將是一個程式。
田
<summary>
オーディオエンジン
</summary>
private AudioEngine audioEngine = null;
<summary>
WaveBank
</summary>
private WaveBank waveBank = null;
<summary>
SoundBank
</summary>
private SoundBank soundBank = null;
要播放聲音,請使用三個選項:“AudioEngine”、“WaveBank”和“SoundBank”。 您很可能會使用 SoundBank 或 AudioEngine,但您需要創建所有三個實例。
創建實例
<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 專案文件自動創建的。
audio、soundbank 和 wavebank 檔案的名稱必須與在 XACT 中創建工程時設置的名稱相同。 此外,由於文件的路徑是相對於可執行檔的,因此在此示例中必須包含“Content”資料夾的路徑。
AudioEngine
**構造 函數
創建用於處理音頻物件的 AudioEngine 類的實例。
settings檔 | 字串 | 要載入的設定檔的路徑 |
WaveBank
構造 函數
創建包含 wave 檔集合的 WaveBank 類的實例。
audioEngine (音訊引擎) | 音訊引擎 | WaveBank 和 AudioEngine |
nonStreamingWaveBank文件名 | 字串 | 要載入的 WaveBank 檔案的路徑 |
SoundBank
構造 函數
創建包含佇列集合的 SoundBank 類實例。
audioEngine (音訊引擎) | 音訊引擎 | 用於連接到 SoundBank 的 AudioEngine |
檔名 | 字串 | 要載入的 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 方法。 要播放的聲源由 XACT 中設置的 「Cue」 的名稱指定。
播放后,聲音將繼續流動直到結束。 此外,同一聲源可以通過多次播放來一遍又一遍地播放。
在該示例中,按下每個 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);
}
}
}