Reproducción de sonidos

Actualización de la página :
Fecha de creación de la página :

resumen

Importa y reproduce un archivo de sonido creado en XACT.

Entorno operativo

Prerrequisitos

Versiones de XNA compatibles
  • 2.0
  • 3.0
Plataformas compatibles
  • Windows (XP SP2 o posterior, Vista)
  • Xbox 360
Versión requerida del sombreador de vértices de Windows 1.1
Versión de Pixel Shader requerida para Windows 1.1

Entorno operativo

plataforma

Cómo trabajar con la muestra

Teclado de trabajoMando Xbox 360ratón
Reproducción de sonidos Un Un -

sustancia

Nota: Estos consejos se basan en XNA Game Studio 2.0.

Para reproducir el sonido, debe registrar el archivo creado en "Creación de un archivo para reproducir sonido con XNA" en el proyecto.


サウンドファイルの登録

Haga clic con el botón derecho en la carpeta Contenido y seleccione Agregar - Elemento existente.


xap ファイルを選択

El. Seleccione el archivo "xap" para cargar. ("Audio.xap" en el ejemplo)


追加された xap ファイル

El archivo xap se agrega a la carpeta Contenido.


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

A continuación, mueva el archivo wave que utilizó para crear el archivo xap directamente a la carpeta Contenido. Una cosa a tener en cuenta es que el archivo WAV debe colocarse en la misma ruta relativa que cuando se creó el archivo XAP.

En este caso, estoy moviendo el archivo wave directamente a la carpeta, pero no tengo ningún problema en agregarlo a mi proyecto.


Eso es todo, estás listo para comenzar. A partir de aquí, será un programa.

campo

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

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

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

Para reproducir sonidos, use tres cosas: "AudioEngine", "WaveBank" y "SoundBank". Lo más probable es que utilices SoundBanks o AudioEngines, pero tendrás que crear las tres instancias.

Creación de una instancia

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

Las instancias relacionadas con el sonido se crean en el método Game.Initialize. Al crear cada clase, se establece el argumento en . xgs」「. xwb」「. .xsb", que se crean automáticamente en función del archivo de proyecto xap al compilar el proyecto.

Los nombres de los archivos de audio, banco de sonido y banco de ondas deben ser los mismos que los nombres establecidos al crear el proyecto en XACT. Además, dado que la ruta del archivo es relativa al archivo ejecutable, es necesario incluir la ruta de la carpeta "Contenido" en este ejemplo.

AudioEngine **Constructor

Crea una instancia de la clase AudioEngine para controlar objetos de audio.

settingsFile cuerda Ruta del archivo de configuración a cargar

WaveBank constructor

Crea una instancia de la clase WaveBank que contiene una colección de archivos wave.

motor de audio Motor de audio WaveBank y AudioEngine
nonStreamingWaveBankNombre de archivo cuerda Ruta al archivo WaveBank que se va a cargar

SoundBank constructor

Crea una instancia de la clase SoundBank que contiene una colección de colas.

motor de audio Motor de audio AudioEngine para conectarse a SoundBanks
Nombre cuerda Ruta al archivo de SoundBank que se va a cargar

Reproducción de sonidos

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

Para reproducir un sonido, use el método SoundBank.PlayCue. La fuente de sonido que se va a reproducir se especifica mediante el nombre del conjunto "Cue" en XACT.

Una vez reproducido, el sonido seguirá fluyendo hasta el final. Además, la misma fuente de sonido se puede reproducir una y otra vez reproduciéndola varias veces.

En la muestra, cada botón A o tecla A se presiona para reproducir una vez.

SoundBank.PlayCue método

Toca el taco.

nombre cuerda El nombre de la cola para jugar

Todos los códigos

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