Spela upp ljud
sammanfattning
Importerar och spelar upp en ljudfil som är skapad i XACT.
Operativ miljö
Förutsättningar
XNA-versioner som stöds |
|
Plattformar som stöds |
|
Windows Nödvändig version av Vertex Shader | 1.1 |
Windows Pixel Shader-version som krävs | 1.1 |
Operativ miljö
plattform |
Så här arbetar du med exemplet
Fungerar tangentbordXbox | 360 controllermus | ||
---|---|---|---|
Spela upp ljud | A | A | - |
substans
Obs: Dessa tips är baserade på XNA Game Studio 2.0.
För att kunna spela upp ljudet måste du registrera filen som skapades i "Skapa en fil för att spela upp ljud med XNA" i projektet.
Högerklicka på mappen Innehåll och välj Lägg till - Befintligt objekt.
Den. Välj den "xap"-fil som ska laddas. ("Audio.xap" i exemplet)
xap-filen läggs till i mappen Innehåll.
Flytta sedan den påfyllnadsfil som du använde för att skapa xap-filen direkt till mappen Innehåll. En sak att tänka på är att WAV-filen måste placeras i samma relativa sökväg som när XAP-filen skapades.
I det här fallet flyttar jag påfyllnadsfilen direkt till mappen, men jag har inga problem med att lägga till den i mitt projekt.
Det är allt, du är redo att gå. Från och med nu kommer det att vara ett program.
fält
<summary>
オーディオエンジン
</summary>
private AudioEngine audioEngine = null;
<summary>
WaveBank
</summary>
private WaveBank waveBank = null;
<summary>
SoundBank
</summary>
private SoundBank soundBank = null;
För att spela upp ljud, använd tre saker: "AudioEngine", "WaveBank" och "SoundBank". Du kommer troligen att använda SoundBanks eller AudioEngines, men du måste skapa alla tre instanserna.
Skapa en instans
<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();
}
Ljudrelaterade instanser skapas i metoden Game.Initialize. När du skapar varje klass anger du argumentet till . xgs」「. xwb」「. .xsb"-filer, som skapas automatiskt baserat på xap-projektfilen när du skapar projektet.
Namnen på ljud-, ljudbanks- och vågbanksfilerna måste vara de namn du angav när du skapade projektet i XACT. Dessutom, eftersom sökvägen till filen är relativ till den körbara filen, är det nödvändigt att inkludera sökvägen till mappen "Innehåll" i det här exemplet.
AudioEngine
**Konstruktor
Skapar en instans av klassen AudioEngine för hantering av ljudobjekt.
inställningarFil | sträng | Sökväg till konfigurationsfilen som ska läsas in |
WaveBank
konstruktor
Skapar en instans av klassen WaveBank som innehåller en samling påfyllnadsfiler.
audioEngine | AudioEngine (på engelska) | WaveBank och AudioEngine |
nonStreamingWaveBankFilnamn | sträng | Sökväg till WaveBank-filen som ska laddas |
SoundBank
konstruktor
Skapar en instans av klassen SoundBank som innehåller en samling köer.
audioEngine | AudioEngine (på engelska) | AudioEngine för att ansluta till SoundBanks |
filnamn | sträng | Sökväg till SoundBank-filen som ska laddas |
Spela upp ljud
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;
}
Om du vill spela upp ett ljud använder du metoden SoundBank.PlayCue. Vilken ljudkälla som ska spelas upp anges med namnet på den "Cue" som är inställd i XACT.
När det väl har spelats kommer ljudet att fortsätta att flöda till slutet. Dessutom kan samma ljudkälla spelas upp om och om igen genom att spela upp den flera gånger.
I samplingen trycks varje A-knapp eller A-tangent in för att spela upp en gång.
SoundBank.PlayCue
metod
Spela på signalen.
Namn | sträng | Namnet på kön som ska spelas upp |
Alla koder
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);
}
}
}