播放声音
总结
导入并播放在 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);
}
}
}