Afspilning af lyde

Side opdateret :
Dato for oprettelse af side :

resumé

Importerer og afspiller en lydfil, der er oprettet i XACT.

Driftsmiljø

Forudsætninger

Understøttede XNA-versioner
  • 2.0
  • 3.0
Understøttede platforme
  • Windows (XP SP2 eller nyere, Vista)
  • Xbox 360
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.


xap ファイルを選択

Den. Vælg "xap"-filen, der skal indlæses. ("Audio.xap" i eksemplet)


追加された xap ファイル

xap-filen føjes til mappen Indhold.


Wave ファイルを Content フォルダに追加

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);
        }
    }
}