Geluiden afspelen

Pagina bijgewerkt :
Aanmaakdatum van pagina :

samenvatting

Importeert en speelt een geluidsbestand af dat in XACT is gemaakt.

Werkomgeving

Voorwaarden

Ondersteunde XNA-versies
  • 2.0
  • 3.0
Ondersteunde platforms
  • Windows (XP SP2 of hoger, Vista)
  • Xbox 360
Windows vereist Vertex Shader-versie 1.1
Windows Vereiste Pixel Shader-versie 1.1

Werkomgeving

perron

Hoe werkt u met het voorbeeld?

Werkt toetsenbordXbox 360-controllermuis
Geluiden afspelen Een Een -

stof

Let op: Deze tips zijn gebaseerd op XNA Game Studio 2.0.

Om het geluid af te spelen, moet u het bestand dat is gemaakt in "Een bestand maken voor het afspelen van geluid met XNA" registreren bij het project.


サウンドファイルの登録

Klik met de rechtermuisknop op de map Inhoud en selecteer Toevoegen - Bestaand item.


xap ファイルを選択

De. Selecteer het "xap"-bestand dat u wilt laden. ("Audio.xap" in het voorbeeld)


追加された xap ファイル

Het xap-bestand wordt toegevoegd aan de map Inhoud.


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

Verplaats vervolgens het wave-bestand dat u hebt gebruikt om het xap-bestand te maken rechtstreeks naar de map Inhoud. Een ding om in gedachten te houden is dat het WAV-bestand in hetzelfde relatieve pad moet worden geplaatst als toen het XAP-bestand werd gemaakt.

In dit geval verplaats ik het wave-bestand rechtstreeks naar de map, maar ik heb geen enkel probleem om het aan mijn project toe te voegen.


Dat is alles, je bent klaar om te gaan. Vanaf nu wordt het een programma.

veld

/// <summary>
/// オーディオエンジン
/// </summary>
private AudioEngine audioEngine = null;

/// <summary>
/// WaveBank
/// </summary>
private WaveBank waveBank = null;

/// <summary>
/// SoundBank
/// </summary>
private SoundBank soundBank = null;

Gebruik drie dingen om geluiden af te spelen: "AudioEngine", "WaveBank" en "SoundBank". U zult hoogstwaarschijnlijk SoundBanks of AudioEngines gebruiken, maar u moet alle drie de instanties maken.

Een instantie maken

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

Geluidsgerelateerde instanties worden gemaakt in de Game.Initialize-methode. Wanneer u een klasse maakt, stelt u het argument in op . xgs」「. xwb」「. .xsb"-bestanden, die automatisch worden gemaakt op basis van het XAP-projectbestand wanneer u het project bouwt.

De namen van de audio-, soundbank- en wavebank-bestanden moeten hetzelfde zijn als de namen die u hebt ingesteld toen u het project in XACT aanmaakte. Aangezien het pad van het bestand relatief is ten opzichte van het uitvoerbare bestand, is het ook noodzakelijk om het pad van de map "Inhoud" in dit voorbeeld op te nemen.

AudioEngine **Bouwer

Hiermee maakt u een exemplaar van de AudioEngine-klasse voor het verwerken van audio-objecten.

instellingenBestand snaar Pad van het te laden configuratiebestand

WaveBank bouwer

Hiermee maakt u een exemplaar van de WaveBank-klasse dat een verzameling wave-bestanden bevat.

audio-engine Audio-engine WaveBank en AudioEngine
nonStreamingWaveBankFilename snaar Pad naar het te laden WaveBank-bestand

SoundBank bouwer

Hiermee maakt u een exemplaar van de SoundBank-klasse dat een verzameling wachtrijen bevat.

audio-engine Audio-engine AudioEngine om verbinding te maken met SoundBanks
Bestandsnaam snaar Pad naar het te laden SoundBank-bestand

Geluiden afspelen

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

Gebruik de methode SoundBank.PlayCue om een geluid af te spelen. De geluidsbron die moet worden afgespeeld, wordt aangegeven door de naam van de "Cue" die in XACT is ingesteld.

Eenmaal afgespeeld, blijft het geluid stromen tot het einde. Bovendien kan dezelfde geluidsbron keer op keer worden afgespeeld door deze meerdere keren af te spelen.

In de sample wordt elke A-knop of A-toets ingedrukt om één keer af te spelen.

SoundBank.PlayCue methode

Speel de keu.

naam snaar De naam van de wachtrij om af te spelen

Alle codes

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