Afspilning af lyde
resumé
Importerer og afspiller en lydfil, der er oprettet i XACT.
Driftsmiljø
Forudsætninger
Understøttede XNA-versioner |
|
Understøttede platforme |
|
Windows påkrævet Vertex Shader-version | 1.1 |
Windows påkrævet Pixel Shader-version | 1.1 |
Driftsmiljø
perron |
Sådan arbejder du med eksemplet
Virker tastaturXbox | 360 controllermus | ||
---|---|---|---|
Afspilning af lyde | En | En | - |
stof
Bemærk: Disse tips er baseret på XNA Game Studio 2.0.
For at afspille lyden skal du registrere den fil, der er oprettet i "Oprettelse af en fil til afspilning af lyd med XNA" til projektet.
Højreklik på mappen Indhold, og vælg Tilføj - Eksisterende element.
Den. Vælg "xap"-filen, der skal indlæses. ("Audio.xap" i eksemplet)
xap-filen føjes til mappen Indhold.
Flyt derefter den wave-fil, du brugte til at oprette xap-filen, direkte til mappen Indhold. En ting at huske på er, at WAV-filen skal placeres i samme relative sti, som da XAP-filen blev oprettet.
I dette tilfælde flytter jeg wave-filen direkte til mappen, men jeg har ikke noget problem med at tilføje den til mit projekt.
Det er det, du er klar til at gå. Fra nu af vil det være et program.
mark
<summary>
オーディオエンジン
</summary>
private AudioEngine audioEngine = null;
<summary>
WaveBank
</summary>
private WaveBank waveBank = null;
<summary>
SoundBank
</summary>
private SoundBank soundBank = null;
For at afspille lyde skal du bruge tre ting: "AudioEngine", "WaveBank" og "SoundBank". Du vil højst sandsynligt bruge SoundBanks eller AudioEngines, men du bliver nødt til at oprette alle tre forekomster.
Oprettelse af en forekomst
<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();
}
Lydrelaterede forekomster oprettes i Game.Initialize-metoden. Når du opretter hvert, indstiller du argumentet til . xgs」「. xwb」「. .xsb"-filer, som automatisk oprettes på baggrund af xap-projektfilen, når du opretter projektet.
Navnene på lyd-, lydbank- og wavebank-filerne skal være de samme som de navne, du angav, da du oprettede projektet i XACT. Da stien til filen er i forhold til den eksekverbare fil, er det også nødvendigt at inkludere stien til mappen "Indhold" i dette eksempel.
AudioEngine
**Konstruktør
Opretter en forekomst af AudioEngine-klassen til håndtering af lydobjekter.
indstillingerFil | streng | Stien til den konfigurationsfil, der skal indlæses |
WaveBank
konstruktør
Opretter en forekomst af klassen WaveBank, der indeholder en samling af wave-filer.
audioEngine | AudioEngine | WaveBank og AudioEngine |
nonStreamingWaveBankFilnavn | streng | Sti til den WaveBank-fil, der skal indlæses |
SoundBank
konstruktør
Opretter en forekomst af SoundBank-klassen, der indeholder en samling køer.
audioEngine | AudioEngine | AudioEngine til at oprette forbindelse til SoundBanks |
Filnavn | streng | Sti til SoundBank-filen for at indlæse |
Afspilning af lyde
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;
}
Hvis du vil afspille en lyd, skal du bruge SoundBank.PlayCue-metoden. Lydkilden, der skal afspilles, er angivet ved navnet på "Cue"-sættet i XACT.
Når den er afspillet, vil lyden fortsætte med at flyde indtil slutningen. Derudover kan den samme lydkilde afspilles igen og igen ved at afspille den flere gange.
I eksemplet trykkes der på hver A-knap eller A-tast for at afspille én gang.
SoundBank.PlayCue
metode
Spil køen.
Navn | streng | Navnet på den kø, der skal afspilles |
Alle 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);
}
}
}